我已经实现了帖子中的演示: 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
谁能给我一些线索来解决这个问题?