Я пишу свою первую программу с использованием библиотек 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
.Какая логика / алгоритм необходим для правильного наложения двух сетевых потоков.