HLS varianplaylistcreator для Windows
Моя первоначальная задача состояла в том, чтобы найти сегментатор для 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 и создавать различные списки воспроизведения.
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.
Вы можете использовать Bento4. Они указали в документе, говоря, что мы можем использовать это вместо варианта playplaycreator от Apple