最近几个月工作实在是太忙了,除了在疫情期间那段时间,已经几乎半年没有更新过我的python视频课程了,辜负了大家的期望,抱歉。不过从今天开始,重新拾起头条 ,每周保持至少一次学习、提升及分享,但主要以静态文章为主,的确没有时间去倒腾视频了,文章的方式能更好的利用碎片化时间,虽然是静态文章,但保证每篇文章都能做到经典、详细,以便让0基础的 友也能快速入门。
接下来,进入正题,在以往发布的视频中给大家介绍过如何利用 python 向海康、大华的摄像机获取视频流,通过 python 的 VideoCapture库(已封装好的 rtsp 方式),但这种方式显然灵活性不够强,不仅很多操作无法实现,而且该库还有很大几率出现函数的阻塞,一直不返回的情况。
因此,本篇文章将教大家如何利用 python 直接调用海康威视的 c++ sdk dll,从而实现一个完整的客户端,包括:获取设备版本、实时预览、抓图、摄像机上下左右转动,焦距远近,聚焦清晰度,视频亮度、饱和度参数调节等等,相信有了这个入门教程,你也能很轻易的编写出视频监控类的小程序。
关于 python 环境准备、visual studio code 安装、pip 工具的使用请参考以前发布过的视频。
本次以海康威视的开发包为例,可以在其官 : 的服务支持页面->SDK开发页面中,选择:设备 络SDK_Win32/Win64 下载,32位版或64位版取决于你的操作系统位数,你可以在 windows 中右键点击我的电脑->属性查看:
下载对应位数的版本。
下载后进行解压,可见如下的目录:
C# demo: 用 C Sharp 语言开发的客户端示例代码
ClientDemo: 用 C++ 语言开发的客户端示例代码
doc:开发相关的文档
incEn: C++ 的 .h 头文件
lib: C++ 的静态 lib 和动态 dll
我们需要的文件是 incEn 目录中的 .h 文件,以及 lib 目录(及子目录,ClientDemoDll,HCNetSDKCom)中的 dll 文件。
拷贝所有 dll 文件到同一个目录下,我的路径是 E:codehcnetsdk,这个 hcnetsdk也是我的代码项目主目录:
至于 .h 文件,放在你的代码目录下即可,任何目录都可以,仅仅是作为一些结构定义的参考,代码中实际并不会用到 .h 头文件,我放置的目录是:
打开 HCNetSDK.h 头文件:
我们可以看到许多的定义,包括一些结构体,以及我们可调用的 SDK 函数,例如红框内的 NET_DVR_Init(),这些结构体和函数是我们实现客户端的主要手段,因此你必须熟悉这些内容。
所有这些结构体的定义、函数的调用方法,都在下载SDK中 doc 目录的 chm 文档中了,这些内容是我们编写客户端程序的重要参考,包括调用流程,函数的作用、返回值、参数详细介绍等等,可与 .h 头文件匹配进行参考。
现在,我们在主程序目录下创建一个测试文件(E:codehcnetsdktest.py),test.py,我们将基于此文件一步步的编写测试端程序。
python 内部有一个库叫做 ctypes,这为 python 调用标准 c++ 库提供了便利,我们只需要用 from ctypes import * 的方式导入后即可使用,如下:
APP_PATH 是获取当前主程序的路径即:E:codehcnetsdk;
hcnetsdk、hcpreview、hcplayback是我们需要动态加载的 c++ dll 库,HCNetSDK.dll 封装了 络协议,HCPreview.dll 封装了实时预览解码方面的内容,HCPlayBack.dll 封装了录像解码回放、控制方面的内容,这三个库都是我们需要的。
APP_PATH + ‘\HCNetSDK.dll’ 是做的一个路径字符串连接,,连接后相当于:
E:codehcnetsdk\HCNetSDK.dll 路径,最后用 cdll.LoadLibrary 函数加载这个路径下的 dll 库。
在加载 dll 后,hcnetsdk,hcpreview,hcplayback 都成为了可调用海康 sdk 函数的有效句柄,我们只需要利用该句柄打一个点 . 即可调用相关 sdk 函数,具体调用方式举例如下:
是不是非常简单,NET_DVR_Init 是 SDK 的第一个函数,初始化 SDK,在使用SDK前,必须调用的函数。我们再回过头去HCNetSDK.h 头文件的定义看看:
我们调用的函数与头文件定义的函数名称,是完全匹配的。
我们总结一下,总共代码就6句话,我们按顺序列一下,是不是非常简单呢?你学会了吗?你知道写代码最难的是什么吗?就是把复杂的问题简单化,让小朋友们也能看懂,啊哈哈 :)
好了,以上是本期全部内容,我们将在下一期继续教大家一步步的做好这个视频客户端,下期再见,记得关注我的头条 :Marco 快乐编程 ,有问题可以留言或私信:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!