萤石摄像头实时视频获取
一、简介
萤石摄像头是一款海康威视旗下的智能家居摄像头,可以实现远程监控、实时视频获取等功能。
本文介绍如何通过萤石云平台实现摄像头实时视频获取。
本文测试使用的摄像头型号为萤石CS-C6,版本号为8C4WF。
二、配置过程
- 注册账号
首先需要在萤石开放平台注册账号,然后登录账号。
- 添加设备
手机端在应用市场搜索萤石云视频
APP,登录账号后,点击“添加设备”,选择“摄像头”,然后按照提示操作将摄像头添加到账号中。
操作方法和主流的摄像头添加方式类似,具体操作步骤请参考官方文档,这部分比较简单,不再赘述。
- 电脑端软件
同样,萤石云平台提供了电脑端软件,可以在下载中心 - 萤石服务中心 - 萤石官网 - EZVIZ下载安装。
电脑端软件名称为萤石工作室
。
电脑端软件提供了更多的功能,如实时视频获取、录像、截图等,这些功能比较实用,在实验过程中可以使用。
- 实时视频获取
- 首先,需要关闭视频加密功能,否则无法获取实时视频。在手机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()