FFMPEG: Как вывести формат image2 в сокет tcp/udp?

У меня есть ffmpeg для чтения некоторого потока RTSP и вывода формата image2 в стандартный вывод следующим образом:

ffmpeg -rtsp_transport tcp -i  "rtsp:xxxxx" -f image2 -update 1 -

Но stdout для меня недостаточно хорош. Я пытаюсь передать его, чтобы «подтолкнуть» к какому-то другому процессу, который я не могу «направить» в ffmpeg из-за некоторых архитектурных ограничений. Я работаю в Linux, поэтому я надеялся смоделировать какой-нибудь сокет tcp/udp через файловую систему, например. /dev/что-то подобное. В качестве альтернативы, возможно, можно заставить ffmpeg отправлять изображение напрямую на заданный адрес tcp/udp? Однако это не сработало (ffmpeg ожидает вывод файла):

ffmpeg -rtsp_transport tcp -i  "rtsp:xxxxx" -f image2 -update 1 "udp://localhost:3333"

Любые идеи? Спасибо


person Sagi Mann    schedule 05.08.2019    source источник


Ответы (1)


Обычный мультиплексор image2 ожидает записи в один или несколько файлов изображений. Используйте мультиплексор image2pipe.

ffmpeg -rtsp_transport tcp -i  "rtsp:xxxxx" -f image2pipe "udp://localhost:3333"

(-update не имеет отношения к конвейеру).

person Gyan    schedule 05.08.2019
comment
Данные, которые я получаю через порт udp, отличаются от тех, которые я получаю при чтении stdout. Декодер jpeg продолжает сбой на каждом кадре. Ошибка: SOI не найден. Размеры пакетов udp также кажутся намного меньше, чем когда я выхожу на стандартный вывод... - person Sagi Mann; 05.08.2019
comment
У меня это работает локально как клиентская команда: ffplay -i ip:port. Если это работает, то это проблема с вашим ресивером. Пакеты UDP будут иметь размер 188 байт. Я полагаю, что для стандартного вывода ffmpeg будет записывать 64 КБ за раз. Проверьте наличие потери пакетов и переупорядочите их на приемнике. Вы также можете рассмотреть возможность использования mkfifo и записи в него, а также использования netcat для отправки этого файла вашему клиенту. - person Gyan; 05.08.2019
comment
спасибо, действительно проблема была в приемнике, мне нужно было собрать несколько пакетов и поискать магические маркеры для построения фреймов (ссылка: модуль rtsp-ffmpeg npm) - person Sagi Mann; 06.08.2019