cv2.VideoCapture()从网络摄像头取RTSP流失败的解决办法

本文记录了将大华网络摄像头与树莓派集成过程中遇到的问题及解决方案。通过将摄像头URL在VLC中成功播放,但在cv2库中无法读取视频流。作者发现端口可能是问题所在,通过修改URL中的端口为554后,cv2成功捕获视频流。文章提供了完整的Python代码示例,展示了如何使用cv2.VideoCapture()读取并显示视频流。
摘要由CSDN通过智能技术生成

树莓派从网络摄像头取流

需求:

将大华的网络摄像头连接到树莓派网口,取出视频进行处理。

问题与现象:

  1. 连接硬件
  2. 将树莓派有线网卡的ip固定设置于摄像头的同一网段。
  3. 将大华给的URL填到VLC里打开,可以播放视频
  4. 将大华给的URL填到cv2.VideoCapture()里,打不开视频。报错如下:
    在这里插入图片描述
  5. 将参数删除,在运行报错如下:
    在这里插入图片描述

分析

可能是由于端口的问题,上网搜索后,将大华给的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()   

运行结果如下:
在这里插入图片描述

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值