海康摄像头视频调用出错,Jni Error(app bug): accessed stale local reference解决办法
Posted 键盘上的钢琴师_v5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海康摄像头视频调用出错,Jni Error(app bug): accessed stale local reference解决办法相关的知识,希望对你有一定的参考价值。
项目中要在android手机中调用海康摄像头拍摄的画面,在公司网管配置好了网络地址(不要与其他局域网内地址冲突)和端口,并激活摄像头设备后,通过SADPTool(海康提供的摄像头搜索工具)可以自动检索到当前局域网内已激活的设备,通过设备列表中双击设备所在IP(即网管之前配置的IP),输入默认的用户名和密码(admin、111)进入设备管理界面,即可在PC端(浏览器中)看到摄像头拍摄的画面。至此,准备工作已完成,可以开始在APP中接入SDK。
笔者在网上找了一个集成了SDK的APP demo 源码,运行后正确设置了配置信息,也可以在手机上看到。该demo在以下资源3中可下载,主要给读者对比是否是读者正在使用的出错的demo。
资源下载地址:
1、SADPTool:(0积分)
http://download.csdn.net/detail/daijin888888/9258643
2、截止此博文发表前最新SDK包: (0积分,也可在官网的开发平台萤石开放平台下载最新包,需要注册开发者账号:https://open.ys7.com/sdk.html)
http://download.csdn.net/detail/daijin888888/9258673
3、网上找的集成过SDK的APP demo:(0积分,独立运行正常,但移植后报错)
http://download.csdn.net/detail/daijin888888/9258665
4、经过笔者更新SDK后的APP:(0积分,可直接下载使用,在3的基础上修改)
http://download.csdn.net/detail/daijin888888/9258633
GitHub(给个星杯~):https://github.com/VingeDai/HIKVISIONMonitor
3中的demo可以正常运行,但是移植到我的项目中就会报错,如下:
经多次尝试测试,发现是SDK版本问题。
解决办法:更换新的SDK。将以上资源3中的HCNetSDK.jar和PlayerSDK.jar移除,并导入以上资源2中的ezviz-openapi-android-sdk.jar和armeabi中的所有.so文件,此时会有一个方法报错:
//抓图回调函数
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, "移除显示回调失败!");
;
因为这个回调函数在新版本中被改写了,开发者只需重写新的onDisplay方法,并将旧的onDisplay方法体中的内容移动到新方法中,删掉旧onDisplay方法即可。
更改后:
//抓图回调函数
PlayerDisplayCB displayCB = new PlayerDisplayCB()
@Override
public void onDisplay(int arg0, byte[] 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, "移除显示回调失败!");
;
重新运行项目,即可成功获取画面。
修改后的demo见以上下载资源4。
请尊重原创,转载请注明出处:
http://blog.csdn.net/daijin888888/article/details/49763161
以上是关于海康摄像头视频调用出错,Jni Error(app bug): accessed stale local reference解决办法的主要内容,如果未能解决你的问题,请参考以下文章