使用 FFmpeg 从文件动态生成 HLS 片段会创建无法播放的流

使用 FFmpeg 从文件动态生成 HLS 片段会创建无法播放的流

背景:我在一家电视台工作,那里有很多 .TS (VOD) 文件,有时需要手动检查。我希望在浏览器中进行检查,因此使用 HLS 或同等格式。

目标:我必须动态创建请求的 HLS 流。因此,当请求进入时会创建 M3U8 播放列表(声明整个文件所需的段数),然后当浏览器请求实际段时,ffmpeg 会动态生成并返回这些段。因此,每个段都必须快速且独立地生成,然后才能提供,而无需处理整个文件(手动检查主要包括在视频的开头、中间和结尾处查看几秒钟)。

测试:我创建了以下播放列表:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
sample-0.ts
#EXTINF:4.000000,
sample-1.ts
#EXTINF:4,000000,
sample-2.ts
#EXTINF:4,000000,
sample-3.ts
#EXTINF:4,000000,
sample-4.ts
#EXT-X-ENDLIST

然后我尝试使用以下命令生成段:

ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 0 -t 4 -f mpegts cache\sample-0.ts
ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 4 -t 4 -f mpegts cache\sample-1.ts
ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 8 -t 4 -f mpegts cache\sample-2.ts
ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 12 -t 4 -f mpegts cache\sample-3.ts
ffmpeg -i source.ts -c:v libx264 -b:v 1000k -c:a aac -b:a 128k -g 25 -ss 16 -t 4 -f mpegts cache\sample-4.ts

问题:虽然每个片段在 VLC 中播放正常,但生成的播放列表无法正确播放,并且视频在第一段之后停止。我尝试使用 VLC 3.0.18,也尝试使用 HLS.JS

问题:上面的 ffmpeg 命令(或 M3U8 文件)有什么问题?如何独立创建 HLS 片段?

任何帮助或提示都将不胜感激

文森特

相关内容