Как исправить ошибку opencv python cv2.VideoCapture rtsp onvif "несоответствующий транспорт в ответе сервера"?
Я на Windows, используя Python 3.6.4, установил opencv (3.4) через pip. Вот код, который я использую:
import numpy as np
import cv2
cap = cv2.VideoCapture('rtsp://192.168.15.116:554/onvif1')
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Я получаю следующую ошибку:
[rtsp @ 03858a40] Nonmatching transport in server reply
warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:808)
warning: rtsp://192.168.15.116:554/onvif1 (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:809)
Я могу перейти к cmd и набрать "ffplay rtsp://192.168.15.116/onvif1", и видео будет работать так же, как и в VLC, используя тот же адрес rtsp. Использование cv2.VideoCapture(0) также работает с моей веб-камерой.
Пробовал копировать файл opencv_ffmpeg340.dll во все папки пути, но все равно безрезультатно. Также проверил сборку и все видео ввода / вывода отображаются с YES, кроме gstreamer. У меня нет идей.
2 ответа
Я установил OPENCV на Windows 10, используя VCPKG от Microsoft. После этого OPENCV работал нормально - за исключением того, что он не будет открывать файлы видео.
Без успеха я перепробовал много предложений. Наконец, то, что работало для меня, было очень ПРОСТО. Я включил папку BIN opencv в качестве PATH в системные переменные среды Windows. Вот и все. Теперь видео файлы открываются и воспроизводятся просто отлично.
Я только что столкнулся с этой проблемой, и после копания он выглядит как OPENCV 3.1+ по умолчанию TCP для транспорта RTSP (мой ESCAM QF600 поддерживает только RTSP через UDP). Вы можете предотвратить это, установив переменную окружения OPENCV_FFMPEG_CAPTURE_OPTIONS в что-то (например, фиктивное).
Для полноты картины; см. https://ffmpeg.org/ffmpeg-protocols.html для всех параметров, которые могут быть установлены. Ключи и значения разделяются знаком ";" и пары разделяются через '|'.
Оскорбительный код начинается со строки 809 в cap_ffmpeg_impl.hpp ( https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp).
Реквизиты для следующих сообщений для отправки мне в нужном направлении:
ffmpeg rtsp error: несоответствующий транспорт в ответе сервера