如何修复opencv python cv2.VideoCapture rtsp onvif“服务器回复中的非匹配传输”错误?

时间:2018-02-05 20:23:38

标签: python opencv ffmpeg rtsp onvif

我在Windows上使用python 3.6.4,通过pip安装opencv(3.4)。这是我正在使用的代码:

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”,视频将使用相同的rtsp地址和VLC一起运行。使用cv2.VideoCapture(0)也适用于我的网络摄像头。

尝试将文件opencv_ffmpeg340.dll复制到所有路径文件夹中,但仍无济于事。还检查了构建和所有视频I / O显示为YES,除了gstreamer。我没有想法。

2 个答案:

答案 0 :(得分:1)

我使用微软的VCPKG将OPENCV安装到Windows 10上。之后,OPENCV工作正常 - 除了它不会打开视频文件。

没有成功,我尝试了很多建议。最后,对我有用的东西非常简单。我在Windows环境系统变量中将opencv的BIN文件夹作为PATH包含在内。而已。现在,视频文件打开并播放得很好。

答案 1 :(得分:0)

我刚刚遇到这个问题,在挖掘之后看起来OPENCV 3.1+默认为TCP用于RTSP传输(我的ESCAM QF600仅支持RTSP over UDP)。您可以通过将环境变量OPENCV_FFMPEG_CAPTURE_OPTIONS设置为某些内容(例如虚拟)来防止这种情况发生。

为了完整;有关可以设置的所有选项,请参阅https://ffmpeg.org/ffmpeg-protocols.html。键和值由';'分隔。和对通过' |'。

分开

违规代码从cap_ffmpeg_impl.hpp的第809行开始 (https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_ffmpeg_impl.hpp

支持以下帖子向我发送正确的方向:

ffmpeg rtsp error: Nonmatching transport in server reply

Cant get RTSP stream - nonmatching