0


我使用 ffmpeg 按照技术说明 TN2224 中推荐的比特率对我的示例视频进行编码,然后使用 HLS 工具对其进行分段并创建播放列表,最后创建变体 plist 文件“all.m3u8”
我使用验证工具来验证我的 HLS 内容,它最终显示除了 64k 音频只有带宽低,其他都保持在相同的带宽,我使用文本编辑器打开“all.m3u8”并看到所有其他比特率内容都使用相同的带宽。无论我如何更改 ffmpeg 命令中的参数,我仍然无法更正它们。以下命令是我用来对内容进行编码的命令:
ffmpeg -i input.m4v -acodec libfaac -vcodec libx264 -s 480x360 -b 350k -r 29.97 -vpre medium output.mp4

以下命令用于生成段和 plist:
mediafilesegmenter -b http://www.example.com/stream/ -I -f ~/Documents/sample/ output.mp4

以下命令用于生成 all.m3u8:
variantplaylistcreator -o all.m3u8 http://www.example.com/stream/110/prog_index.m3u8 ~/Documents/sample/110/prog_index.m3u8 -iframe-url http://www.freeyourteam.com/stream/110/iframe_index.m3u8 http://www.example.com/stream/200/prog_index.m3u8 ~/Documents/sample/200/prog_index.m3u8 -iframe-url http://www.freeyourteam.com/stream/200/iframe_index.m3u8 http://www.example.com/stream/350/prog_index.m3u8 ~/Documents/sample/350/prog_index.m3u8 -iframe-url http://www.freeyourteam.com/stream/350/iframe_index.m3u8 http://www.example.com/stream/550/prog_index.m3u8 ~/Documents/sample/550/prog_index.m3u8 -iframe-url http://www.freeyourteam.com/stream/550/iframe_index.m3u8 http://www.example.com/stream/64/prog_index.m3u8 ~/Documents/sample/64/prog_index.m3u8

在我的“all.m3u8”中,带宽都是 523894:

请允许我再问两个基本问题:
在技术说明中,推荐的比特率是 64 Kbps、110 Kbps、200 Kbps、350 Kbps、550 Kbps,我想知道这个值是包括音频比特率还是不包括音频。你如何插入关键帧来分割?因为在文档中它说:“每个片段必须包含至少一个关键帧,最好更多。如果只包含一个,请将其放在片段的开头。” 我不太明白你是怎么做到的。
非常感谢您的帮助,我非常感谢您的时间。

4

3 回答 3

1

感谢大家的关注和建议。我终于弄明白了。不同比特率带宽保持不变的原因是我的 ffmpeg 命令错过了几个设置。我最终使用了以下命令:
ffmpeg -i inputVideo.m4v -f mpegts -acodec libfaac -ar 44100 -ab 64k -vcodec libx264 -b 350k -s 480x360 -r 29.97 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 350k -bufsize 350k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 4:3 -g 30 -async 2 output.ts

我把它放在这里,以便与我有同样问题的其他人有参考。

于 2012-10-06T01:57:23.677 回答
1

Jason,要创建 all.m3u8,不应该给它多个 m3u8 文件,每个文件对应一个不同的比特率吗?

我猜你运行 ffmpeg 说 4 次来创建 4 个比特率文件。然后运行分段器 4 次以创建 4 组分段及其单独的 m3u8 文件。

最后,您必须告诉 variantplaylistcreator 每个比特率的各种 m3u8 文件的位置,以创建单个主 m3u8 文件。例如。

variantplaylistcreator -o mymedia_all.m3u8 http://mywebserver/mymedia_lo/prog_index.m3u8 mymedia_lo.plist http://mywebserver/mymedia_med/prog_index.m3u8 mymedia_med.plist http://mywebserver/mymedia_hi/prog_index.m3u8 mymedia_hi.plist 

我没有看到您单独提供各种文件。我希望你能得到这张照片。

编辑:回答您的其他问题:比特率包括音频。您需要做的是确保在编码中有固定的关键帧间隔。这将允许分段器定期分段文件。你不要在任何地方插入任何东西。

出于好奇,为什么不直接使用 ffmpeg 为您提供输出分段文件?它支持它。

于 2012-10-04T14:53:22.687 回答
0

听起来您可能已经发现了 variantplaylistcreator 中的错误。我建议验证子流确实是您期望的比特率,如果它确实输入了错误的值,请将其报告给苹果。

它可能与使用多个 -iframe-url 有关。我不明白为什么有必要多次指定它。如果子流具有不同的 I 帧位置,自适应流将不起作用——至少所有段边界必须对齐。

如果您需要以编程方式修复播放列表,我建议使用 ffprobe(来自 ffmpeg 套件)来提取每个子流的比特率,并将带宽数替换为提取的值。

于 2012-10-05T07:20:16.943 回答