python - rtsp cv2.VideoCapture onvif camera Nonmatching transport and -215:Assertion failed size and width > 0
问题描述
在尝试通过网络从我的 ip 摄像头获取帧时,我是否遗漏了一些东西。当 cv2.VideoCapture rtsp onvif 相机时,解决方案在“服务器回复中的传输不匹配”不起作用,如何解决?对我不起作用。
我正在做的事情中缺少什么吗?背景资料:
- 操作系统 Win 7 64 位
- Python - 使用 IDLE 和 DOS/cmd 版本,v3.8.5 - 显示错误代码。
- 打开简历 - 版本 3.4.4
- 路由器,地址为 192.168.1.1
- 地址为 192.168.1.100 的无线适配器
示意图: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
请协助,谢谢,悉尼的安东尼
解决方案
推荐阅读
- php - 更新崩溃后如何修复 Joomla?
- python - 如何在自定义类对象上使用 pandas 的`.loc` 方法?
- javascript - Node.js Express 链接到来自 ejs 的 JavaScript 文件
- ios - Swift TableView 单元格播放按钮单击和其他单元格按钮需要重置
- python - 为什么 List == 'Sorted' 关键字给出错误
- r - 创建 .R 脚本以创建另一个可以将参数传递到其中的 .R 文件
- javascript - 如何在屏幕上显示文件中的数据?
- c# - 通过采用 Action 的反射调用方法
. 所有方法、包含类和 T 都标记为内部 - r - 如何在 R 中使用条件语句?
- c# - 如何从其文件夹外部执行 .exe