萤石摄像头实时视频获取


萤石摄像头实时视频获取

一、简介

萤石摄像头是一款海康威视旗下的智能家居摄像头,可以实现远程监控、实时视频获取等功能。

本文介绍如何通过萤石云平台实现摄像头实时视频获取。

本文测试使用的摄像头型号为萤石CS-C6,版本号为8C4WF。

二、配置过程

  1. 注册账号

首先需要在萤石开放平台注册账号,然后登录账号。

  1. 添加设备

手机端在应用市场搜索萤石云视频APP,登录账号后,点击“添加设备”,选择“摄像头”,然后按照提示操作将摄像头添加到账号中。

操作方法和主流的摄像头添加方式类似,具体操作步骤请参考官方文档,这部分比较简单,不再赘述。

  1. 电脑端软件

同样,萤石云平台提供了电脑端软件,可以在下载中心 - 萤石服务中心 - 萤石官网 - EZVIZ下载安装。

电脑端软件名称为萤石工作室

电脑端软件提供了更多的功能,如实时视频获取、录像、截图等,这些功能比较实用,在实验过程中可以使用。

  1. 实时视频获取
  • 首先,需要关闭视频加密功能,否则无法获取实时视频。在手机APP中可以操作,随着APP版本的更新,操作方式可能有所不同,具体操作请参考官方文档或者百度。
  • 接下来,需要在APP中开启RTSP流,这样就可以通过RTSP协议在本地获取实时视频。
  • 萤石官方其实也提供了一些在线直播源,包括HLS、FLV、RTMP等,可以根据自己的需求选择合适的方式。可以在萤石开放平台的萤石开放平台-提供持续稳定的以音视频为主的全场景、多功能综合性服务 (ys7.com)中查看。
  • 这里我们比较推荐使用RTSP流,因为RTSP流是一种通用的视频流协议,支持多种播放器,比如VLC、PotPlayer等。
  • PotPlayer播放RTSP流的方法:打开PotPlayer,点击文件->打开URL,输入RTSP流地址,点击播放即可。
  • 萤石摄像头的RTSP流地址格式为(局域网内):
rtsp://admin:password@ip:port/h264/ch1/main/av_stream

其中:
password是摄像头的登录密码,在摄像头底部可以查看,为验证码之后的6位编码;
ip是摄像头的IP地址;
port是RTSP端口号,默认为554;
h264是视频编码格式,默认是h264,可以进行修改;
ch1是通道号,一般为ch1
main是码流类型,默认为main,代表高清,可以修改为sub,代表低分辨率。

  • 使用Python可以通过opencv库获取RTSP流,具体代码如下:
# encoding:utf-8
"""
__time__    : 2024/5/1 17:36

本地RTSP
rtsp://admin:XXXXXX@192.168.1.110:554/h264/ch1/main/av_stream

在线直播源可以在下面链接查找
https://open.ys7.com/console/setnormallive.html?serial=G44390110&channelNo=1
"""
import threading

import cv2


class VideoCapture:
    def __init__(self, url):
        self.cap = cv2.VideoCapture(url)
        if not self.cap.isOpened():
            raise ValueError("Unable to open video source", url)
        self.ret, self.frame = self.cap.read()
        self.running = True

        # 创建一个线程来读取视频
        self.thread = threading.Thread(target=self.run, args=())
        self.thread.start()

    def run(self):
        while self.running:
            self.ret, self.frame = self.cap.read()

    def read(self):
        return self.ret, self.frame

    def stop(self):
        self.running = False
        self.thread.join()
        self.cap.release()


def main():
    # 创建一个可以调整大小的窗口,并设置初始大小
    cv2.namedWindow('YSRealVideo', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('YSRealVideo', 1920, 1080)

    cap = VideoCapture('rtsp://admin:XXXXXX@192.168.1.110:554/h264/ch1/mian/av_stream')  # 高分辨率
    # cap = VideoCapture('rtsp://admin:XXXXXX@192.168.1.110:554/h264/ch1/sub/av_stream')  # 低分辨率

    while cap.running:
        ret, frame = cap.read()
        if not ret:
            break

        cv2.imshow('YSRealVideo', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.stop()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

文章作者: BITBCI
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BITBCI !
  目录