一个朋友做监控,用的海康威视的设备,海康威视本身自己有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

海康威视视频监控demo 源码+库文件相关推荐

  1. android新闻应用、应用锁、小说阅读、短视频APP等源码

    Android精选源码 android应用锁源码 android新闻日报源码 仿锤子官网首页海报3D触摸布局 android工艺灯控制器源码 Txt阅读器快速集成库 Kotlin+MVP+Rretro ...

  2. 微信小程序开发之文件上传下载应用场景(附Demo源码)

    微信小程序开发之文件上传下载应用场景(附Demo源码),Demo为小相册应用,源码在附件中,本示例需要腾讯云支持. http://www.henkuai.com/forum.php?mod=viewt ...

  3. m3u8, flv, mp4格式视频demo源码分享

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>m3u ...

  4. 一对一视频聊天app源码,Android手机端创建文件并输入内容

    一对一视频聊天app源码,Android手机端创建文件并输入内容实现的相关代码 1.在AndroidManifest.xml添加权限 <uses-permission android:name= ...

  5. 视频直播APP源码开发iOS音频播放流程

    视频直播APP源码开发iOS音频播放流程 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的, ...

  6. GreenDao的简单学习(附带demo源码)

    先看效果图: 添加实体: 按条件查询实体: GreenDao 概述:     适用于Android的轻量级快速ORM框架,可将对象映射到SQLite数据库中,并且针对Andriod进行了高度的优化,g ...

  7. 最新小程序授权+php后端(附demo源码)

    参考博客:小程序授权+php后端(附demo源码)_流情的博客-CSDN博客_php小程序 正所谓计划永远赶不上变化,鉴于小程序端已经更改了微信授权登录的接口,因此特来补充一下.原先的wx.getUs ...

  8. 分享基于白鹭Egret联合Matchvs开发的足球游戏(附Demo源码)

    Demo简介 本游戏使用Matchvs的实时联网SDK和白鹭Egret开发,并提供了简洁的Demo来展示多人实时联网游戏的开发过程和效果,用于演示多人匹配.数据传输.帧同步.创建房间.获取房间列表.消 ...

  9. JAVA毕业设计飞机航班信息查询系统演示视频2021计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计飞机航班信息查询系统演示视频2021计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计飞机航班信息查询系统演示视频2021计算机源码+lw文档+系统+调试部署+数据库 本源 ...

最新文章

  1. 英语语法总结--连词
  2. 澄清大数据存储——系统集成商篇
  3. URAL 1353 Milliard Vasya's Function DP
  4. pycharm如何设置注释的字体颜色
  5. 【Linux】43.ubuntu18.04安装搜狗输入法不能正常使用
  6. JavaScript——易班优课YOOC课群在线测试自动答题解决方案(二十)整理维护
  7. 手把手教你cuda5.5与VS2010的编译环境搭建
  8. Postgre合并多行数据为一行
  9. 浙大计算机基础知识题1,浙大作业1计算机基础知识题.docx
  10. html设置下拉筛选可以多选,select下拉框(支持筛选、多选)
  11. 如何使用putExtra()和getExtra()来表示字符串数据
  12. HTTP请求时POST参数到底应该怎么传?
  13. linux ip rcv,【linux网络】ip_rcv()函数
  14. 5分钟就能做一个Excel动态图表,你确定不学学?(纯gif教学)
  15. MySQL —— 数据库基础
  16. 示波器测量汽车进气压力传感器信号及波形分析
  17. Cesium 车辆跟踪事件气泡弹窗追随
  18. Office2007 Professional简体中文版 附注册码
  19. php更换鼠标指针详细,鼠标指针替换教程(修正版 )
  20. 授予人工智能计算中心解决方案的智博会金奖,对AI意味着什么?

热门文章

  1. mysql安装了libaio还是报错_ubuntu安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1
  2. Python统计学10——时间序列分析自回归模型(ARIMA)
  3. 非参数估计-高斯核平滑Gaussian kernel smoothing-非参数密度估计
  4. 【附源码】Python小游戏 ——开心消消乐
  5. matlab 线性回归 参数显著性,matlab建立多元线性回归模型并进行显著性检验及预测问题...
  6. 华科实验室信息汇总:
  7. 142_git的一个比较详细的教程
  8. 使用 PTC Mathcad Prime 软件绘制电源谐振Q值曲线
  9. 高数习题第八章总练习题(下)
  10. 【CPU设计实战】数字逻辑电路设计基础(一)