cv2.VideoCapture()从网络摄像头取RTSP流失败的解决办法
需求:
将大华的网络摄像头连接到树莓派网口,取出视频进行处理。
问题与现象:
- 连接硬件
- 将树莓派有线网卡的ip固定设置于摄像头的同一网段。
- 将大华给的URL填到VLC里打开,可以播放视频
- 将大华给的URL填到cv2.VideoCapture()里,打不开视频。报错如下:
- 将参数删除,在运行报错如下:
分析
可能是由于端口的问题,上网搜索后,将大华给的url里的port改成554。成功运行!差点就去编译ffmpeg了。 参考 https://stackoverflow.com/questions/65833545/cv2-videocapture-only-return-port-missing-in-uri
import cv2 #主码流 #dad=rtsp://admin:a1234567@192.168.0.101:port/cam/realmonitor?channel=1&subtype=0 #子码流: #son=rtsp://admin:a1234567@192.168.0.101:port/cam/realmonitor?channel=1&subtype=1 #测试url test=rtsp://admin:a1234567@192.168.0.101:554/cam/realmonitor?channel=1&subtype=0 cap=cv2.VideoCapture(test) a=cap.isOpened() print(a) #得到视频的帧率 temp4=cap.get(cv2.CAP_PROP_FPS) print("fps") print(temp4) while True: ret,frame = cap.read() cv2.imshow("video",frame) if cv2.waitKey(1) & 0xFF == ord(q): break cv2.destroyAllWindows() cap.release()
运行结果如下: