Как исправить 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 во все папки пути, но безуспешно. Также проверена сборка, и все видео ввод / вывод отображаются с ДА, кроме gstreamer. У меня нет идей.


person Projetos Prince Tower    schedule 05.02.2018    source источник
comment
какой прогресс по этому вопросу? Я столкнулся с той же проблемой.   -  person nttrung143    schedule 23.02.2018
comment
@ nttrung143, возможно, это может помочь   -  person eusoubrasileiro    schedule 19.02.2021


Ответы (2)


Я установил OPENCV в Windows 10 с помощью Microsoft VCPKG. После этого OPENCV работал нормально - за исключением того, что он не открывал файлы видео.

Безуспешно пробовал много предложений. Наконец, то, что сработало для меня, было очень ПРОСТО. Я включил папку BIN opencv как ПУТЬ в системные переменные среды Windows. Вот и все. Теперь видео файлы открываются и воспроизводятся нормально.

person Lawes    schedule 08.03.2018
comment
Когда вы говорите, что видеофайлы включают (или лучше, если исключительно) видео onvif rtsp? - person Projetos Prince Tower; 09.03.2018
comment
@ProjetosPrinceTower - Спасибо, что обратились ко мне по этому поводу. Я должен был быть более конкретным. Мои тесты прошли успешно с MP4, AVI и RSTP. Я тестировал RSTP-видео, используя следующий URL-адрес, и он отлично транслировался. capVideo.open (rtsp: //184.72.239.149/vod/mp4: BigBuckBunny_175k.mov); - person Lawes; 13.03.2018
comment
Я вижу, к сожалению, я также могу запустить протокол rtsp с указанным таким образом видеофайлом. Моя проблема связана именно с моей веб-камерой onvif. Но все равно спасибо, уверен, кому-то это будет полезно. - person Projetos Prince Tower; 15.03.2018

Я только что столкнулся с этой проблемой, и после копания похоже, что 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: несоответствующий транспорт в ответе сервера

Невозможно получить поток RTSP - несовпадение

person Ben Thomas    schedule 11.03.2018
comment
Не могли бы вы дать мне несколько советов о том, как установить эту переменную среды? Это в коде, параметре при запуске программы, операционной системе? - person Projetos Prince Tower; 15.03.2018
comment
Привет, я просто экспериментировал с node + opencv в Windows, поэтому мне просто нужно было сделать set OPENCV_FFMPEG_CAPTURE_OPTIONS=dummy в командной строке перед запуском моего приложения node, чтобы оно работало. Если вы запускаете серверное приложение / службу на python, вы можете изучить os.environ в модуле python os, чтобы установить его в своей программе, если это проблема в вашей ОС. - person Ben Thomas; 16.03.2018
comment
Мне было интересно, можно ли этого достичь в скрипте python перед вызовом cv.VideoCapture - person Vikram Dattu; 18.04.2018