python - python,从IP摄像头接收rtsp流
问题描述
我想将 RTSP 流从 IP 摄像机传输到 python,但我无法让它与 python 一起使用。
我可以使用 VLC 或相机网站查看流。我使用了以下代码:
import os
import cv2
import urllib.request
import requests
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"]="rtsp_transport;udp"
#print("Before URL")
#print("After URL")
adr = 'rtsp://192.168.100.86:554'
try:
stream = cv2.VideoCapture(adr)
except Exception as g:
print("no stream")
while True:
img_res = stream.read()
#print('About to show frame of Video.')
try:
cv2.imshow("Capturing",img_res)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
except Exception as e:
print(e)
知道 nmap 命令显示相机有这些开放端口:
Host is up (0.016s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
80/tcp open http
554/tcp open rtsp
7103/tcp open unknown
8001/tcp open vcom-tunnel
当我使用 rtsp:554 或 http:80 运行上述代码时,我收到以下错误:
Expected cv::UMat for argument 'mat'
解决方案
我检查了你的代码并在我的网络摄像机中尝试过。它给出了同样的错误。然后我只是改变了循环中的阅读线:
ret,img_res = stream.read()
它解决了这个问题。我也在我的网络摄像头中尝试过,如果您不检查框架是否正常,则会发生同样的错误。因此,在其他步骤之前检查框架至关重要。从这里的文档ret
是:
ret 是一个布尔变量,如果框架可用,则返回 true。
推荐阅读
- javascript - ReactJS - 反应表中的复选框列不起作用
- google-colaboratory - 具有更多 RAM 的 Google Colab 等价物
- javascript - 为什么我的字段没有在 Javascript for Acrobat 的 setAction 方法中定义?
- python - 根据给定的迭代次数计算 0.0 和 1.0 的步长差
- javascript - Jitsi meet APIpersistnet room with password
- ruby-on-rails - 未初始化的常量 AuthenticationController
- flutter - 如何扩展这个lottie动画以填满整个屏幕 - Flutter
- mysql - PHPMailer 逗号分隔的电子邮件
- amazon-dynamodb - 我可以在 Dynamodb 中使用复合键作为分区键吗?
- javascript - React 路由器 dom 整页重新加载