我最初的任务是为 Windows 找到一个分段器,它可以在不更改其编解码器的情况下拆分 h264\aac 视频文件并使其可通过 HLS 播放。
对我有用的最好方法是像这样使用 ffmpeg:
ffmpeg -i encoded.mp4 -c copy -map 0 -vbsf h264_mp4toannexb -flags -global_header -f segment -segment_time 10 -segment_format mpegts stream%d.ts
现在,这或多或少正确地拆分了文件,尽管mediastreamvalidator
引发了一些警告,但我仍然能够播放视频。
但是,棘手的部分是:ffmpeg 无法为您创建 .m3u8 文件。这不是问题,除非您需要创建我需要的变体播放列表文件。所以现在我需要找到或编写一个模仿 Windows 的应用程序varianplaylistcreator
因此,假设您为每个不同的带宽编码了相同的视频:64、150、300、500、800、1200 和 2400。现在,在分割每个视频之后,您可能希望将这些片段放入单独的文件夹中,包括播放列表文件对于每个演绎。
现在我们可以创建一个变体播放列表文件,在其中列出所有再现,并说明哪些带宽服务器应该自动切换为不同的再现提供服务。
通常变体播放列表如下所示:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=512376
500/500k_512x384_x264_372_quicktime_128.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=68795
64/64k_256x192_x264_32_quicktime_32.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=155580
150/150k_256x192_x264_118_quicktime_32.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=308895
300/300k_512x384_x264_172_quicktime_128.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=811310
800/800k_512x384_x264_672_quicktime_128.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1210182
1200/1200k_1024x768_x264_1072_quicktime_128.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2408106
2400/2400k_1024x768_x264_2272_quicktime_128.m3u8
注意 BANDWITH 属性值。我怀疑这些是由varinatplaylistcreator
.
我不知道它是怎么做到的。我想以某种方式它需要每个再现的视频(片段)的平均比特率,并以此为基础。
所以我的问题是:这些是如何计算的。或者,也许有人已经创建了一个可以在 Windows 上运行并创建变体播放列表的工具。