适用于Windows的HLS varianplaylistcreator

时间:2012-06-20 19:04:42

标签: http-live-streaming m3u mediastreamsegmenter

我的首要任务是找到一个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文件。这不是问题,除非您需要创建我需要的变体播放列表文件。 所以现在我需要找到或编写一个模仿varianplaylistcreator

的Windows应用程序

因此,假设您为每个不同的带宽编码了相同的视频: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计算的值。

我不知道它是怎么做到的。我想某种程度上它需要每个rendtion的视频(片段)的平均比特率,并基于这样做。

所以我的问题是:如何计算这些。 或者也许有人已经创建了一个可以在Windows上运行并创建可变播放列表的工具。

2 个答案:

答案 0 :(得分:2)

FFmpeg可以报告ts流的比特率。使用ffprobe工具,您将获得如下输出:

Input #0, mpegts, from 'foo.ts':
  Duration: 00:04:50.87, start: 2.000011, bitrate: 10381 kb/s
  Program 1
    Stream #0.0[0x810]: Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc

比特率以千比特/秒为单位,因此乘以1024,您将获得BANDWIDTH标记所需的值。

答案 1 :(得分:0)

您可以使用Bento4。他们在文件中指定说我们可以使用它代替Apple的variantplaylistcreator