Я использую следующую команду FFMpeg для преобразования потокового видео H.264 UDP с дрона Tello в другой адрес.
ffmpeg -i udp://0.0.0.0:11111 -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f h264 udp://127.0.0.1:5000
Затем я просто использую следующий OpenCv для чтения с этого нового адреса:
this.Capture = new OpenCvSharp.VideoCapture("udp://127.0.0.1:5000", OpenCvSharp.VideoCaptureAPIs.FFMPEG);
Из этой ссылки Capture я получаю следующий кадр, вызывая this.Capture.Read (mat). Когда я назначил конвертируемое изображение для пользовательского интерфейса, оно идеально подходит для пикселей!
Однако после первоначального рендеринга я не вижу немедленных обновлений. Но я вижу очень медленные обновления видео, которые очень искажены. Похоже, что каждый последовательный кадр - это просто разность / разница, нарисованная поверх предыдущего кадра.
Есть ли что-нибудь, что я могу настроить / изменить в моей команде FFMpeg, чтобы разрешить этот искаженный рендеринг видео ?
Обновление 1 Мне удалось добиться определенного прогресса. Видео обновляется, все еще с искажениями, но общее искажение немного меньше. И кадры обновляются быстрее.
Чтобы добраться до этой точки, я просто добавил этот параметр в свою команду FFMpeg:
-g 100
Я также попытался:
-g 300