Я использую sergey-dryabzhinsky / nginx -rtmp-module для сборки RTMP-сервера с nginx. Я передаю видео с помощью FFmpeg в nginx RTMP-приложение:
ffmpeg -re -i .\video_glasses.mp4 -f flv rtmp://[domain]/input/cam_1
и хочу обработать его с помощью Python, поэтому я открываю поток, запускающий процесс FFmpeg из Python, например так :
ffmpeg -i rtmp://nginx/input/cam_1 -map 0:v -f rawvideo -pix_fmt rgb24 -vsync 0 pipe:
Здесь я использую vsyn c 0, чтобы избежать дублирования кадров. Я запускаю программу Python, и она ждет потока. Как только поток начался, программа настраивает некоторое количество, а затем начинает обрабатывать видео. Конечно, проходит некоторое время. Программа корректно обрабатывает около 250 кадров видео (около 4 сек c @ 30 кадров в секунду) и затем блокирует чтение из входных блоков FFmpeg. В то же время процесс потоковой передачи на входе завершил потоковую передачу примерно 24se c видео.
Мое лучшее предположение состоит в том, что максимальный буфер nginx RTMP заполнен, поэтому все останавливается. По умолчанию buflen для nginx составляет 20 с. Я пытался увеличить его:
#Sets default buffer length. Usually client sends RTMP set_buflen command before playing and resets this
#setting. Default is 1000 ms.
buflen 50000s;
, но ничего не меняется. Поэтому я думаю, что процесс чтения FFmpeg сбрасывает buflen. Я попытался
ffmpeg -bufsize 50M -i rtmp://nginx/input/cam_1 -map 0:v -f rawvideo -pix_fmt rgb24 -vsync 0 pipe:
, но ничего подобного не происходит, и сценарий Python никогда не запускается.
Любые подсказки? Спасибо !!