Python调用海康威视网络相机之——python读取相机rtsp码流显示画面

本文介绍在Python中实现海康威视相机连接与画面播放的方法,可通过RTSP流实现。给出海康RTSP协议格式,还介绍更改相机IP、用户名和密码的方法。提供网页预览、VLC播放器预览和Python读取RTSP流三种预览方式,同时提及方法三可能出现卡顿及NTPLIB时间同步问题。

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

搜罗了网上一些关于如何在python中实现海康威视相机的连接与画面播放的资料,最直接的方式是通过rtsp流来实现。

海康的rtsp协议格式如下(参考:海康相机使用RTSP):

rtsp://[username]:[passwd]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

主码流:
rtsp://admin:12345@192.168.1.64:554/h264/ch1/main/av_stream
rtsp://admin:12345@192.168.1.64:554/MPEG-4/ch1/main/av_stream
子码流:
rtsp://admin:12345@192.168.1.64/mpeg4/ch1/sub/av_stream
rtsp://admin:12345@192.168.1.64/h264/ch1/sub/av_stream

对于刚买的网络相机,需要你更改相机的IP,将其更改到与自己电脑同一个网段,即前三个地址一致。并且设置好相机的用户名和密码。


方式一:网页预览

打开电脑的IE浏览器(或其他浏览器),在地址栏输入你的相机的IP地址,如果还是全新的相机,请去海康官网下载SADP软件来更改相机的IP并激活相机( 海康威视相机配置流程)。例如我在浏览器输入:192.168.1.64 然后网页显示登录界面如下:

输入 相机的用户名和密码登录,在预览选项中可实时查看画面

方式二:VLC视频播放器预览

 打开你的VLC media player视频播放器,选择 媒体->打开网络串流,在打开媒体->网络->请输入网络URL中填写上面提到的rtsp格式的URL;VLC下载地址

然后点击播放,即可在该播放器中实时预览相机视频画面;

方式三:python读取rtsp流 

其中将下面的代码中的相应内容替换成你的就OK了,如相机用户名,密码,IP地址和端口号(常见为554)

import cv2
cap = cv2.VideoCapture("rtsp://username:passport@ip:port/Streaming/Channels/1")
ret, frame = cap.read()
while ret:
    ret, frame = cap.read()
    cv2.imshow("frame",frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()
cap.release()

运行上述代码需要你安装相应的opencv库,我在anaconda下运行的,装的是opencv-python库。还需要你去官网下载海康的SDK(针对自己的电脑系统环境下载对应版本)将里面的HCNetSDKCom文件夹放在python代码同目录下!

方法三会出现画面卡顿的现象,具体原因分析可参考:网络摄像机画面卡顿的主要原因有哪些?  视频花屏分析


补充资料:

NTPLIB时间同步问题:

Python通过NTP同步获取时间方法

python ntp服务器同步时间

使用python同步PC本地时间

Python中的NTP时间同步

https://www.cnblogs.com/general-seven/p/5893744.html

### 使用Python调用或控制Hikvision摄像头API 对于希望利用Python来操作Hikvision品牌下的摄像设备的情况,由于官方SDK主要面向C/C++环境提供支持,在这种情况下可以考虑通过ctypes或者cffi这样的工具包间接实现对原生DLL文件的加载与函数映射[^1]。 #### 安装必要的库 为了能够顺利地在Python环境中集成并使用这些功能,通常需要安装几个额外的支持库: - `numpy`: 用于处理图像数据。 - `opencv-python`: 提供视频等功能。 - `pywin32` (仅限Windows平台): 如果计划直接访问本地系统的动态链接库(.dll),那么这个模块可以帮助简化这一过程。 可以通过pip命令轻松完成上述依赖项的部署: ```bash pip install numpy opencv-python pywin32 ``` #### 访问相机的例子 下面给出了一段简单的代片段作为示范,展示了如何借助OpenCV读取来自网络摄像机(假设为Hikvision型号)的实时画面。需要注意的是,这段程序并没有涉及到具体的SDK接口调用,而是采用了更为通用的方式获取RTSP协议传输过来的数据: ```python import cv2 def get_rtsp_stream(rtsp_url): cap = cv2.VideoCapture(rtsp_url) while True: ret, frame = cap.read() if not ret: break # 显示每一帧的画面 cv2.imshow('Frame', frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): break cap.release() cv2.destroyAllWindows() if __name__ == "__main__": rtsp_address = "rtsp://username:password@camera_ip_address/Streaming/channels/1" get_rtsp_stream(rtsp_address) ``` 此脚本会尝试连接到指定地址处运行着Hikvision服务的IP摄像装置,并持续显示其捕捉到的内容直至用户按下键盘上的'q'键为止。其中`rtsp_address`变量应当替换为目标设备的实际登录凭证以及公网可达的位置信息。 #### 控制特性实例 如果想要进一步深入至更底层的操作比如云台转动、变焦调节等,则可能不得不参照制造商所提供的文档说明去解析特定于该品牌的API定义。这部分工作往往涉及较为复杂的参数配置和错误处理机制,建议开发者仔细阅读相关手册后再着手实施。
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值