神奇呀,第一次写博客。以前都是用word总结下来放在本地或者放在我的网站里面,但是我那个小网站,哈哈谁去看嘛?没人看万一我写的有问题,那不是我就要一直错下去?悄悄咪咪的把我的小网站放这儿:www.leon7.cn
之前由于项目需求,需要集成新版本的海康威视解码器SDK到项目中,旧版本的SDK无法满足需求(旧版本已经是元老级别的了)。所以写下这篇文章方便之后自己查看回顾,也希望可以帮助到其他的小伙伴,有什么错误的地方还希望能够指出。
当我们在使用一个产品的二次开发包的时候,我们首先得大致的翻阅一下产品手册以及供应商提供的开发手册。知己知彼,百战不殆嘛。
项目需求:远程登录,实时预览,云台控制,抓拍,录像。
SDK接入配置:
将demo项目中的jar包与armeabi包复制进去lib文件夹下。接下来设置bulid.gradle文件,添加so包的路径、添加jar包依赖。同样别忘记了相关权限的添加(6.0之后的权限适配)。详细步骤可以问度娘这个基本都是一样的,我主要写需求中我的解决。
远程登录:
首先我们得知道登录的业务逻辑。下面这张图就是我们使用IP登录的流程图。
由于项目没有固定的公网IP,所以利用路由器软件花生壳做了一个域名解析来获取浮动的公网IP地址。前提条件是运营商提供的不是私网(10,100开头的这种IP地址就是一个私网,这种需要用硬件花生壳才可以,具体方案可去花生壳官网了解)
实时预览:
这里我们需要调用 NET_DVR_RealPlay_V40这个接口,单通道预览需要注意,当你在准备预览下一个通道视频的时候,先调一次NET_DVR_StopRealPlay这个接口,必须要将当前预览的通道停止,否者会造成预览失败。
云台控制:
这里只需要设置点击事件就OK了,每次点击都去调一次接口NET_DVR_PTZControl_Other,将定义好的点击的参数放进去就OK了,这个问题不大。
抓拍:
抓拍这里需要调用NET_DVR_CapturePictureBlock接口,这里我们需要注意,抓拍之后的照片是存在自己设定的路径下。也可以往系统相册中存,但是经测试华为和魅族的手机会在系统相册展示,但是vivo以及OPPO 手机展示失败,但是图片存在。说明是调接口抓拍是成功的。我的解决办法是,单独将图片存在根目录下,然后通过广播的形式通知图库进行更新,最终出来的效果就是单独有一个相册展示抓拍的蹄片。
录像:
录像和抓拍很相似,只是接口不一样, NET_DVR_SaveRealData_V30:捕获预览数据并保存到指定文件中。
以上就是海康威视SDK应用开发的大致。
接下来是遇到的一些坑
1:无法调用JNA方法
一开始我是按照海康提供的demo进行资源导入的,在导入的过程中,该添加的.so文件,jar文件都已正确添加了,jnilibs的资源引入也配置了,还是输出没办法调用到JNA方法。然后尝试将JNA文件按照demo里面的路径重新修改,才实现了调用的。
总结:JNA文件如果作为 源文件加到工程,需要把包名修改为“package com.hcnetsdk.jna”(仅做参考)
2:关于移动侦测的问题
一开始有一个网络枪机带有移动侦测效果,这是设备默认开启的功能,所以在手机预览的时候就有一些遮挡视线的情况,所以考虑将它去除。因为熟悉摄像头的配置流程,我直接到它的后台将这个功能关闭了。
后来又想我们项目主要服务的对象是农民朋友,他们不知道怎么修改怎么办。所以就考虑通过代码去除这个功能。但是可恨的是海康在接口文件里没有单独的关闭移动侦测的接口,然后我就想用它的远程配置参数的接口来配置,也不包含这个功能。网上有个大佬是在PlaySurfaceView里面做的处理。留一个传送门。
3:顺便说一个WEB开发的坑:
这是我们同事在做web开发的时候遇到的问题,项目上使用的是16路的录像机,浏览器同时展示16个画面会使电脑非常的卡,很吃CPU和内存性能,一般电脑都很难带动。所以就咨询海康的技术,得到的解决办法是降低视频的显示分辨率。这样做有个很难受的就是,不管是实时预览还是回放视频都非常的模糊,有损用户体验感。这里不得不吐槽一下海康了,预览为什么一定要在IE模式下?就不能搞搞兼容?