我最初的任务是为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的应用程序
因此,假设您为每个不同的带宽编码了相同的视频: 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请注意带宽属性值。我怀疑这些值是由varinatplaylistcreator计算的。
我不知道它是怎么做到的。我猜不知何故,每次渲染都需要视频(片段)的平均比特率,并基于此来实现。
所以我的问题是:这些是如何计算出来的。或者,也许有人已经创建了一个可以在Windows上运行并创建各种播放列表的工具。
发布于 2012-06-21 15:37:51
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,你就会得到你需要的带宽标签的值。
发布于 2018-08-10 18:32:22
您可以使用Bento4。他们在文档中指定,我们可以使用这个,而不是苹果的variantplaylistcreator
https://stackoverflow.com/questions/11126432
复制相似问题