解决大华摄像头RTSP视频流VLC无法连接,然后用python解析视频流
遇到的问题
想通过python解析大华摄像头实时画面,先通过web访问摄像头,网络地址为192.168.1.222都正常,然后想通过vlc测试一下rtsp视频流是否正常,遇到无法连接的问题,554端口扫描也是正常打开的,连接字符串反复测试了好久都没有解决,百度了好久也没有找到答案,最终在摄像头配置管理里面找到了问题,解决了,分享出来,少走弯路。
大华摄像头rtps视频流地址
要大华摄像头摄像头rtsp视频流,必须通过连接地址访问,格式如下:
rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
说明:
username: 用户名。默认:admin。
password: 密码。例如admin。
ip: 为设备IP。例如 192.168.1.222。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)
该摄像头的rtsp地址为:
rtsp://admin:admin123@192.168.1.222:554/cam/realmonitor?channel=1&subtype=0
使用vlc播放器打开rtsp,验证视频流
- 打开vlc播放器,vlc是开源的多媒体播放器,自行下载;
- 从媒体菜单,点击打开网络串流;
- 打开的对话框网络协议中,输入地址:rtsp://admin:admin123@192.168.1.222:554/cam/realmonitor?channel=1&subtype=0
- 点击播放,出现错误,过程如图:
vlc无法预览视频流画面说明,连接过程出现了问题,先排查问题才能编程
解决问题
一番百度无果后,翻看摄像头web端管理页面发现有一个配置选项,界面如下:
安全管理里面开启了RTSP over TLS
RTSP 有几种变种,包括 RTSP over HTTP(RTSP 使用 HTTP 进行封装)、RTSP over TLS(RTSP 使用 TLS 加密)、RTSP over TCP 和 RTSP over UDP 等。
RTSP over TLS:
RTSP over TLS(Real Time Streaming Protocol over Transport Layer Security)是一种用于视频流传输的协议。它通过TLS(Transport Layer Security)来加密和保护实时流媒体数据的传输。RTSP over TLS通常用于保护视频监控、视频会议和其他实时流媒体应用中的数据传输。使用TLS可以确保数据的机密性和完整性,防止中间人攻击和窃听
VLC拉流默认是udp方式,连接识别会自动切换为tcp,应该是不支持TLS加密方式,所以关闭了该选项,确认后测试画面预览成功。
python读取rtsp视频流代码编写
import cv2
from datetime import datetime
# RTSP URL
rtsp_url = "rtsp://admin:admin123@192.168.1.222:554/cam/realmonitor?channel=1&subtype=0"
# 打开视频流
cap = cv2.VideoCapture(rtsp_url)
# 检查视频流是否成功打开
if not cap.isOpened():
print("Error: Failed to open RTSP stream.")
exit()
while True:
# 读取一帧图像
ret, frame = cap.read()
# 检查图像是否成功读取
if not ret:
print("Error: Failed to read frame.")
break
# 获取当前时间
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 在图像上写入当前时间字符串
cv2.putText(frame, current_time, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 显示处理后的图像
cv2.imshow("Video", frame)
# 检查是否按下ESC键,如果是则退出循环
if cv2.waitKey(1) & 0xFF == 27:
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
运行成功,希望对视频流读取或者做分析的人有帮助。