Я работаю над Gazebo Sim, который использует плагин Gstreamer для потоковой передачи видео с камеры через UDP. Симуляция запущена в Ubuntu 18.04.
Существуют некоторые ресурсы для понимания бэкенда этой структуры. Руководство по Gazebo Simulation PX4
И они упоминают, как создать конвейер:
Видео из Gazebo должно отображаться в QGroundControl так же, как с реальной камеры.
Видео также можно просматривать с помощью конвейера Gstreamer. Просто введите следующую команду терминала:
gst-launch-1.0 -v udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false
И она хорошо работает на терминале. Я прочитал эти вопросы:
использование gstreamer с python opencv для захвата живого потока?
Запись в конвейер Gstreamer из opencv в python
Итак, я попытался внедрить этот конвейер в opencv, используя следующие строки:
video = cv2.VideoCapture('udpsrc port=5600 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false', cv2.CAP_GSTREAMER)
#video.set(cv2.CAP_PROP_BUFFERSIZE,3)
# Exit if video not opened.
if not video.isOpened():
print("Could not open video")
sys.exit()
# Read first frame.
ok, frame = video.read()
if not ok:
print('Cannot read video file')
sys.exit()
Но выдает только ошибку:
Не удалось открыть видео
И я пробовал разные варианты этого конвейера в opencv, но ни один из них мне не помог.