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
相关产品推荐
相关产品推荐

