如何解决rtsp cv2.VideoCapture onvif摄像机传输不匹配,并且-215:断言大小和宽度> 0失败
我在尝试通过网络从IP摄像机获取帧时是否缺少某些东西?该解决方案不适用于"Nonmatching transport in server reply" when cv2.VideoCapture rtsp onvif camera,how to fix?不适用于我。
我正在做的事情中缺少什么吗? 背景信息:
- OS Win 7 64位
- Python-同时使用IDLE和DOS / cmd版本v3.8.5-显示错误代码。
- 打开简历-版本3.4.4
- 路由器,地址为192.168.1.1
- 地址为192.168.1.100的无线适配器
示意图: IP摄像机-> RJ45进入无线路由器(192.168.1.1)->空中-> PC的无线适配器(192.168.1.100)-> python计算机程序,试图对该程序进行解码。 再次注意:我可以使用其他应用程序,但不能使用opencv。
我的IPCamera的工作位置:
我的相机确实与其他应用程序(例如VLC播放器)通信 IPCamera的视频流可以通过VLC播放器(3.0.11 Vetinari)和Media Player Classic(1.9.8.21)通过FFMPEG和EVEN我的android v5.1.1智能手机播放rstp流。 因此,从其他应用程序从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
请协助,谢谢! 悉尼的安东尼
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。