You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M3U8播放列表仅首段播放,仅hls.js可正常播放求助

HLS播放异常排查:仅首段播放后停止

我通过MediaRecorder API捕获3秒视频片段并发送至服务器,在Rails后端用FFmpeg转成.ts文件,上传到AWS后生成M3U8播放列表。现在的问题是,除了hlsjs官方播放器外,其他所有HLS播放器都只播放首段就停止,求排查方案。

生成的M3U8内容如下:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:2.0,
video_recording_001_2.0.ts
#EXTINF:2.866667,
video_recording_002_2.866667.ts
#EXTINF:2.866667,
video_recording_003_2.866667.ts
#EXTINF:2.9,
video_recording_004_2.9.ts
#EXTINF:2.833333,
video_recording_005_2.833333.ts
#EXTINF:2.866667,
video_recording_006_2.866667.ts
#EXTINF:2.9,
video_recording_007_2.9.ts
#EXTINF:2.9,
video_recording_008_2.9.ts
#EXTINF:2.9,
video_recording_009_2.9.ts
#EXTINF:2.9,
video_recording_010_2.9.ts
#EXTINF:2.866667,
video_recording_011_2.866667.ts
#EXTINF:2.833333,
video_recording_012_2.833333.ts
#EXT-X-ENDLIST

排查方向及解决建议

  • 降低HLS版本兼容性:当前播放列表使用#EXT-X-VERSION:3,部分老旧HLS播放器对v3标准支持不足,尝试将版本改为#EXT-X-VERSION:2,覆盖更广泛的播放器兼容范围。
  • 统一EXTINF时长精度:部分播放器对EXTINF的小数位数敏感,你当前的时长有6位小数,建议统一保留3位(如2.867)或尝试整数时长,避免解析异常。
  • 强制TS片段关键帧对齐:FFmpeg转码时必须保证每个.ts片段的起始是关键帧,否则播放器无法无缝切换片段。修改FFmpeg命令,添加-force_key_frames "expr:gte(t,n_forced*3)"(根据你的片段时长调整间隔),强制每个片段开头生成关键帧。
  • 检查AWS文件MIME类型:确认所有.ts文件的Content-Type设置为video/MP2T,M3U8文件的Content-Type设置为application/vnd.apple.mpegurl,错误的MIME类型会导致播放器无法识别后续片段。
  • 调整TARGETDURATION值:当前#EXT-X-TARGETDURATION:4,虽然大于最长片段时长2.9,但部分播放器对这个值的容错性较差,建议设置为比最大片段时长稍大的整数,比如3。
  • 验证TS文件路径正确性:确保M3U8中引用的.ts文件路径是绝对路径,或相对于M3U8文件的正确相对路径,避免播放器找不到后续片段。

内容的提问来源于stack exchange,提问作者tedGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:20:06