2

我已经实现了帖子中的演示: 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

谁能给我一些线索来解决这个问题?

4

2 回答 2

0

我知道这有点旧,但我找到了解决这个问题的方法,代码运行良好,它是相机,FPS 可能设置为“可变”或“自动”。我使用的是 TrendNet TV-IP551WI,FPS 的默认设置是“自动”,我注意到程序可能会在 5 -15 秒后崩溃,我会收到非常错误的错误,我还注意到它非常生涩导致我相信fps是不对的。但是在将 fps 设置为固定速率后(不管选择一个,我选择了 20),错误应该会消失,并且不会再出现。

于 2014-06-14T05:39:32.320 回答
0

您可能想尝试将 mjpegview 的神经装配代码作为一个新的虚拟项目。这是相同的代码,但增加了增强功能。我遇到了同样的问题,然后通过一些调整尝试了他的代码,它就像一个魅力。

另外,如果您在构建 gradle 时遇到ndk_project_path=null ,请在android标签内的build.gradle中添加以下代码块:

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

希望这对其他人有所帮助。

于 2014-10-27T02:17:18.173 回答