ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于海康SDK开发文档分析+云台控制实现+经典案例

2021-10-22 14:32:13  阅读:195  来源: 互联网

标签:云台 海康 ex new byte public struCameraCfg SDK


转载:https://blog.csdn.net/weixin_43718192/article/details/94719781

 

基于海康SDK开发文档分析+云台控制实现+经典案例
上一篇:海康威视java开发+demo运行+调用dll动态库坑

一、准备
海康的SDK下载 https://www.hikvision.com/cn/download_61.html
开发环境
海康设备(ip、端口、账号、密码)
二、SDK开发文档分析
开发文档位置:CH-HCNetSDKV5.3.6.30_build20180816_Win64 ->开发文档 -> 设备网络SDK使用手册.chm
打开文档注意下面这两个地方(这两个地方是开发寻找调用的接口的关键)

由于该文档并不是开发文档,所以我们自己构建结构体不知道应该怎样定义(举一个典型的例子)
这是SDK定义


这是Java代码

//报警设备信息
public static class NET_DVR_ALARMER extends Structure
{
public byte byUserIDValid; /* userid是否有效 0-无效,1-有效 */
public byte bySerialValid; /* 序列号是否有效 0-无效,1-有效 */
public byte byVersionValid; /* 版本号是否有效 0-无效,1-有效 */
public byte byDeviceNameValid; /* 设备名字是否有效 0-无效,1-有效 */
public byte byMacAddrValid; /* MAC地址是否有效 0-无效,1-有效 */
public byte byLinkPortValid; /* login端口是否有效 0-无效,1-有效 */
public byte byDeviceIPValid; /* 设备IP是否有效 0-无效,1-有效 */
public byte bySocketIPValid; /* socket ip是否有效 0-无效,1-有效 */
//原本是NativeLong类型 但是在之后的测试中发现在windows中这个是偏移了4字节 所以改为int
public int lUserID; /* NET_DVR_Login()返回值, 布防时有效 */
public byte[] sSerialNumber = new byte[SERIALNO_LEN]; /* 序列号 */
public int dwDeviceVersion; /* 版本信息 高16位表示主版本,低16位表示次版本*/
public byte[] sDeviceName = new byte[NAME_LEN]; /* 设备名字 */
public byte[] byMacAddr = new byte[MACADDR_LEN]; /* MAC地址 */
public short wLinkPort; /* link port */
public byte[] sDeviceIP = new byte[128]; /* IP地址 */
public byte[] sSocketIP = new byte[128]; /* 报警主动上传时的socket IP地址 */
public byte byIpProtocol; /* Ip协议 0-IPV4, 1-IPV6 */
public byte[] byRes2 = new byte[11];
}


知道接口需要搜索的时候

三、云台控制实现
按照上面的分析找到开发的流程结合java版本的Demo


调用接口的时候需要注意

①、海康的demo是启动了预览的(如果需要和海康的demo一致的话,海康有些好的web控件)

②、我采用的方案是前端采用Video.js播放,通过EasyNVR流媒体服务(也可以自己搭建,我自

己搭建的不太稳定)拿到对应的RTMP/HLS/FLV播放路径

根据上面的两种在调用接口的时候会有区别

①、启动预览(海康demo方案)


②、不启动预览


四、经典的案例
下面写出了经典的设置值和获取值的方法(在一些参数不知道怎么赋值的情况下,可以参照这个)
/**
* 设置视频参数
*/
public boolean setParm(String lUser, Integer lCannel, VideoParmBean videoParmBean){
IntByReference ibrBytesReturned = new IntByReference(0);
HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX struCameraCfg_ex = new HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX();
Pointer lpOutBuffer = struCameraCfg_ex.getPointer();
struCameraCfg_ex.write();
if(!hCNetSDK.NET_DVR_GetDVRConfig(new NativeLong(Long.parseLong(lUser)), 3368/*NET_DVR_GET_CCDPARAMCFG_EX*/, new NativeLong(lCannel), lpOutBuffer, struCameraCfg_ex.size(), ibrBytesReturned)){
return false;
}
struCameraCfg_ex.read();
struCameraCfg_ex.dwSize = struCameraCfg_ex.size();
//给结构体赋值
struCameraCfg_ex.struVideoEffect.liangdu = videoParmBean.getLiangdu().byteValue();
struCameraCfg_ex.struVideoEffect.ruidu = videoParmBean.getRuidu().byteValue();
struCameraCfg_ex.struVideoEffect.sedu = videoParmBean.getSedu().byteValue();
struCameraCfg_ex.struVideoEffect.baohedu = videoParmBean.getBaohedu().byteValue();
struCameraCfg_ex.struVideoEffect.duibidu = videoParmBean.getDuibidu().byteValue();
struCameraCfg_ex.struNoiseRemove.byDigitalNoiseRemoveLevel = videoParmBean.getQuzao().byteValue();
Pointer lpInBuffer = struCameraCfg_ex.getPointer();
struCameraCfg_ex.write();
if(!hCNetSDK.NET_DVR_SetDVRConfig(new NativeLong(Long.parseLong(lUser)), 3369/*NET_DVR_SET_CCDPARAMCFG_EX*/, new NativeLong(lCannel), lpInBuffer, struCameraCfg_ex.size())){
return false;
}
return true;
}

关于回调函数的设置,可以在报警的地方找到

标签:云台,海康,ex,new,byte,public,struCameraCfg,SDK
来源: https://www.cnblogs.com/MCSFX/p/15438685.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有