- 浏览: 60822 次
- 来自: 深圳
最新评论
-
小英子:
求demo 375681112@qq.om
Android海康监控视频调用demo -
xch_yang:
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是 ...
Android海康监控视频调用demo -
cheng8160:
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是 ...
Android海康监控视频调用demo -
caonima186:
你好 给我一份吧 谢谢 451007821@qq.com
Android海康监控视频调用demo -
zhuangshuo:
你好 给我一份吧 谢谢 919036095@qq.com
Android海康监控视频调用demo
一、 开发环境
1、 操作系统:windows7(X64)
2、 开发工具:eclipse adt Build: v22.2.1-833290 JDK7 android SDK
3、 客户端设备版本:HUAWEI C8813 android 4.1.1
4、 监控设备型号:HIK/DS-8116HC-F/AF-DVR-II-B/16-16
5、 所需库文件(SDK):海康视频8116 播放库和网络库
二、 开发背景
目前的DVR所监控的视频只能在IE下实时预览,先应项目需要在移动平台进行实时预览
三、 环境搭建
1、 创建android工程在libs目录下导入开发项目所需要的依赖架包和库文件
2、 编写活动主页面
3、 编写主activity其中有一个广播接收器StartRenderingReceiver
4、 编写设备实体类
5、 编写视频播放核心类所有的状态-1 均表示未完成
6、 给项目赋权限
四、 相关说明
先介绍下为什麽要用两个sdk,海康威视android 网络库是用来与设备建立远程连接,音、视频解码,进行实时预览、回放等等功能的,但是它所得到的仅仅是二进制的音、视频数据而已,要真正的显示到手机界面上,还需要海康威视android 播放库sdk得支持,通过播放库sdk,才可以将视频显示到SurfaceView之上。流程如下图
核心代码如下:
五、 项目运行相关
目前就介绍这么多了,大家需要源码的可以留下邮箱
注:转载请注明出处
博客地址:http://qiaoyihang.iteye.com/
http://download.csdn.net/detail/yo8237233/7129777
1、 操作系统:windows7(X64)
2、 开发工具:eclipse adt Build: v22.2.1-833290 JDK7 android SDK
3、 客户端设备版本:HUAWEI C8813 android 4.1.1
4、 监控设备型号:HIK/DS-8116HC-F/AF-DVR-II-B/16-16
5、 所需库文件(SDK):海康视频8116 播放库和网络库
二、 开发背景
目前的DVR所监控的视频只能在IE下实时预览,先应项目需要在移动平台进行实时预览
三、 环境搭建
1、 创建android工程在libs目录下导入开发项目所需要的依赖架包和库文件
2、 编写活动主页面
3、 编写主activity其中有一个广播接收器StartRenderingReceiver
4、 编写设备实体类
5、 编写视频播放核心类所有的状态-1 均表示未完成
6、 给项目赋权限
四、 相关说明
先介绍下为什麽要用两个sdk,海康威视android 网络库是用来与设备建立远程连接,音、视频解码,进行实时预览、回放等等功能的,但是它所得到的仅仅是二进制的音、视频数据而已,要真正的显示到手机界面上,还需要海康威视android 播放库sdk得支持,通过播放库sdk,才可以将视频显示到SurfaceView之上。流程如下图
核心代码如下:
public class HC_DVRManager { private final static String TAG = "HC_DEBUG"; public final static String ACTION_START_RENDERING = "action_start_rendering"; public final static String ACTION_DVR_OUTLINE = "action_dvr_outline"; /** * 设备信息 * 模拟通道数bychannum * 数字通道数byipchanum */ private NET_DVR_DEVICEINFO_V30 deviceInfo_V30 = null; /** * 登入标记 -1未登入,0已登入 */ private int m_iLogID = -1; /** * 播放标记 -1未播放,0正在播放 */ private int m_iPlayID = -1; private int m_iPort = -1; private String ip; private int port; private String username; private String password; private int channel; private SurfaceHolder holder; /** * 用于发广播的上下文 */ private Context context; private static HC_DVRManager manager = null; private HC_DVRManager() { } public static synchronized HC_DVRManager getInstance() { if (manager == null) { manager = new HC_DVRManager(); } return manager; } /** * 设置播放设备信息 * * @param bean */ public void setDeviceBean(DeviceBean bean) { this.ip = bean.getIP(); this.port = Integer.parseInt(bean.getPort()); this.username = bean.getUserName(); this.password = bean.getPassWord(); this.channel = Integer.parseInt(bean.getChannel()); } /** * 设置播放视口 * @param holder */ public void setSurfaceHolder(SurfaceHolder holder) { this.holder = holder; } /** * 用于发送广播的上下文 * @param context */ public void setContext(Context context) { this.context = context; } public void initSDK() { if (m_iPlayID >= 0) { stopPlay(); } if (HCNetSDK.getInstance().NET_DVR_Init()) { Log.i(TAG, "初始化SDK成功!"); } else { Log.e(TAG, "初始化SDK失败!"); } } public void loginDevice() { deviceInfo_V30 = new NET_DVR_DEVICEINFO_V30(); m_iLogID = HCNetSDK.getInstance().NET_DVR_Login_V30(ip, port, username, password, deviceInfo_V30); System.out.println("下面是设备信息************************"); System.out.println("userId=" + m_iLogID); System.out.println("通道开始=" + deviceInfo_V30.byStartChan); System.out.println("通道个数=" + deviceInfo_V30.byChanNum); System.out.println("设备类型=" + deviceInfo_V30.byDVRType); System.out.println("ip通道个数=" + deviceInfo_V30.byIPChanNum); if (m_iLogID < 0) { Log.e(TAG, "登入设备失败!" + getErrorMsg(HCNetSDK.getInstance().NET_DVR_GetLastError())); } else { Log.i(TAG, "登入设备成功!"); } } public synchronized void realPlay() { try { if (m_iLogID < 0) { Log.e(TAG, "尝试重新登入"); int count = 0; while (count < 10) { Log.i(TAG, "正在第" + (count + 1) + "次重新登入"); loginDevice(); if (m_iLogID < 0) { count++; Thread.sleep(200); } else { Log.i(TAG, "第" + (count + 1) + "次登入成功"); break; } } if (m_iLogID < 0) { Log.e(TAG, "尝试登入" + count + "次均失败!"); return; } } if (m_iPlayID < 0) { //预览参数配置 NET_DVR_CLIENTINFO ClientInfo = new NET_DVR_CLIENTINFO(); ClientInfo.lChannel = channel + deviceInfo_V30.byStartChan; ClientInfo.lLinkMode = 0; // 多播地址,需要多播预览时配置 ClientInfo.sMultiCastIP = null; m_iPlayID = HCNetSDK.getInstance().NET_DVR_RealPlay_V30(m_iLogID, ClientInfo, getRealPlayerCallBack(), true); if (m_iPlayID < 0) { Log.e(TAG, "实时播放失败!" + getErrorMsg(HCNetSDK.getInstance().NET_DVR_GetLastError())); if (HCNetSDK.getInstance().NET_DVR_GetLastError() == 416) { //发送广播 context.sendBroadcast(new Intent(ACTION_DVR_OUTLINE)); } return; } else { Log.i(TAG, "开始实时播放!"); } } else { Log.d(TAG, "正在播放中?"); } } catch (Exception e) { Log.e(TAG, "异常:" + e.toString()); } } /** * 获取实时播放回调 * * @return */ private RealPlayCallBack getRealPlayerCallBack() { return new RealPlayCallBack() { /** * iRealHandle 当前的预览句柄 * iDataType 数据类型 * pDataBuffer 存放数据的缓冲区指针 * iDataSize 缓冲区大小 */ @Override public void fRealDataCallBack(int iRealHandle, int iDataType, byte[] pDataBuffer, int iDataSize) { processRealData(iDataType, pDataBuffer, iDataSize, Player.STREAM_REALTIME); } }; } /** * 停止播放 */ public synchronized void stopPlay() { if (m_iPlayID < 0) { Log.d(TAG, "已经停止?"); return; } // 停止网络播放 if (HCNetSDK.getInstance().NET_DVR_StopRealPlay(m_iPlayID)) { Log.i(TAG, "停止实时播放成功!"); } else { Log.e(TAG, "停止实时播放失败!" + getErrorMsg(HCNetSDK.getInstance().NET_DVR_GetLastError())); return; } // 停止本地播放 if (Player.getInstance().stop(m_iPort)) { Log.i(TAG, "停止本地播放成功!"); } else { Log.e(TAG, "停止本地播放失败!"); return; } // 关闭视频流 if (Player.getInstance().closeStream(m_iPort)) { Log.i(TAG, "关闭视频流成功!"); } else { Log.e(TAG, "关闭视频流失败!"); return; } // 释放播放端口 if (Player.getInstance().freePort(m_iPort)) { Log.i(TAG, "释放播放端口成功!"); } else { Log.e(TAG, "释放播放端口失败!"); return; } // 播放端口复位 m_iPort = -1; // 正在播放标记复位 m_iPlayID = -1; Log.i(TAG, "停止播放成功!"); } /** * 登出设备 */ public void logoutDevice() { if (HCNetSDK.getInstance().NET_DVR_Logout_V30(m_iLogID)) { m_iLogID = -1; Log.i(TAG, "登出设备成功!"); } else { m_iLogID = 0; Log.e(TAG, "登出设备失败!" + getErrorMsg(HCNetSDK.getInstance().NET_DVR_GetLastError())); } } /** * 释放海康SDK */ public void freeSDK() { // 清理缓存 if (HCNetSDK.getInstance().NET_DVR_Cleanup()) { Log.i(TAG, "释放SDK资源成功!"); } else { Log.e(TAG, "释放SDK资源失败!"); } } /** * 视频流解码 * * @param iDataType * @param pDataBuffer * @param iDataSize * @param iStreamMode */ private void processRealData(int iDataType, byte[] pDataBuffer, int iDataSize, int iStreamMode) { int i = 0; try { switch (iDataType) { case HCNetSDK.NET_DVR_SYSHEAD: Log.d(TAG, "处理头数据"); if (m_iPort >= 0) { break; } m_iPort = Player.getInstance().getPort(); if (m_iPort == -1) { Log.e(TAG, "获取播放端口失败!"); break; } else { Log.i(TAG, "获取播放端口成功!"); } if (iDataSize > 0) { if (Player.getInstance().setStreamOpenMode(m_iPort, iStreamMode)) { Log.i(TAG, "设置视频流成功!"); } else { Log.e(TAG, "设置视频流失败!"); break; } //抓图回调函数 PlayerDisplayCB displayCB = new PlayerDisplayCB() { @Override public void onDisplay(int arg0, ByteBuffer arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7) { if (null != context) { context.sendBroadcast(new Intent(ACTION_START_RENDERING)); } else { Log.e(TAG, "Context为空!没有setContext(Context context)?"); } Log.d(TAG, "开始画面渲染"); if (Player.getInstance().setDisplayCB(m_iPort, null)) { Log.i(TAG, "移除显示回调成功!"); } else { Log.e(TAG, "移除显示回调失败!"); } } }; if (Player.getInstance().setDisplayCB(m_iPort, displayCB)) { Log.i(TAG, "设置显示回调成功!"); } else { Log.e(TAG, "设置显示回调失败!"); break; } if (Player.getInstance().setDisplayBuf(m_iPort, 10)) { // 帧率,不设置为默认15 Log.i(TAG, "设置播放缓冲区最大缓冲帧数成功!"); } else { Log.e(TAG, "设置播放缓冲区最大缓冲帧数失败!"); break; } if (Player.getInstance().openStream(m_iPort, pDataBuffer, iDataSize, 2 * 1024 * 1024)) { Log.i(TAG, "打开视频流成功!"); } else { Log.e(TAG, "打开视频流失败!"); break; } if (Player.getInstance().play(m_iPort, holder)) { Log.i(TAG, "本地播放成功!"); } else { Log.e(TAG, "本地播放失败!"); break; } } else { Log.e(TAG, "视频流无数据!"); } break; case HCNetSDK.NET_DVR_STREAMDATA: case HCNetSDK.NET_DVR_STD_AUDIODATA: case HCNetSDK.NET_DVR_STD_VIDEODATA: // Log.i(TAG, "处理流数据"); if (iDataSize > 0 && m_iPort != -1) { for (i = 0; i < 400; i++) { if (Player.getInstance().inputData(m_iPort, pDataBuffer, iDataSize)) { Log.i(TAG, "输入数据成功!"); break; } Thread.sleep(10); } if (i == 400) { Log.e(TAG, "输入数据失败!"); } } break; default: break; } } catch (Exception e) { Log.e(TAG, "视频流解码异常!" + e.toString()); } }
五、 项目运行相关
目前就介绍这么多了,大家需要源码的可以留下邮箱
注:转载请注明出处
博客地址:http://qiaoyihang.iteye.com/
评论
20 楼
小英子
2018-03-16
求demo 375681112@qq.om
19 楼
xch_yang
2017-11-27
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是xch_yang@126.com
18 楼
cheng8160
2017-11-12
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是cheng8160@163.com
17 楼
caonima186
2017-10-12
你好 给我一份吧 谢谢 451007821@qq.com
16 楼
zhuangshuo
2017-09-23
你好 给我一份吧 谢谢 919036095@qq.com
15 楼
zl123456789zl123
2017-06-12
我也想要一个demo,可否麻烦发一份给我675673762@qq.com,,谢谢!!!
14 楼
mejunhuang
2017-06-01
我也想要一个demo,可否麻烦发一份给我95582594@qq.com
13 楼
tmyzh
2017-05-11
356589990@qq.com 能给我一份源码吗 ,最近在集成,获取m_iPlayID时总是小于0,画面出不来不知道什么原因
12 楼
183361056
2017-05-04
你有电话吗,我QQ号 183361056@qq.com 给我发一份
11 楼
applepeipei
2017-03-22
麻烦发我一下吧,719409618@qq.com,谢谢
10 楼
jzfwx
2017-03-17
邮箱:jzfwx@qq.com
9 楼
jzfwx
2017-03-17
你好!太及时了,正在搞手机软件,涉及到插入监控图像,麻烦发一个源码,感谢了。。。。
8 楼
jj631871243
2017-03-05
你好,能发一份给我吗,万分感谢 310959078@qq.com
7 楼
xiamuwjm
2017-02-22
你好,请问能不能发一份demo给我,我的邮箱是 2199837019@qq.com,非常感谢
6 楼
jzgl_javaeye
2017-01-22
老大,麻烦帮我发一份:liuqt_2005@163.com
5 楼
wfl1334766964
2016-10-28
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是1334766964@qq.com
4 楼
sqlcsharpholl7
2016-10-27
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是1403049908@qq.com
3 楼
yo8237233
2014-07-22
fly2think 写道
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是djjackylei@gmail.com
http://download.csdn.net/detail/yo8237233/7129777
2 楼
fly2think
2014-07-11
你好,请问能否发送一下这个demo给我呢,非常感谢。我的邮箱是djjackylei@gmail.com
1 楼
pxxaish9527
2014-05-26
二、 开发背景
目前的DVR所监控的视频只能在IE下实时预览,先应项目需要在移动平台进行实时预览
通过什么进行监控视频的实时预览的?
目前的DVR所监控的视频只能在IE下实时预览,先应项目需要在移动平台进行实时预览
通过什么进行监控视频的实时预览的?
发表评论
-
android + red5 + rtmp
2015-04-14 16:00 3772背景:在已有的red5服务 ... -
android中基于HTML模板的方式嵌入SWF
2015-04-03 16:38 1101继上一篇 利用webview实现在andorid中嵌入swf ... -
利用webview实现在andorid中嵌入swf
2015-03-27 11:06 1021项目背景是这样的,一套系统有三个客户端分别是网页,flex和a ... -
文件件监听器,android系统拍照功能调用后删除系统生成的照片
2014-08-28 20:53 2021先说说要实现的功能: android调用系统拍照功能实时 预览 ... -
自定义悬浮在界面上的数字键盘
2014-08-28 20:34 1332近期由于项目中很多EditText控件都是输入纯数字,不停的弹 ... -
view组件的duplicateParentState属性
2014-07-25 11:43 1790今天做页面的时候遇到一个小问题,在点击的时候改变组件的图片来源 ... -
android中的万能适配器BaseAdapter的总结
2014-04-03 17:35 1045有时候,列表不光会用来做显示用,我们同样可以在在上面添 ... -
自定义底部工具栏及顶部工具栏和Fragment配合使用demo
2014-04-02 14:57 1881首先简单的介绍下fragment,fragment是a ...
相关推荐
经过SDK更新后的demo,不会出现Jni Error,详见博客:http://blog.csdn.net/daijin888888/article/details/49763161
海康视频监控预览demo,包含开发指南以及一些问题说明和介绍
Android 海康视频监控预览实现demo
Linux下海康监控JAVA源码demo,Linux下载可直接打开示例
自己做的一个海康android移动端视频调用 我的设备是DS-8116HC DVR android4.1 直接导入eslipse即可运行,在设置中设置好相关IP,端口,点击开始预览即可
Cordova插件-用于播放海康监控视频
Android 海康摄像头调用demo,用的旧SDK,容易出现JNI ERROR,修改办法参见博客:http://blog.csdn.net/daijin888888/article/details/49763161
通过NVR管理。要求我们在web端实现一些功能: 实时查看 视频截图 视频回放 视频下载 视频抓图 摄像头方向调整 参考地址:...下载后,直接点开就可以用浏览器打开demo
Android播放海康威视监控视频Demo,实现了连接海康IP摄像头的播放,输入摄像头IP,摄像头user、pwd即可播放。
Linux下海康监控视频应用源码,Linux下可直接打开示例
Android 海康最新Android 6.0 demo,包含jar和so库
可用的海康威视监控 , 加上账户密码 端口 就能使用 duan
海康监控集成demo,含视频播放插件
Android端海康视频取流,可以实时预览与查看历史录像
qt实现的基于海康SDK的视频监控demo,实习时写的,基本需求都已实现,框架已完善,可二次开发,初学者可借鉴学习
根据海康威视官网提供java示例demo,封装成视频监控Java Demo 版jar包,可直接在服务器启动运行。
实现了海康监控的调用,很好用的一个示例 具体实现方法可以参见里面的说明
海康监控海康监控海康监控客户端海康监控客户端海康监控客户端海康监控客户端海康监控客户端海康监控客户端海康监控客户端海康监控客户端海康监控客户端
js调用海康web插件,直接操作nvr实现视频直播
在官方DEMO的基础下,更新了UI/排版,增加了多个信息的对接获取。 采用插件模式,只支持IE浏览器/或者兼容模式360,谷歌不支持,其它没测试。 有其它需求,也可以留言 持续更新中 另有持续更新的爬虫脚本,非常适合...