FFmpeg CLI - замена источника RTMP с использованием ZMQ (zmqsend) - PullRequest
0 голосов
/ 20 апреля 2020

Моя настройка следующая:

  • Nginx с модулем RTMP
  • Несколько пар потоков RTMP, каждая с первичной и резервной конечной точкой RTMP (таким образом, потоковая передача в rtmp : // localhost / main / $ STREAM_NAME и rtmp: // localhost / backup / $ STREAM_NAME)
  • Используя Nginx RTMP module exec_publish и exec_publish_done перехватчики, я пу sh либо main, либо резервное копирование в FFmpeg CLI pro c, который пересылает его на удаленную конечную точку RTMP (в данном случае на Wowza-сервер, хотя это не очень важно для моего вопроса)

Моя проблема в том, что в настоящее время, если основной поток остановлен, мне нужно остановить процесс CLI FFmpeg, который переходит на Wowza, и запустить другой с новым источником ввода (поток резервного копирования). Это часто вызывает проблемы на стороне Wowza, поэтому я ищу способ избежать этого.

После некоторых исследований я обнаружил, что FFmpeg инкапсулировал поддержку ZMQ, но, похоже, документация очень скудная. Можно ли отправить сообщение запущенному процессу FFmpeg, чтобы предупредить его, что он должен изменить свой источник на другой поток RTMP?

Большое спасибо,

1 Ответ

0 голосов
/ 30 апреля 2020

В случае, если это кому-нибудь интересно, я решил свою проблему другим способом. Теперь я использую именованные каналы, например, так:

PIPE_FILE= /path/to/pip/file
mkfifo $PIPE_FILE
exec 7<>$PIPE_FILE
ffmpeg -nostdin  -i /path/to/source -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts pipe:1 > $PIPE_FILE

/path/to/source может быть медиа-файлом на FS или потоком RTMP, если на то пошло.

Затем я перенаправляю из канал до конечной конечной точки RTMP:

ffmpeg -re -i $PIPE_FILE -c:v libx264 -preset veryfast -r 25 -g 50 -f flv $RTMP_ENDPOINT

Когда $PIPE_FILE прекращает прием данных (то есть - когда прекращается потоковая передача или, в случае отправки данных из локального мультимедийного файла, когда достигается EOF), Я немедленно запускаю другой CLI-файл FFmpeg pro c и передаю данные канала из резервного файла / потока мультимедиа.

Это обеспечивает непрерывную работу и непрерывную работу FFmpeg CLI pro c.

...