海康摄像头视频调用出错,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解决办法的主要内容,如果未能解决你的问题,请参考以下文章

sdk资源分配错误

C# 如何采集 视频和音频 如何调用摄像头获取图片

java如何通过海康威视SDK捕捉ip摄像头流?

海康威视手机远程监控设置教程

海康视频项目,java后台+前台web显示的,望提供思路!

海康大华等监控摄像头通过H5方式无插件低延时播放方案