python, 从网络摄像机接收 rtsp 流

python, receive rtsp stream from IP camera

我想将 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 is a boolean variable that returns true if the frame is available.