首页 > 解决方案 > rtsp cv2.VideoCapture onvif camera Nonmatching transport and -215:Assertion failed size and width > 0

问题描述

在尝试通过网络从我的 ip 摄像头获取帧时,我是否遗漏了一些东西。当 cv2.VideoCapture rtsp onvif 相机时,解决方案在“服务器回复中的传输不匹配”不起作用,如何解决?对我不起作用。

我正在做的事情中缺少什么吗?背景资料:

示意图:IP Camera -> RJ45 插入无线路由器(192.168.1.1) -> air -> PC 的无线适配器(192.168.1.100) -> python 计算机程序试图解码程序。再次注意:我可以使用其他应用程序,但不能使用 opencv。

我的 IPCamera 工作的地方:

我的相机确实与其他应用程序进行通信,例如 VLC 播放器来自 IPCamera 的视频流可以通过 VLC 播放器(3.0.11 Vetinari)和使用 FFMPEG 甚至我的 android v5 的 Media Player Classic(1.9.8.21)播放 rstp 流。 1.1 智能手机。所以从其他应用程序接收来自 IP 摄像机的 rstp 流没有问题。

请注意,python 中的 VLC 可以在以下代码中使用:

import vlc
player = vlc.MediaPlayer('rtsp://user:pword@192.168.1.183:554/onvif1')
player.play()
player.stop()

注意:用户和密码位于相机底部。

但我想使用 opencv 从“帧”中提取字节。

复制问题的代码:

import numpy as np
import cv2, os

#It does not matter which of the following os.environ assignments worked
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;udp"
#os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;0"
#os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;tcp"
#os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "dummy"

# The url3 has been successfully used in VLC player and Media Player Classic Home. 
# BUT here the program stops 
url3 = "rtsp://user:pwrd@192.168.1.183:554/onvif1"

#cap = cv2.VideoCapture(url3)
cap = cv2.VideoCapture(url3,cv2.CAP_FFMPEG)
while(True):
    ret, frame = cap.read()
    #print(frame)
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

当您在 IDLE 和 DOS/cmd 行中运行时有两种错误消息在 IDLE 程序中您会得到 -215:assertion 错误,而在 IDLE 中:

Traceback (most recent call last):
  File "<stdin>", line 4, in <module>/
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-9d
_dfo3_\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed)
 size.width>0 && size.height>0 in function 'cv::imshow'

在 DOS/cmd 窗口中:

Python 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AM
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np, cv2, os
>>> os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;0"
>>> url3 = "rtsp://user:pwrd@192.168.1.183:554/onvif1"
>>> cap = cv2.VideoCapture(url3, cv2.CAP_FFMPEG)
[rtsp @ 000000000050df80] Nonmatching transport in server reply

进一步说明:上面的程序在 VideoCapture 实例化后停止,如 DOS/cmd 运行和在 IDLE 中实例化 VideoCapture 后插入以下代码所示:

cap = cv2.VideoCapture(url3,cv2.CAP_FFMPEG)
cap.isOpened()
False

请协助,谢谢,悉尼的安东尼

标签: pythonopencvrtsp

解决方案


推荐阅读