2012-06-20 2 views
1

Моя первоначальная задача состояла в том, чтобы найти сегмент для Windows, который разбивает файл h264 \ aac без изменения его кодеков и делает его воспроизводимым через HLS.HLS varianplaylistcreator для Windows

Лучший способ, который работал для меня, чтобы использовать 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 и создавать переменные плейлисты.

+1

Атрибут BANDWIDTH не средняя пропускная способность, но на самом деле максимальная пропускная способность. – vipw

+1

Еще одна вещь, о которой вам нужно беспокоиться, - это то, что каждое воспроизведение сегментируется точно в тех же позициях. Как правило, это означает, что вам понадобится фиксированная «GOP» (группа изображений - как часто происходит I-кадр). – vipw

+0

@vipw ... можете ли вы объяснить это более подробно? спасибо – Agzam

ответ

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 тега.

+0

Это не соответствует значение, которое предоставляет varianplaylistcreator. Я пробовал все, пытался получить значения с MediaInfo и ffprobe, пытался разделить размер файла по длительности и умножить на 8 - все еще цифры не соответствуют ... WTH? – Agzam

+1

@ Agzam Precision не требуется. Если вы в пределах 10%, я бы не потел. Требование состоит в том, чтобы заявленная полоса пропускания была не ниже фактической полосы пропускания. Но вернемся сюда в реальном мире, просто позвольте клиенту угадать, какой поток будет лучше всего для его сетевого подключения, и соответствующим образом адаптироваться. – vipw

+1

@Agzam Когда дело доходит до битрейта, а не от времени, вы умножаетесь на 1000 вместо 1024. 1 кбит/с == 1000 бит/с, а 1 Кбит/с - 1024 бит/с. – NSProgrammer

-1

Для того, чтобы вариант списка воспроизведения для ЗОЖ вы Cab сделать это в любом из следующим образом с помощью FFmpeg

1) для содержания VOD «FFmpeg -i in.nut out.m3u8» .... а. расширение m3u8 на выходе будет создает вариант списка воспроизведения фил

2) Вот еще один пример сегмента входного файла, и создать живой плейлист m3u8 (можно использовать в качестве живого источника HLS):

FFmpeg - re -i in.mkv -codec copy -map 0 -f segment -segment_lis t playlist.m3u8 \ -segment_list_flags + live -segment_time 10 out% 03d.мкВ

пожалуйста следующей ссылкой ffmpeg documentation site