Преобразование m3u8 (HLS) в mpd (MPEG-DASH)

У меня есть прямая трансляция HLS [https: //82-80-192-30.vidnt.com/ipbc_IPBCchannel11LVMRepeat/definst /IPBCchannel11LVM_3.stream/playlist.m3u8], и я хочу преобразовать его в MPEG-DASH.

Какая лучшая практика?

Поток уже h264 aac, поэтому я понимаю, что мне не нужно перекодировать, и мне просто нужно преобразовать.

Что мне использовать? ffmpeg? mp4box?

Примечания:

  1. Я использовал модуль nginx-rtmp (https://github.com/ut0mt8/nginx-rtmp-module/) для создания DASH из потока RTMP согласно этому руководству: https://isrv.pw/html5-live-streaming-with-mpeg-dash Но модуль nginx-rtmp может получать в качестве входных данных только потоки rtmp, и у меня это не сработало с потоком HLS.

  2. Я использовал ffmpeg для создания тире из m3u8 следующим образом:

    ffmpeg -i https://82-80-192-30.vidnt.com/ipbc_IPBCchannel11LVMRepeat/_definst_/IPBCchannel11LVM_3.stream/playlist.m3u8 -strict -2 -min_seg_duration 2000 -window_size 5 -extra_window_size 5 -use_template 1 -use_timeline 1 -f dash out.mpd

Но это очень ограничено. Я не могу контролировать продолжительность сегмента. Параметр min_seg_duration ffmpeg у меня не очень хорошо работает, а также он может установить минимальную продолжительность, в то время как я хочу ограничить максимальную продолжительность каждого сегмента (сегмент выходит с ~ 10 секундами, в то время как мне нужно, чтобы это было ~ 2 -4 секунды как играю вживую).


person Almog    schedule 12.04.2018    source источник


Ответы (1)


Во-первых, стоит сказать, что если вы сможете этого избежать, вы сэкономите себе много работы!

Большинство устройств и клиентов в наши дни могут воспроизводить потоки как HLS, так и DASH, поэтому обычный подход заключается в добавлении любых дополнительных функций, необходимых в вашем приложении или клиенте.

Если вам действительно нужно преобразовать серверную часть, то стоит знать, что, хотя потоки HLS обычно использовали сегменты TS в прошлом, недавно поддержка фрагментированного MP4 стала доступна в экосистеме HLS.

Если у вас есть видеопотоки TS, вам нужно будет выполнить преобразование в соответствии со строками, указанными выше, с помощью ffmpeg.

Если у вас есть фрагментированный MP4, тогда у вас уже должен быть правильный формат, и вы можете обнаружить, что вам просто нужно создать файл манифеста, чтобы DASH мог получить доступ к фрагментированным потокам mp4.

Все вышеперечисленное предполагает, что ваш контент не зашифрован или вам не нужно поддерживать шифрование - в этом случае вы не сможете конвертировать мультимедиа, или вам, возможно, придется также зашифровать мультимедиа для одних потоков иначе, чем для других. , поскольку в настоящее время большинство развернутых устройств и браузеров Windows и Chrome используют несколько иной подход к шифрованию (другой режим AES), чем устройства Apple.

person Mick    schedule 24.04.2018
comment
Я считаю, что лучше ничего не делать и оставить это как HLS, но мы должны загружать носители в нашу систему в формате DASH. Я немного смущен, когда я вставлял HLS в DASH с помощью упомянутой выше команды ffmpeg, я думал, что HLS - это TS, а не фрагментированный MP4 (как я могу узнать это наверняка?) Итак, если это правда, как ffmpeg преобразовал HLS (TS) в DASH (фрагментированный MP4)? DASH не поддерживает TS? Кроме того, я упомянул о большом недостатке использования ffmpeg, который я не знаю, как преодолеть: вывод ffmpeg действительно DASH, но продолжительность сегмента составляет ~ 10 секунд. Как я могу контролировать это с помощью ffmpeg? - person Almog; 26.04.2018