How to fix opencv python cv2.VideoCapture rtsp onvif “nonmatching transport in server reply” error?

做~自己de王妃 提交于 2019-12-21 05:11:12

问题


I'm on windows using python 3.6.4, installed opencv (3.4) through pip. Here's the code I'm using:

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()

I'm getting the following error:

[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)

I can go to cmd and type "ffplay rtsp://192.168.15.116/onvif1" and the video will run as well as in VLC using the same rtsp address. Using cv2.VideoCapture(0) also works with my webcam.

Tried copying the file opencv_ffmpeg340.dll into all path folders, but still to no avail. Also checked build and all video I/O show up with YES, except gstreamer. I'm out of ideas.


回答1:


I installed OPENCV onto Windows 10 using Microsoft's VCPKG. After which, OPENCV worked fine - except it would not open videos files.

Without success, I tried many suggestions. Finally, what worked for me was very SIMPLE. I included opencv's BIN folder as a PATH in Windows Environment System Variables. That's it. Now, video files are opened and played just fine.




回答2:


I've just encountered this problem and after digging it looks like OPENCV 3.1+ defaults to TCP for the RTSP transport (my ESCAM QF600 only supports RTSP over UDP). You can prevent this from happening via setting the environment variable OPENCV_FFMPEG_CAPTURE_OPTIONS to something (e.g. dummy).

For completeness; see https://ffmpeg.org/ffmpeg-protocols.html for all options that can be set. Keys and values are separated with ';' and pairs are separated via '|'.

The offending code begins at line 809 in cap_ffmpeg_impl.hpp (https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp)

Props to the following posts for sending me in the right direction:

ffmpeg rtsp error: Nonmatching transport in server reply

Cant get RTSP stream - nonmatching



来源:https://stackoverflow.com/questions/48630885/how-to-fix-opencv-python-cv2-videocapture-rtsp-onvif-nonmatching-transport-in-s

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!