Python读取海康威视rtsp视频流并定时保存到文件夹中

该程序从配置文件config.yaml读取摄像头IP列表、登录信息和保存路径,使用OpenCV库连接RTSP流并抓取图片,图片按设定的延时周期进行更新,每次更新都会覆盖旧文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置文件 config.yaml

# 监控视频流ip地址
ipList:
  - 192.168.3.1

# 摄像头账号和密码
loginInfo: {
    user: admin,
    password: 123456,
    channel: 3
}

# 图片文件存储路径
save_image_dic: # 自己的文件路径

# 每一轮图片保存延时
delays: 10

2、saveImage.py

import os
import yaml
import cv2
import datetime
import time

config_path = 'config.yaml'
with open(config_path, 'r', encoding='utf-8') as f:
    param = yaml.load(f.read(), Loader=yaml.FullLoader)


class SaveImage:
    def __init__(self, ip_list, loginInfo, save_dic, param):
        super(SaveImage, self).__init__()
        self.ip_list = ip_list  # 摄像头地址
        self.user = loginInfo['user']  # 用户名
        self.password = loginInfo['password']  # 密码
        self.channel = loginInfo['channel']  # 通道
        self.save_dic = save_dic  # 文件存储地址
        self.param = param  # 配置参数

    def __getStream__(self):
        stream_list = []
        for ip in self.ip_list:
            stream_list.append(f"rtsp://{self.user}:{self.password}@{ip}/Streaming/Channels/{self.channel}")
        return stream_list

    def getHikvision(self):
        stream_list = self.__getStream__()
        for stream in stream_list:
            cap = cv2.VideoCapture(stream)
            if cap.isOpened():
                print(f"监控球机{stream}连接成功")
                image_name = self.save_dic + '/' + stream.split('@')[-1].split('/')[0] + '.jpg'
                cv2.imwrite(image_name, cap.read()[1])
                cap.release()
            else:
                print(f'监控球机{stream}连接失败')
        print('*' * 30 + '\t', '*' * 30)

    def timer_get_image(self):
        last_time = datetime.datetime.now()
        while True:
            current_time = datetime.datetime.now()
            if (current_time - last_time).seconds >= self.param['delays']:
                self.getHikvision()
                last_time = current_time


if __name__ == '__main__':
    save_image = SaveImage(ip_list=param['ipList'], loginInfo=param['loginInfo'],
                           save_dic=param['save_image_dic'], param=param)
    save_image.timer_get_image()

3、说明

方法中会轮询摄像头ip列表,每一次轮询会覆盖上一次的文件

### 使用 Python海康威视摄像机抓取 RTSP 视频流 为了实现这一目标,可以采用 OpenCV 库来处理视频流。下面展示了具体的方法: #### 导入必要的库 首先需要导入 `cv2` 这一模块用于图像处理。 ```python import cv2 ``` #### 构建 RTSP URL 初始化 VideoCapture 对象 构建连接到特定海康威视摄像机的 RTSP 流地址字符串,创建一个 `VideoCapture` 实例以准备接收来自该路径的数据流[^1]。 ```python rtsp_url = 'rtsp://用户名:密码@IP地址/Streaming/channels/通道号' cap = cv2.VideoCapture(rtsp_url) ``` 这里需要注意的是,在实际应用中应当替换掉 `"用户名"`、`"密码"` 和 `"IP地址"` 以及可能存在的 `"通道号"` 参数为对应设备的具体信息[^3]。 #### 验证连接状态读取帧 检查是否成功打开了视频捕获对象,如果打开失败则程序会在此处停止执行。一旦确认无误,则进入循环不断尝试获取新的画面直至遇到错误或主动终止程序运行。 ```python if not cap.isOpened(): print("Error opening video stream or file") while(cap.isOpened()): ret, frame = cap.read() if ret: # 显示每一帧的画面 cv2.imshow('Frame',frame) # 按下 q 键退出显示窗口 if cv2.waitKey(25) & 0xFF == ord('q'): break else: break ``` 当不再需要继续观看直播时可以通过按下键盘上的字母键 `'q'` 来关闭播放器窗口结束脚本执行流程。 最后记得释放资源和销毁所有由 OpenCV 创建出来的图形界面组件。 ```python cap.release() cv2.destroyAllWindows() ``` 以上就是完整的代码片段,它能够有效地帮助开发者完成从指定型号和支持 RTSP 协议传输方式的海康威视品牌下的监控装置那里拉取消息的任务[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值