Можно ли объединить прямой поток m3u8 с наложением PIP из источника WebRTC?

Может кто-нибудь сказать мне, какую серверную технологию (возможно, ffmpeg) можно использовать для:

1) отображать это видео в прямом эфире в полноэкранном режиме:

http://aolhdshls-lh.akamaihd.net/i/gould_1@134793/master.m3u8

2) и наложить его в правом нижнем углу на живое видео из потока видео-чата webRTC?

3) и отправить этот комбинированный поток в новый прямой поток m3u8.

4) Обратите внимание, что это должно быть решение на стороне сервера - - - в этом случае нельзя запускать несколько видеоплееров (необходимо передать результирующий поток на SmartTV, у которых одновременно есть только один видеодекодер)

Самый близкий пример, который я нашел до сих пор, - это статья:

https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos

Который на самом деле не работает, и на самом деле он не делает наложения.

Любые советы высоко ценится.


person user1258530    schedule 25.10.2015    source источник


Ответы (1)


Позвольте мне прояснить, что вы хотите в этом случае:

  1. Входное видео передается по протоколу HLS из webRTC. Как насчет задержки? действительно важно в вашей работе?

  2. Наложение изображения на видео: для этого потребуется декодирование входного видео, его фильтрация и повторное кодирование. поэтому ему нужно много ресурсов процессора и даже больше, если входное видео 1080p.

  3. Реструктурируйте новый формат HLS: вы должны указать много опций кодирования, чтобы убедиться, что фрагмент ts работает хорошо. наиболее важным является размер GOP и продолжительность ts.

  4. Вам нужен веб-сервер для предоставления индексного файла m3u8. можно использовать nginx, apache.

Что я говорю вам сейчас в этом ответе, так это командную строку ffmpeg, которая делает наложение из входной потоковой передачи HLS и переделывает сегменты ts.

Следующая командная строка сделает то, что вы хотите, на шагах 1 и 3:

ffmpeg \
-re -i "http://aolhdshls-lh.akamaihd.net/i/gould_1@134793/master.m3u8" \
-i "[OVERLAY_IMAGE].png" \
-filter_complex "[0:v][1:v]overlay=main_w:main_h[output]" \
-map [output] -0:a -c:v libx264 -c:a aac -strict -2 \
-f ssegment -segment_list out.list out%03d.ts

Это базовая командная строка, которая накладывает изображение из вашей входной потоковой передачи HLS, а затем создает сегмент ts и индексный файл.

У меня нет дальнейшего опыта работы с HLS, поэтому это можно сделать без каких-либо настроек, но, возможно, вам следует настроить его для своей работы. а также вы должны немного поискать веб-сервер для предоставления m3u8, но это не будет сложно.

Размер GOP (-g) и его продолжительность (segment_tim), как я уже сказал, будут ключевым моментом вашей настройки.

person Gigone Lee    schedule 25.10.2015
comment
Спасибо за ваши комментарии. На самом деле я не собираюсь накладывать изображение поверх видео HLS. Я хочу наложить небольшое видео на основе webRTC в правом нижнем углу поверх видео HLS. Таким образом, цель состоит в том, чтобы позволить людям общаться в видеочате вместе с видео, которое воспроизводится вживую в сообществе. - person user1258530; 26.10.2015
comment
вы можете использовать ту же командную строку для наложения видео, на самом деле это не имеет значения. но если вы хотите наложить прозрачное видео на основное видео, ваше наложенное видео должно поддерживать альфа-канал. - person Gigone Lee; 26.10.2015
comment
И последняя часть, которая до сих пор остается без ответа — как взять приведенный выше образец конфигурации ffmpeg и направить его на http-сервер для потоковой передачи? Здесь есть несколько вариантов: trac.ffmpeg.org/wiki/StreamingGuide, но ничего, что упоминает потоковую передачу в виде файла m3u8 в прямом эфире. - person user1258530; 28.10.2015