Наложение видео на несколько сетевых входов с использованием ffmpeg - PullRequest
0 голосов
/ 24 апреля 2018

Я пишу свою первую программу с использованием библиотек FFMPEG, к сожалению, она не простая.

Мне нужно:

  • захватить несколько сетевых входов (udp).
  • демультиплексируют входы.
  • перекрывают видеопотоки.
  • микшируют аудио (или некоторую другую логику).
  • кодируют результирующие потоки.
  • Смешение потоков и запись результатов в файл.

Пока я играю с инструментом ffmpeg.exe, пытающимся реализовать эту функцию.У меня есть команда, которая выглядит следующим образом:

.\ffmpeg.exe -threads auto -y -i input0 -i input1 \
    -filter_complex "[0:v]scale=1920x1080[v0];[1:v]scale=480x270[v1];[v0][v1]overlay=1440:810[v2]" \
    -map [v2] -map 0:a -c:v libx264 -preset ultrafast -c:a copy output.mp4

Когда input0 и input1 являются файлами, результирующий вывод корректен, с другой стороны, когда входные данные являются потоками udp, результирующий вывод некорректенвидео останавливается большую часть времени.

Входные данные файла генерируются из потоков udp с помощью следующей команды:

.\ffmpeg.exe -threads auto -y -i "udp://@ip:port" -c copy -f mpegts input1.mpg

Question 1.Почему приведенная выше команда не выдает хороший вывод для потоков udp?В чем различия между исходным потоком и дампом этого потока для ffmpeg.exe.

Question 2.Есть ли какой-либо аргумент, который может исправить команду?

Question 3.Какая логика / алгоритм необходим для правильного наложения двух сетевых потоков.

1 Ответ

0 голосов
/ 01 июня 2018

Вероятно, ffmpeg отбрасывает некоторые данные, потому что у вас недостаточно буфера.

Я думаю, вам нужно поставить эти два флага (применяя их к входным данным) для достижения вашей цели:

-thread_queue_size 512 -rtbufsize 50M

IE (используя введенную вами команду):

    .\ffmpeg.exe -threads auto -y -i input0 -i input1 \
    -thread_queue_size 512 -rtbufsize 50M \
    -filter_complex "[0:v]scale=1920x1080[v0];[1:v]scale=480x270[v1];[v0][v1]overlay=1440:810[v2]" \
    -map [v2] -map 0:a -c:v libx264 -preset ultrafast -c:a copy output.mp4

Это сработало для меня.

...