У меня была задержка ~5 sec
при воспроизведении потока RTSP с IP-камеры.После нескольких поисков (особенно этот вопрос ) я уменьшил задержку до ~1 sec
, используя следующую команду:
ffplay -fflags nobuffer -flags low_delay -framedrop -strict experimental \
-probesize 32 -sync ext rtsp://xxx.xxx.xxx.xxx
Но когда я попробовал команду mplayer -benchmark
из той же командывопрос, я обнаружил, что задержка сразу уходит (т.е. почти 0 задержка).
В справочной странице mplayer
он имеет вид:
-benchmark
Печатает некоторую статистику использования ЦП и пропущенных кадров в конце воспроизведения.Используйте в сочетании с -nosound и -vo null для бенчмаркинга только видеокодека.
ПРИМЕЧАНИЕ. С этой опцией MPlayer также будет игнорировать длительность кадра при воспроизведении только видео (вы можете думать об этомкак бесконечные fps).
Я чувствую, что это "игнорирование длительности кадра" является ключом к вопросу, но после нескольких поисков я не нашел никакого флага, связанного с этим в ffmpeg
,Мне интересно , как заставить игнорировать длительность входного кадра в ffmpeg
?
С другой стороны, причина, по которой я использую ffmpeg
, заключается в том, что мне нужно выполнить обработку изображенийиспользуя opencv
, в то время как я обнаружил, что при выполнении
cv.VideoCapture('rtsp://xxx.xxx.xxx.xxx')
кажется, что используется некоторая часть ffmpeg
под капотом. Решение, которое напрямую решает проблему в opencv
, было бы еще болееоценили.Я несколько раз пытался прочитать VideoCapture
в отдельном потоке, но это не помогло.
Некоторая информация о потоке RTSP : h264, 1920x1080, 15fps, 1 ключкадр за 4 с
Некоторые другие решения, которые я пробовал :
ffmpeg -r 99999 -i ...
# didn't work
mplayer ... -dumpstream
# it core dumped