我已经实现了帖子中的演示: Android and MJPEG
但是应用程序总是在一段时间后出现错误,我得到了异常:
java.lang.IllegalArgumentException: Invalid Unicode sequence: illegal character
在类中的以下代码中MjpegViewThread
:
公共无效运行(){ 开始 = System.currentTimeMillis(); PorterDuffXfermode 模式 = 新 PorterDuffXfermode(PorterDuff.Mode.DST_OVER); 位图 bm; 整数宽度; 整数高度; 矩形 destRect; 画布 c = null; 油漆 p = 新油漆(); 字符串 fps = ""; 而(mRun) { 如果(表面完成) { 尝试 { c = mSurfaceHolder.lockCanvas(); 同步(mSurfaceHolder) { 尝试 { bm = mIn.readMjpegFrame(); destRect = destRect(bm.getWidth(),bm.getHeight()); c.drawColor(Color.BLACK); c.drawBitmap(bm, null, destRect, p); 如果(showFps){ p.setXfermode(模式); 如果(ovl!= null){ 高度 = ((ovlPos & 1) == 1) ?destRect.top : destRect.bottom-ovl.getHeight(); 宽度 = ((ovlPos & 8) == 8) ?destRect.left : destRect.right -ovl.getWidth(); c.drawBitmap(ovl, 宽度, 高度, null); } p.setXfermode(null); 帧计数器++; if((System.currentTimeMillis() - 开始) >= 1000) { fps = String.valueOf(frameCounter)+"fps"; 帧计数器 = 0; 开始 = System.currentTimeMillis(); ovl = makeFpsOverlay(overlayPaint, fps); } } } 捕获(IOException e) { Log.i(TAG, "错误: "+e); } } } 捕获(异常 e) { Log.i(TAG, "错误: "+e); } 最后 { 如果 (c != null) mSurfaceHolder.unlockCanvasAndPost(c); } } } }
我不确定以下 LogCat 信息是否有用。
09-27 17:06:36.645: D/dalvikvm(10120): threadid=9: 撤消后仍然挂起 (sc=1 dc=1) 09-27 17:06:46.745: D/dalvikvm(10120): GC_EXTERNAL_ALLOC 释放 132K,47% 释放 2998K/5575K,外部 1625K/2137K,暂停 44ms 09-27 17:06:46.825: D/dalvikvm(10120): GC_EXTERNAL_ALLOC 释放 65K, 47% 释放 2997K/5639K, 外部 2227K/2779K, 暂停 27ms 09-27 17:06:46.955: D/dalvikvm(10120): GC_EXTERNAL_ALLOC 释放 127K,48% 释放 2997K/5703K,外部 2827K/2827K,暂停 40ms 09-27 17:06:47.385: D/dalvikvm(10120): GC_EXTERNAL_ALLOC 释放 142K,48% 释放 3000K/5703K,外部 2827K/2827K,暂停 31ms 09-27 17:06:47.515: D/dalvikvm(10120): GC_EXTERNAL_ALLOC 释放 131K,48% 释放 2997K/5703K,外部 2827K/2827K,暂停 27ms 09-27 17:06:47.615: D/dalvikvm(10120): GC_EXTERNAL_ALLOC 释放 127K,48% 释放 2997K/5703K,外部 2827K/2827K,暂停 31ms
谁能给我一些线索来解决这个问题?