2012-09-27 52 views
2

我已经实现了从岗位演示: Android and MJPEGAndroid和MJPEG与java.lang.IllegalArgumentException异常

但是,应用程序总是一段时间后会出现错误后,我得到了异常:

java.lang.IllegalArgumentException: Invalid Unicode sequence: illegal character 

MjpegViewThread类下面的代码中:

 

public void run() { 
    start = System.currentTimeMillis(); 
    PorterDuffXfermode mode = new PorterDuffXfermode(PorterDuff.Mode.DST_OVER); 
    Bitmap bm; 
    int width; 
    int height; 
    Rect destRect; 
    Canvas c = null; 
    Paint p = new Paint(); 
    String fps = ""; 
    while (mRun) 
    { 
     if(surfaceDone) 
     { 
      try 
      { 
       c = mSurfaceHolder.lockCanvas(); 
       synchronized (mSurfaceHolder) 
       { 
        try 
        { 
         bm = mIn.readMjpegFrame(); 
         destRect = destRect(bm.getWidth(),bm.getHeight()); 
         c.drawColor(Color.BLACK); 
         c.drawBitmap(bm, null, destRect, p); 
         if(showFps) { 
          p.setXfermode(mode); 
          if(ovl != null) { 
           height = ((ovlPos & 1) == 1) ? destRect.top : destRect.bottom-ovl.getHeight(); 
           width = ((ovlPos & 8) == 8) ? destRect.left : destRect.right -ovl.getWidth(); 
           c.drawBitmap(ovl, width, height, null); 
          } 
          p.setXfermode(null); 
          frameCounter++; 
          if((System.currentTimeMillis() - start) >= 1000) { 
           fps = String.valueOf(frameCounter)+"fps"; 
           frameCounter = 0; 
           start = System.currentTimeMillis(); 
           ovl = makeFpsOverlay(overlayPaint, fps); 
          } 
         } 
        } 
        catch (IOException e) 
        { 
         Log.i(TAG, "Error: "+e); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Log.i(TAG, "Error: "+e); 
      } 
      finally 
      { 
       if (c != null) 
        mSurfaceHolder.unlockCanvasAndPost(c); 
      } 
     } 
    } 
} 

我不知道下面的logcat是否通知有帮助。

 

    09-27 17:06:36.645: D/dalvikvm(10120): threadid=9: still suspended after undo (sc=1 dc=1) 
    09-27 17:06:46.745: D/dalvikvm(10120): GC_EXTERNAL_ALLOC freed 132K, 47% free 2998K/5575K, external 1625K/2137K, paused 44ms 
    09-27 17:06:46.825: D/dalvikvm(10120): GC_EXTERNAL_ALLOC freed 65K, 47% free 2997K/5639K, external 2227K/2779K, paused 27ms 
    09-27 17:06:46.955: D/dalvikvm(10120): GC_EXTERNAL_ALLOC freed 127K, 48% free 2997K/5703K, external 2827K/2827K, paused 40ms 
    09-27 17:06:47.385: D/dalvikvm(10120): GC_EXTERNAL_ALLOC freed 142K, 48% free 3000K/5703K, external 2827K/2827K, paused 31ms 
    09-27 17:06:47.515: D/dalvikvm(10120): GC_EXTERNAL_ALLOC freed 131K, 48% free 2997K/5703K, external 2827K/2827K, paused 27ms 
    09-27 17:06:47.615: D/dalvikvm(10120): GC_EXTERNAL_ALLOC freed 127K, 48% free 2997K/5703K, external 2827K/2827K, paused 31ms 

任何人都可以给我一些线索来解决这个问题吗?

+0

你好@Indiana,你有没有解决这个问题?我得到相同的例外... – woyaru

+0

使用此链接 http://stackoverflow.com/questions/10550139/android-ics-and-mjpeg-using-asynctask –

回答

0

我知道这是有点老了,但我发现这个问题的解决方案,代码完美的作品,它是摄像头,FPS可能是设置为“可变”或“自动”。我使用的是趋势TV-IP551WI和默认设置为“自动”为FP​​S,也许5 -15sec程序后,我发现会崩溃,我会得到那个非常错误,我也注意到,这是非常生涩,害得我相信fps是不对的。但设置FPS为固定利率后(不要紧,只是选择一个,我选20)的错误应该消失,它不应该怪人出来了。

0

你可能想尝试neuralassembly's code for mjpegview作为一个新的虚拟项目。 这是相同的代码,但增加了增强功能。 我有那么同样的问题,尽自己的代码一些调整,它的工作原理就像一个魅力。

另外,如果你遇到ndk_project_path = NULL而gradle这个正在建设中,的build.gradle添加下面这段代码块的的Android标签中:

buildTypes { 
    release { 
     runProguard false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
sourceSets.main { 
    jni.srcDirs = [] 
    jniLibs.srcDir 'src/main' 
} 

希望这有助于其他人。

相关问题