如何利用视频网站做推广,建立网站需要投入的成本,wordpress 地图热点功能,售后管理系统软件文章目录一.海康威视监控摄像头开发SDK介绍二.海康SDK模块说明三.Qt项目中海康威视SDK配置四.实时预览摄像头图像程序一.海康威视监控摄像头开发SDK介绍
设备网络SDK是基于设备私有网络通信协议开发的#xff0c;为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务…
文章目录一.海康威视监控摄像头开发SDK介绍二.海康SDK模块说明三.Qt项目中海康威视SDK配置四.实时预览摄像头图像程序一.海康威视监控摄像头开发SDK介绍
设备网络SDK是基于设备私有网络通信协议开发的为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块用于远程访问和控制设备软件的二次开发。图像预览, 文件回放和下载, 云台控制, 布防/撤防, 语音对讲, 日志管理, 解码卡, 远程升级, 远程重启/关闭, 格式化硬盘, 参数配置(系统配置, 通道配置, 串口配置, 报警配置, 用户配置), 多路解码器, 智能设备功能和获取设备能力集等。 海康威视SDK下载地址:https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type10 二.海康SDK模块说明
Windows下设备网络SDK Linux下设备网络SDK库 设备网络SDK开发包中包含以上各个组件HCNetSDK.dll、HCCore.dll必须加载其他组件用户可以根据需要选择其中的一部分或者全部以下将对各个组件在SDK中的作用和使用条件分别说明。 网络通讯库设备网络SDK的主体主要用于网络客户端与各类产品之间的通讯交互负责远程功能调控, 远程参数配置及码流数据的获取和处理等。设备网络 SDK V5.0针对产品应用业务进行细化对之前版本的SDK的功能模块进行组件化其中外部接口HCNetSDK.dll仍然保持和设备网络SDK V4.x版本保存一致(向下兼容)其他单独的业务功能预览、回放等可以加载单独的模块组件多个业务功能也可以组合使用。更新SDK时HCNetSDK.dll、HCCore.dll以及HCNetSDKCom文件夹下的功能组件库文件都需要更新加载且HCNetSDKCom文件夹名不能修改。 hpr库网络通讯库的依赖库Linux SDK使用时和网络通讯库同时加载。 RTSP通讯库支持RTSP传输协议的网络库当需要对支持RTSP协议的产品进行取流等操作时就必须加载该项组件。 转封装库库的功能可以分为两种一种是将标准码流转换成采用本公司封装格式的码流。当用户需要对支持RTSP协议的产品捕获采用本公司封装格式的码流数据时(即当设置NET_DVR_RealPlay_V40接口中的回调函数捕获数据或者调用NET_DVR_SetRealDataCallBack接口捕获数据时)必须加载该组件。另一种功能是能将标准码流转换成其他格式的封装如3GPP, PS等。例如当用户需要对支持RTSP协议的产品实时捕获指定封装格式的码流数据(对应的SDK接口为NET_DVR_SaveRealData)时必须加载该项组件。 字符转换库电脑字符集和设备字符集不一致时SDK内部需要进行字符编码转换SDK默认使用libiconv库进行类型转换。如果用户不想使用libiconv编码库可以调用NET_DVR_SetSDKLocalCfg(类型: NET_SDK_LOCAL_CFG_TYPE_BYTE_ENCODE)设置字符转码回调函数将用户自己的字符编码接口告知SDK然后SDK将使用用户提供的字符编码接口进行字符串处理。 模拟能力集如果需要获取设备能力集NET_DVR_GetDeviceAbility可以调用NET_DVR_SetSDKLocalCfg启用模拟能力集此时需要加载LocalXml.zip要求和网络通讯库放在同一个目录下。 语音对讲库用于语音对讲时通过声卡采集数据并按照指定的编码格式编码码流或者解码播放音频码流数据不带封装格式的码流数据。V4.2.2.5及以前版本SDK均采用windows API实现相关功能。之后版本默认使用语音对讲库的方式通过接口NET_DVR_SetSDKLocalCfg可以选择之前的windows API模式。OpenAL32.dll为依赖库语音对讲库模式下必须加载。音频编解码目前仅Win32版本SDK支持。Linux系统下无语音对讲、语音广播、音频编解码功能仅支持语音转发接口。 帧分析库用于分析视音频帧数据调用NET_DVR_SetESRealPlayCallBack、NET_DVR_SetPlayBackESCallBack设置裸码流回调函数等接口时必须加载该库文件。 OpenSSL库用于登录以及敏感信息加密必须加载该库文件。 播放库主要用于对实时码流数据进行解码显示(实现预览功能)和对录像文件进行回放解码等。用户如果需要在SDK内部进行对实时流和录像码流播放显示时(即NET_DVR_RealPlay_V40接口的第二个结构体参数的播放句柄设置成有效句柄时)必须加载该组件而如果用户仅需要用网络通讯库捕获到数据后再外部自行处理就不需要加载该组件这种情况下用户在外部自行解码将更灵活可参见播放库SDK开发包里面的《播放器SDK编程指南》。
三.Qt项目中海康威视SDK配置 解压下载好的SDK压缩包复制SDK解压包中的文件(库文件-include(头文件-lib)到自己新建的文件夹中 系统环境变量添加lib文件夹路径 Qt项目中CMakeList.txt添加如下代码这样即可完成海康威视的SDK导入 # HKVISION
set(HKVISION_DIR C:\\Program Files\\HKVISION)
set(HKVISION_INCLUDE_DIR C:\\Program Files\\HKVISION\\include)
set(HKVISION_LIB_DIRS C:\\Program Files\\HKVISION\\lib)
include_directories(${HKVISION_INCLUDE_DIR})
link_directories(${HKVISION_LIB_DIRS})target_link_libraries(${PROJECT_NAME} PUBLIC HCNetSDK PlayCtrl)四.实时预览摄像头图像程序
海康官方的实时预览程序流程 首先先初始化海康的SDK // 1.初始化海康监控SDK
NET_DVR_Init(); 然后创建一个包含摄像头IP等信息的NET_DVR_USER_LOGIN_INFO结构体和NET_DVR_DEVICEINFO_V40相机信息结构体其中NET_DVR_USER_LOGIN_INFO结构体包含登录相机时需要提供的必要信息例如用户名和密码而NET_DVR_DEVICEINFO_V40结构体则是登录成功后返回的相机的基本信息。 // 2.设置连接相机的信息用户注册设备
NET_DVR_USER_LOGIN_INFO struLoginInfo {0}; //包含相机参数的结构体
NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 {0}; //登录后的相机信息struLoginInfo.bUseAsynLogin 0; //同步登录方式
strcpy_s(struLoginInfo.sDeviceAddress, 192.168.1.71); //设备IP地址
struLoginInfo.wPort 8000; //设备服务端口
strcpy_s(struLoginInfo.sUserName, admin); //设备登录用户名
strcpy_s(struLoginInfo.sPassword, 1234); //设备登录密码NET_DVR_Login_V40(struLoginInfo, struDeviceInfoV40); //设备登录NET_DVR_Login_V40()函数说明 NET_DVR_USER_LOGIN_INFO结构体说明 相机登录成功后我们就可以开启相机的实时预览实时预览的方式有两种一种是直接给个窗口ID(HWND)SDK会自动把图像显示到控件上还有一种是给个回调函数SDK会把图像数据返回到回调函数里用户自行决定如何处理图像数据。这里只说明第一种方法回调函数的方式可以自行去海康威视SDK说明文档中查看使用方式。无论采用何种方式都需要提供NET_DVR_PREVIEWINFO结构体这个结构体中包含了SDK如何对流进行处理的信息。 //通过给控件的HWDNSDK自行进行图像的显示
// 3.启动预览
LONG lUserID -1; //注册设备ID
LONG lRealPlayHandle -1; //实时预览控制端口NET_DVR_PREVIEWINFO struPlayInfo; //实时显示参数设定
struPlayInfo.hPlayWnd hPlayWnd; //需要SDK解码时句柄设为有效值仅取流不解码时可设为空, Qt中可以通过(HWND)ui-srcImg-winId()获取控件HWND
struPlayInfo.lChannel 1; //预览通道号
struPlayInfo.dwStreamType 0; //0-主码流1-子码流2-码流33-码流4以此类推
struPlayInfo.dwLinkMode 0; //0- TCP方式1- UDP方式2- 多播方式3- RTP方式4-RTP/RTSP5-RSTP/HTTP
struPlayInfo.bBlocked 0; //0- 非阻塞取流1- 阻塞取流NET_DVR_RealPlay_V40(lUserID, struPlayInfo, NULL, NULL);NET_DVR_RealPlay_V40函数说明
NET_DVR_PREVIEWINFO结构体说明
4.一旦NET_DVR_RealPlay_V40()设置好后SDK就会自动把图像流显示到绑定的控件中如果需要从流中获取一帧的图像可以通过NET_DVR_CapturePictureBlock_New()函数获取。
std::vectorchar inputData(3840*2160*4 54); //创建一个数组大小为图像的H*W*4 54用来保存图像数据
DWORD size 0; //返回的实际图像大小
DWORD* psize size; //指向实际图像大小的指针
NET_DVR_CapturePictureBlock_New(lRealPlayHandle, inputData.data(), (DWORD)inputData.size(), psize) //通过这个函数获取一帧图像数据cv::_InputArray pic_arr(inputData); //将图像数据转换为OpenCV的数组
Mat grabImg cv::imdecode(pic_arr, cv::IMREAD_COLOR); //OpenCV数组转换为Mat对象//通过以下代码把opencv的Mat转换为QImage然后在Qt的QLabel控件上进行显示
QImage qgrabImg QImage((const unsigned char*)(grabImg.data), grabImg.cols, grabImg.rows, grabImg.cols*grabImg.channels(), QImage::Format_RGB888); // Mat为BGR颜色模式;
qgrabImg qgrabImg.rgbSwapped();
ui-grabImg-setPixmap(QPixmap::fromImage(qgrabImg));实际的Qt程序运行效果 程序源代码下载地址 地址: https://download.csdn.net/download/qq_30150579/87578614