Ios 我的m3u8带宽值有问题

Ios 我的m3u8带宽值有问题,ios,ffmpeg,http-live-streaming,Ios,Ffmpeg,Http Live Streaming,我使用ffmpeg按照技术说明TN2224中推荐的比特率对示例视频进行编码,然后使用HLS工具对其进行分段并创建播放列表,最后创建变体plist文件“all.m3u8” 我使用验证工具来验证我的HLS内容,结果显示除了64k音频带宽较低外,其他的都保持在相同的带宽,我使用文本编辑器打开了“all.m3u8”,看到所有其他比特率内容都使用相同的带宽。无论我如何更改ffmpeg命令中的参数,我仍然无法更正它们。下面的命令是我用来编码内容的命令: ffmpeg-i input.m4v-acodec l


我使用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-bhttp://www.example.com/stream/ -I-f~/Documents/sample/output.mp4


以下命令用于生成all.m3u8:
variantplaylistcreator-o all.m3u8http://www.example.com/stream/110/prog_index.m3u8 ~/Documents/sample/110/prog_index.m3u8-iframe urlhttp://www.freeyourteam.com/stream/110/iframe_index.m3u8 http://www.example.com/stream/200/prog_index.m3u8 ~/Documents/sample/200/prog_index.m3u8-iframe urlhttp://www.freeyourteam.com/stream/200/iframe_index.m3u8 http://www.example.com/stream/350/prog_index.m3u8 ~/Documents/sample/350/prog_index.m3u8-iframe urlhttp://www.freeyourteam.com/stream/350/iframe_index.m3u8 http://www.example.com/stream/550/prog_index.m3u8 ~/Documents/sample/550/prog_index.m3u8-iframe urlhttp://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,我想知道这个值是包括音频比特率还是排除音频。 如何将关键帧插入到分段?因为文档中说:“每个片段必须至少包含一个关键帧,最好是更多。如果只包含一个关键帧,请将其放在片段的开头。”我不太明白如何做到这一点。
非常感谢您的帮助,我非常感谢您抽出时间。

杰森, 要创建all.m3u8,是否应为其提供多个m3u8文件,每个文件对应不同的比特率

我猜您运行ffmpeg(例如4次)来创建4个比特率文件。然后运行分段器4次,以创建4组分段及其单个m3u8文件

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

我看不到您单独提供各种文件。我希望你明白了

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


出于好奇,为什么不直接使用ffmpeg来输出分段文件呢?它支持它

听起来您可能在variantplaylistcreator中发现了一个bug。我建议验证子流是否真的是您期望的比特率,如果真的输入了错误的值,则向apple报告

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


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

感谢大家的关注和建议。我终于明白了。对于不同的比特率,带宽保持不变的原因是我的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+part4x4+partp8x8-subq 5-grills 1-refs 1-coder 0-me范围16-keyint\min 25-sc\u阈值40-I\u qfactor 0.71-bt 200k-maxk-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输出。ts



我把它放在这里是为了让其他和我有同样问题的人有一个参考。

给出你所有的实际命令,而不仅仅是一些抽象版本的命令。谁在创建all.m3u8?@av501谢谢。我将编辑我的问题。谢谢你的评论。是的,我就是这么做的。我没有列出它们,因为它们除了比特率之外都一样。@Jason,您的variantplaylistcreator命令只有一个m3u8,不是吗?是否应该为其提供4个m3u8文件?我看到什么错误了吗?在这种情况下,我建议您只需手动编辑all.m3u8。这很简单。我还编辑了你提出的其他一些问题的答案。我不明白的是-iframe url在做什么?-iframe url用于标识用于快进/快退的iframe索引文件。我认为在我的情况下,手动编辑文件不是正确的选择。我可能有50多个视频要转换,我只是用python编写一个脚本来处理所有的工作。因此,我必须找出ffmpeg的正确设置以获得最佳结果。请参阅我的答案,我发现这是我的ffmpeg命令的问题。iframe-url对于不同的比特率是不同的
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