我的m3u8带宽值有问题

时间:2012-10-04 12:30:50

标签: ios ffmpeg http-live-streaming


     我使用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,我想知道这个值是否包括音频比特率或排除音频。 如何将关键帧插入分段?因为在文档中它说:“每个段必须至少包含一个关键帧,最好是更多。如果只包含一个关键帧,请将其放在段的开头。”我不太明白你怎么做。
非常感谢你的帮助,我很感激你的时间。

3 个答案:

答案 0 :(得分:1)

杰森,   要创建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为您提供输出分段文件?它支持它。

答案 1 :(得分: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

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

答案 2 :(得分:0)

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

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

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