我使用ffmpeg按照《技术说明》TN2224中建议的比特率对我的样本视频进行编码,然后使用HLS工具对其进行分段并创建播放列表,最后创建变体plist文件"all.m3u8">
,我使用文本编辑器打开了"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,我想知道这个值是包括音频比特率还是排除音频。如何将关键帧插入片段?因为在文档中,它说:"每个片段必须至少包含一个关键帧,最好是更多。如果只包含一个,请将其放在片段的开头。"我不太明白如何做到这一点。
非常感谢您的帮助,我非常感谢您抽出时间。
Jason,要创建所有.m3u8,是否应该为其提供多个m3u8文件,每个文件对应不同的比特率?
我猜你运行了4次ffmpeg来创建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给你输出分段文件呢?它支持它。
感谢大家的关注和建议。我终于想通了。对于不同的比特率,带宽保持不变的原因是我的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
我把它放在这里是为了让其他和我有同样问题的人有参考
听起来您可能在variantplaylistcreator中发现了一个错误。我建议验证子流是否真的是你期望的比特率,如果它真的输入了错误的值,请向苹果报告。
这可能与使用多个iframe url有关。我不明白为什么有必要不止一次地指定它。如果子流具有不同的I帧位置,自适应流将不起作用——至少所有的段边界都必须对齐。
如果您需要以编程方式修复播放列表,我建议使用ffprobe(来自ffmpeg套件)来提取每个子流的比特率,并用提取的值替换带宽号。