使用Python拉取TP-Link VIGI摄像头视频流失败,如何解决?
解决方案
首先补全RTSP地址后缀
TP-Link VIGI系列摄像头的RTSP流默认不支持根路径直接访问,需要附加对应的流路径参数,常见可用路径格式如下:
主码流:rtsp://<用户名>:<密码>@<IP>:554/stream1
子码流:rtsp://<用户名>:<密码>@<IP>:554/stream2
部分型号需要附加通道标识:rtsp://<用户名>:<密码>@<IP>:554/ch01/stream1
替换你的cv2.VideoCapture参数测试即可。通过ONVIF接口直接获取官方可用流地址
你已经可以正常连接ONVIF服务,直接调用GetStreamUri接口即可拿到摄像头返回的合法拉流地址,参考代码:
from onvif import ONVIFCamera # 初始化摄像头连接 mycam = ONVIFCamera('192.168.1.6', 80, 'admin', 'admin123') media_service = mycam.create_media_service() # 获取所有码流配置文件 profiles = media_service.GetProfiles() # 拉取对应码流的RTSP地址,取第一个配置文件为主码流 req = media_service.create_type('GetStreamUri') req.ProfileToken = profiles[0].token req.StreamSetup = { 'Stream': 'RTP-Unicast', 'Transport': {'Protocol': 'RTSP'} } stream_uri = media_service.GetStreamUri(req) # 打印出的地址直接用于OpenCV拉流即可 print("合法RTSP地址:", stream_uri.Uri)
- 排查解码与传输兼容问题
- 确认你的OpenCV版本包含FFmpeg支持,运行
print(cv2.getBuildInformation())查看FFmpeg字段状态为YES,否则卸载当前版本重新安装完整的opencv-python包 - 部分VIGI型号默认开启H.265编码,旧版OpenCV默认不支持该编码解码,可进入摄像头管理后台将视频编码切换为H.264,或安装对应H.265解码插件
- 若UDP传输不稳定可强制切换为TCP拉流,修改代码为:
import cv2 cap = cv2.VideoCapture("你的合法RTSP地址", cv2.CAP_FFMPEG) # 强制使用TCP传输 cap.set(cv2.CAP_PROP_RTSP_TRANSPORT, cv2.CAP_FFMPEG_RTSP_TRANSPORT_TCP) ret, frame = cap.read()
内容的提问来源于stack exchange,提问作者Abdelsalam Hamdi
相关产品推荐
相关产品推荐

