海康威视视频监控demo 源码+库文件

news/2024/11/24 11:34:30/

 一个朋友做监控,用的海康威视的设备,海康威视本身自己有Android客户端,但朋友想开发一款自己的软件,配合硬件一起销售,还可以进行定制化开发,所以应朋友之请,就研究了下海康威视的相关SDK开发。

        研究后发现,要实现上述功能,需要用到两个SDK:

           1、海康威视android 网络库

        2、海康威视android 播放库

       问题马上来了,海康威视的官网只有android 播放库下载,没有android 网络库下载,通过400电话联系了海康威视的技术人员,对方说请和当时销售联系索取,联系了销售,说了半天对方也没听懂我们要什么,这可能就是做技术的和做市场的不同。

        没有办法,只能在网上找,网海茫茫,找个sdk可真是费了牛劲,终于在“程序员”联合开发网上找到一个“hone_Monitor_SDK(android)”,介绍说:“海康威视android手机监控SDK,对想做android视频监控程序的朋友作用会很大,欢迎下载”,着实兴奋了一下,注册、下载,一气呵成,下载下来后因为没有sdk使用说明,又从海康威视官网下载了liunx版的网络库sdk使用说明(想着应该大同小异,可以参考),研究后,捣鼓出一个demo,运行后,连接服务器、登录设备都没有问题,可以看到监控点数量、设备序列号,但死活无法播放,一调用实时预览,就返回失败7,使用说明上解释说是网络故障,再怎么折腾也无济于事。

         于是又开始研究海康威视自己的android客户端(IVMS-4500),看着人家这个连接一点问题没的,怀疑可能我下的sdk版本太老(那个上面介绍支持android1.5,应该是2011年以前的)或者调用方法不对,想着干脆把他这个客户端反编译了看看,如果没有混淆,可以好好研究研究,即使混淆了,有些地方也能看个大概,说干就干,反编译后发现竟然没有混淆,哈哈,他自身sdk的调用看个一清二楚,仔细研究后,发现我的写法没有问题,基本可以肯定我下的sdk版本太老,可能现在的设备都不支持了,突发奇想:他这个反编译的结果是个jar包,如果我直接引用的话,不是他调用的功能、函数、类、接口什么的我都可以用么,呵呵,ok,直接导入我的demo工程,把我之前的sdk删掉,运行,哈哈,大功告成!

       好了,讲了这么多,步入正题,先介绍下为什麽要用两个sdk,海康威视android 网络库是用来与设备建立远程连接,音、视频解码,进行实时预览、回放等等功能的,但是它所得到的仅仅是二进制的音、视频数据而已,要真正的显示到手机界面上,还需要海康威视android 播放库sdk得支持,通过播放库sdk,才可以将视频显示到SurfaceView之上。也就是下面的结构:

          

//上代码

//sdk定义  
private Player myPlayer = null;  
private HCNetSDK videoCtr;  
//******************************************************************  
//sdk初始化  
videoCtr = new HCNetSDK();  //实例化网络库SDK  
videoCtr.NET_DVR_Init();  //初始化网络库SDK  //******************************************************************  
连接服务器,登录,实时预览代码示例:  videoHolder = videoView.getHolder();  //获取视频显示窗口(SurfaceView对象)的Holder  
myPlayer = Player.getInstance();  //实例话播放库对象  
playPort = myPlayer.getPort();   //获取播放端口  
///关于播放库SDK的使用海康威视官网有详细说明  // 登录服务器  
NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();  
int userid = videoCtr.NET_DVR_Login_V30(cameraInfo.serverip,  
cameraInfo.serverport, cameraInfo.username, cameraInfo.userpwd,  
deviceInfo);  
System.out.println("下面是设备信息************************");  
System.out.println("通道开始=" + deviceInfo.byStartChan);  
System.out.println("通道个数=" + deviceInfo.byChanNum);  
System.out.println("设备类型=" + deviceInfo.byDVRType);  
System.out.println("ip通道个数=" + deviceInfo.byIPChanNum);  byte[] snByte = deviceInfo.sSerialNumber;  
String sNo = "";  
for (int i = 0; i < snByte.length; i++) {  sNo += String.valueOf(snByte[i]);  
}  
System.out.println("设备序列号=" + sNo);  
System.out.println("************************");  NET_DVR_CLIENTINFO clientInfo = new NET_DVR_CLIENTINFO();  
clientInfo.lChannel = 1;   //需要打开的通道(可以参考通道开始序号和通道个数,一般从1开始)  
clientInfo.lLinkMode = 0x80000000;  //子码流(保证图像连续性),tcp连接方式,如果要保证图像清晰度,可选用主码流 (值全改为0:0x00000000) 
clientInfo.sMultiCastIP = null;  int playFlag = videoCtr.NET_DVR_RealPlay_V30(userid, clientInfo,  
mRealDataCallback, false);   //mRealDataCallback即为数据回传回掉函数 



//******************************************************************

数据回传回掉函数定义代码:

注意,函数中的videoHolder变量即为要显示视频的SurfaceView的Holder,通过SurfaceView对象的getHolder()方法获得

private RealPlayCallBack mRealDataCallback = new RealPlayCallBack() {  @Override  public void fRealDataCallBack(int arg0, int dataType,  byte[] paramArrayOfByte, int byteLen) {  // TODO Auto-generated method stub  // 回掉函数  switch (dataType) {  case 1: // 头数据  if (myPlayer.openStream(playPort, paramArrayOfByte, byteLen,  1024 * 1024)) {  if (myPlayer.setStreamOpenMode(playPort, 1)) {  if (myPlayer.play(playPort, videoHolder)) {  playFlag = true;  } else {  playError(3);  }  } else {  playError(2);  }  } else {  playError(1);  }  break;  case 2: case 4: if (playFlag  && myPlayer.inputData(playPort, paramArrayOfByte,  byteLen)) {  playFlag = true;  } else {  playError(4);  playFlag = false;  }  }  }  
};  



另外要注意的是调用顺序:

1、sdk实例话及初始化

2、在要显示视频的SurfaceView对象创建完成后(即surfaceCreated()方法被触发)再连接服务器,进行实时预览,否则在实时预览时可能会出现SurfaceView尚未完全加载成功,导致调调数据显示异常。

3、关于SurfaceView对象的使用,可以参考的资料很多,此处不再说明。

4、demo源码直接传上:http://download.csdn.net/detail/a358763471/6746599


http://www.ppmy.cn/news/520232.html

相关文章

海康威视Android SDK,并非萤石Android SDK

之前以为海康威视的android sdk 就是萤石的sdk&#xff0c;其实不是 海康威视的&#xff1a; 0: 相关的手机端软件&#xff1a;http://www.hikvision.com/cn/download_more_391.html 1: 海康威视Android SDK: 海康威视最新Android sdk 20160912 萤石的&#xff1a; 0: 官方网…

AndroidStudio 集成海康威视 Android SDK,集成萤石Android SDK

之前以为海康威视的android sdk 就是萤石的sdk&#xff0c;其实不是 海康威视的&#xff1a; 0: 相关的手机端软件&#xff1a;http://www.hikvision.com/cn/download_more_391.html 1: 海康威视Android SDK: 海康威视最新Android sdk 20160912 萤石的&#xff1a; 0: 官方网站…

Redis进阶篇(附面试快速答法)

文章目录 Redis使用场景1、缓存穿透布隆过滤器小总结面试快速答法 2、缓存击穿小总结面试快速答法 3、缓存雪崩面试快速答法 4、双写一致性小总结面试快速答法 5、持久化机制面试快速答法 6、数据过期策略小总结面试快速答法 7、数据淘汰策略小总结面试快速答法 8、分布式锁小总…

Ubuntu下配置Basler和海康威视的相机

又来搞相机了 是的&#xff0c;为了使用双目相机进行双目的标定&#xff0c;今天又来搞相机了 Basler相机—pylon5.2的安装 实验室的Basler相机有两个&#xff0c;一个是USB3.0接口的和GigE接口 关于GigE接口上来就是直接搬砖&#xff0c;pylon官网下载&#xff1a;https://w…

[C#] 折腾海康威视的人体测温 模组

单位的项目需要测温&#xff0c;同事买了个海康威视的人体测温机芯&#xff0c;型号位&#xff1a;TB-4117-3/S&#xff0c;给了一份pdf的说明书。 按说明书把设备连接设置好&#xff0c;从官网下载vb.net教程了sdk&#xff0c;我的个乖乖&#xff0c;压缩包就有70多M&#xf…

使用SPY++查看窗口信息去分析C++客户端UI软件问题

目录 1、使用SPY++查看窗口的信息 2、使用SPY++查看某些软件UI窗口用什么UI组件实现的

smbclient访问海康威视H90个人网盘

家里有一块闲置的2T硬盘&#xff0c;想着网上买一个家用的存储来把硬盘利用起来&#xff0c;于是就买了这款&#xff0c;网图是这个样子的。 实物图其实跟这个差不多&#xff0c;但是这个装的是小盘&#xff0c;我的是大盘还是闲置了&#xff0c;就换了一个2.5寸的固态硬盘挂上…

海康威视摄像头安装插件检测不到_海康威视摄像机常见问题解答

海康威视摄像机常见问题解答 1、忘记摄像机IP地址怎么办? ①可以通过设备网络搜索工具SADP在线搜索 ②可以使用客户端4200在线搜索功能 ③在设备和PC开启UPNP功能时,可以通过PC中网络发现查找 2、用SADP也搜不到摄像机 ①检测设备供电是否正常,可就近供电测试 ②检测网线连接…