FFmpeg set_buflen во время воспроизведения потока RTMP - PullRequest
0 голосов
/ 10 апреля 2020

Я использую 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 никогда не запускается.

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

...