Android 集成海康威视监控 SDK,实现监控录像的查看

您所在的位置:网站首页 海康威视视频回放 Android 集成海康威视监控 SDK,实现监控录像的查看

Android 集成海康威视监控 SDK,实现监控录像的查看

2024-07-08 10:30:43| 来源: 网络整理| 查看: 265

Android 集成海康威视监控 SDK,实现监控录像的查看

配置

切换Android studio 到project目录下,分别将jar包与armeabi包复制进去lib文件夹下:

设置app bulid.gradle文件 主要是添加CPU限制 只支持32位 以及添加so包的路径、添加jar包依赖:

添加权限

SDK使用

在调用摄像头的Activity的oncreate()中初始化SDK

private boolean initeSdk() { // init net sdk if (!HCNetSDK.getInstance().NET_DVR_Init()) { Log.e(TAG, "HCNetSDK init is failed!"); return false; } HCNetSDK.getInstance().NET_DVR_SetLogToFile(3, "/mnt/sdcard/sdklog/",true);//log保存的路径 return true; }

 登陆

private int loginNormalDevice() { // get instance m_oNetDvrDeviceInfoV30 = new NET_DVR_DEVICEINFO_V30(); if (null == m_oNetDvrDeviceInfoV30) { Log.e(TAG, "HKNetDvrDeviceInfoV30 new is failed!"); return -1; } // call NET_DVR_Login_v30 to login on, port 8000 as default int iLogID = HCNetSDK.getInstance().NET_DVR_Login_V30(ADDRESS, PORT, USER, PSD, m_oNetDvrDeviceInfoV30); if (iLogID < 0) { Log.e(TAG, "NET_DVR_Login is failed!Err:" + HCNetSDK.getInstance().NET_DVR_GetLastError()); return -1; } if (m_oNetDvrDeviceInfoV30.byChanNum > 0) { m_iStartChan = m_oNetDvrDeviceInfoV30.byStartChan; m_iChanNum = m_oNetDvrDeviceInfoV30.byChanNum; } else if (m_oNetDvrDeviceInfoV30.byIPChanNum > 0) { m_iStartChan = m_oNetDvrDeviceInfoV30.byStartDChan; m_iChanNum = m_oNetDvrDeviceInfoV30.byIPChanNum + m_oNetDvrDeviceInfoV30.byHighDChanNum * 256; } Log.i(TAG, "NET_DVR_Login is Successful!"); return iLogID; }

 相机预览

//预览 final NET_DVR_PREVIEWINFO ClientInfo = new NET_DVR_PREVIEWINFO(); ClientInfo.lChannel = 0; ClientInfo.dwStreamType = 0; // substream ClientInfo.bBlocked = 1; //设置默认点 thread = new Thread(new Runnable() { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { SystemClock.sleep(1000); runOnUiThread(new Runnable() { @Override public void run() { if (isShow) startSinglePreview();//预览 } }); } } }); thread.start();

预览摄像头需要开启线程,监听预览成功后停止线程,不然界面会显示黑色。

startSinglePreview()代码:

private void startSinglePreview() { if (m_iPlaybackID >= 0) { Log.i(TAG, "Please stop palyback first"); return; } RealPlayCallBack fRealDataCallBack = getRealPlayerCbf(); if (fRealDataCallBack == null) { Log.e(TAG, "fRealDataCallBack object is failed!"); return; } Log.i(TAG, "m_iStartChan:" + m_iStartChan); NET_DVR_PREVIEWINFO previewInfo = new NET_DVR_PREVIEWINFO(); previewInfo.lChannel = m_iStartChan; previewInfo.dwStreamType = 0; // substream previewInfo.bBlocked = 1; m_iPlayID = HCNetSDK.getInstance().NET_DVR_RealPlay_V40(m_iLogID, previewInfo, fRealDataCallBack); if (m_iPlayID < 0) { Log.e(TAG, "NET_DVR_RealPlay is failed!Err:" + HCNetSDK.getInstance().NET_DVR_GetLastError()); return; } isShow = false; if (NotNull.isNotNull(thread)) { thread.interrupt(); } h1 = new CameraManager(); h1.setLoginId(m_iLogID); Intent intent = getIntent(); if (NotNull.isNotNull(intent) && intent.getIntExtra("INDEX", -1) != -1) { int point = app.preferences.getInt("POINT", 0); boolean b = HCNetSDK.getInstance().NET_DVR_PTZPreset(m_iPlayID, PTZCommand.GOTO_PRESET, point); } }

 控制台操作

@Override public boolean onTouch(final View v, final MotionEvent event) { if (!NotNull.isNotNull(h1)) return false; Log.d(TAG, "onTouch: "); new Thread() { @Override public void run() { switch (v.getId()) { case R.id.btn_Up: if (event.getAction() == MotionEvent.ACTION_DOWN) { h1.startMove(8, m_iLogID); } if (event.getAction() == MotionEvent.ACTION_UP) { h1.stopMove(8, m_iLogID); } break; case R.id.btn_Left: if (event.getAction() == MotionEvent.ACTION_DOWN) { h1.startMove(4, m_iLogID); } if (event.getAction() == MotionEvent.ACTION_UP) { h1.stopMove(4, m_iLogID); } break; case R.id.btn_Right: if (event.getAction() == MotionEvent.ACTION_DOWN) { h1.startMove(6, m_iLogID); } if (event.getAction() == MotionEvent.ACTION_UP) { h1.stopMove(6, m_iLogID); } break; case R.id.btn_Down: if (event.getAction() == MotionEvent.ACTION_DOWN) { h1.startMove(2, m_iLogID); } if (event.getAction() == MotionEvent.ACTION_UP) { h1.stopMove(2, m_iLogID); } break; case R.id.btn_ZoomIn: if (event.getAction() == MotionEvent.ACTION_DOWN) { h1.startZoom(1, m_iLogID); } if (event.getAction() == MotionEvent.ACTION_UP) { h1.stopZoom(1, m_iLogID); } break; case R.id.btn_ZoomOut: if (event.getAction() == MotionEvent.ACTION_DOWN) { h1.startZoom(-1, m_iLogID); } if (event.getAction() == MotionEvent.ACTION_UP) { h1.stopZoom(-1, m_iLogID); } break; default: break; } } }.start(); return false; }

/** * 停止移动 NET_DVR_PTZControl_Other参数:(播放标记, 通道, 指令码, 开始标记0或停止标记1) * * @param orientation 九宫格数字方向 */ public void stopMove(int orientation, int m_iLogID) { if (m_iLogID < 0) { return; } switch (orientation) { case 9: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.UP_RIGHT, 1); break; case 8: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.TILT_UP, 1); break; case 7: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.UP_LEFT, 1); break; case 6: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.PAN_RIGHT, 1); break; case 5: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.PAN_AUTO, 1); break; case 4: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.PAN_LEFT, 1); break; case 3: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.DOWN_RIGHT, 1); break; case 2: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.TILT_DOWN, 1); break; case 1: HCNetSDK.getInstance().NET_DVR_PTZControl_Other(m_iLogID, 1, PTZCommand.DOWN_LEFT, 1); break; default: break; } }

说得再多不如代码一坨

Github传送门

以上讲的是旧版本,转自 wangguan_9527   博客地址  海康威视 Android studio 集成使用_wangguan_9527的博客-CSDN博客

2022年新版本:

SDK(代码比较繁琐,不易看懂)地址:海康开放平台(设备网络SDK_Android V6.1.9.4_build20220412)

对sdk进行了缩减,源码地址:HKSDK_demo: 2022年Android版海康威视摄像头视频最新版sdk接入。

另外两种播放IP摄像头视频的方式

1、通过libvlc库,使用rtsp的方式获取视频流 : 

GitHub - zxrmmxt/SampleVlcRtspPlay: Android VLC RTSP播放

 2、使用vlc进行IP 摄像机观看:

https://github.com/damianhoppe/RTSP-Player



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭