解决大华摄像头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,验证视频流

  1. 打开vlc播放器,vlc是开源的多媒体播放器,自行下载;
  2. 媒体菜单,点击打开网络串流
  3. 打开的对话框网络协议中,输入地址:rtsp://admin:admin123@192.168.1.222:554/cam/realmonitor?channel=1&subtype=0
  4. 点击播放,出现错误,过程如图:
  5. 在这里插入图片描述
  6. 在这里插入图片描述
    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()

运行成功,希望对视频流读取或者做分析的人有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值