1

我最初的任务是为 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 上运行并创建变体播放列表的工具。

4

2 回答 2

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 标签所需的值。

于 2012-06-21T07:37:51.487 回答
0

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

于 2018-08-10T10:32:21.577 回答