我在安卓app中,采用采用海康相机预览视频,采用硬解码,运行5分钟后,就报如下错误:
A/art: art/runtime/indirect_reference_table.cc:98] JNI ERROR (app bug): weak global reference table overflow (max=51200)
art/runtime/indirect_reference_table.cc:98] weak global reference table dump:
art/runtime/indirect_reference_table.cc:98] Last 10 entries (of 51200):
art/runtime/indirect_reference_table.cc:98] 51199: 0x1319a220 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51198: 0x1319a1c0 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51197: 0x1319a160 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51196: 0x1319a100 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51195: 0x130f8fa0 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51194: 0x130f8f40 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51193: 0x130f8ee0 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51192: 0x130f8e80 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51191: 0x130f8e20 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] 51190: 0x130f8dc0 java.lang.Thread
art/runtime/indirect_reference_table.cc:98] Summary:
art/runtime/indirect_reference_table.cc:98] cleared jweak (count=0)
art/runtime/indirect_reference_table.cc:98] 1 of java.lang.Thread
art/runtime/indirect_reference_table.cc:98] cleared jweak (count=0)
art/runtime/indirect_reference_table.cc:98] 3 of android.media.MediaCodec (3 unique instances)
art/runtime/indirect_reference_table.cc:98] 4512 of java.lang.Class (4512 unique instances)
art/runtime/indirect_reference_table.cc:98] 1 of java.lang.ThreadGroup
art/runtime/indirect_reference_table.cc:98] 933 of java.lang.Thread (933 unique instances)
art/runtime/indirect_reference_table.cc:98]
E/相机播放SDK:: inputData failed with: 11, i:0
E/相机播放SDK:: inputData failed with: 11, i:0
E/相机播放SDK:: inputData failed with: 11, i:0
E/相机播放SDK:: inputData failed with: 11, i:100
E/相机播放SDK:: inputData failed with: 11, i:100
E/相机播放SDK:: inputData failed with: 11, i:100
E/相机播放SDK:: inputData failed with: 11, i:200
E/相机播放SDK:: inputData failed with: 11, i:200
E/相机播放SDK:: inputData failed with: 11, i:200
E/相机播放SDK:: inputData failed with: 11, i:300
E/相机播放SDK:: inputData failed with: 11, i:300
E/相机播放SDK:: inputData failed with: 11, i:300
E/相机播放SDK:: inputData failed with: 11, i:400
E/相机播放SDK:: inputData failed with: 11, i:400
E/相机播放SDK:: inputData failed with: 11, i:400
E/相机播放SDK:: inputData failed with: 11, i:500
I/HCNetSDK: 2021-10-19 10:01:33.987 ID-IP-CHAN[0-192.168.1.66-1] [CGetStreamBase::DoExchange] recv timeout[2], m_bReConnecting[0], maxtimes[6]!
I/HCNetSDK: 2021-10-19 10:01:33.987 ID-IP-CHAN[1-192.168.1.64-1] [CGetStreamBase::DoExchange] recv timeout[2], m_bReConnecting[0], maxtimes[6]!
I/HCNetSDK: 2021-10-19 10:01:33.988 ID-IP-CHAN[2-192.168.1.65-1] [CGetStreamBase::DoExchange] recv timeout[2], m_bReConnecting[0], maxtimes[6]!
E/art: Unexpected time out during dump checkpoint.
A/art: art/runtime/barrier.cc:89] Check failed: !count_ Attempted to destroy barrier with non zero count
A/art: art/runtime/runtime.cc:298] Runtime aborting --- recursively, so no thread-specific detail!
art/runtime/runtime.cc:298]
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 8063 (Thread-46930)
硬解码部分代码,显示视频直接采用的surfaceview
private void processRealData(int iPlayViewNo, int iDataType, byte[] pDataBuffer, int iDataSize, int iStreamMode) {
if (HCNetSDK.NET_DVR_SYSHEAD == iDataType) {
if (m_iPort >= 0) {
return;
}
m_iPort = Player.getInstance().getPort();
if (m_iPort == -1) {
Log.e(TAG, "getPort is failed with: " + Player.getInstance().getLastError(m_iPort));
return;
}
Log.i(TAG, "getPort succ with: " + m_iPort);
if (iDataSize > 0) {
if (!Player.getInstance().setStreamOpenMode(m_iPort, iStreamMode)) //set stream mode
{
Log.e(TAG, "setStreamOpenMode failed");
return;
}
if (!Player.getInstance().openStream(m_iPort, pDataBuffer, iDataSize, 4 * 1024 * 1024)) //open stream
{
Log.e(TAG, "openStream failed");
return;
}
if(bCheckHD)
{
Player.getInstance().setHardDecode(m_iPort, 1);
}
while (!m_bSurfaceCreated) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.i(TAG, "wait 100 for surface, handle:" + iPlayViewNo);
}
if (!Player.getInstance().play(m_iPort, getHolder())) {
Log.e(TAG, "play failed,error:" + Player.getInstance().getLastError(m_iPort));
return;
}
}
} else {
for (int i = 0; i < 2000; i++) {
if (!Player.getInstance().inputData(m_iPort, pDataBuffer, iDataSize)) {
Log.e(TAG, "inputData failed with: " + Player.getInstance().getLastError(m_iPort));
} else {
break;
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
请问报错为jni 弱引用表溢出,要怎么解决呢?