首先确保你的输入文件是OK的,因为GIGO(garbage in,garbage out)。
HLS 可以使用自适应流媒体,因此请检查您的 m3u8 是否是变体播放列表。例如:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8
这是必要的,因为流可能会根据您的网络状况切换到不同的质量。如果可用带宽足够低,它可以选择仅音频流(如果可用)。
如果是这种情况,请选择具有您可以获取的最大比特率的子播放列表,并将其直接用作ts 片段的来源。
关于转码部分,我建议您使用ffmpeg 尝试相同的命令。获取最新的git 版本。您可以自己编译(推荐)或获取包/静态构建。
如果复制编码仍然不起作用,您可以尝试重新编码文件(例如:-c:v x264 -c:a libfdk_aac)。
对于WebM,您可以这样做:
ffmpeg -i input.ts -c:v libvpx -c:a libvorbis output.webm
对于VP8/Vorbis 或:
ffmpeg -i input.ts -c:v libvpx-vp9 -c:a opus output.webm
对于VP9/Opus
这是最基本的例子,你应该设置编码参数而不是使用默认值。检查documentation。
https://trac.ffmpeg.org/wiki/Encode/VP8
https://trac.ffmpeg.org/wiki/Encode/VP9
https://trac.ffmpeg.org/wiki/Encode/H.264