Android и MJPEG с java.lang.IllegalArgumentException

Я реализовал демонстрацию из сообщения: Android и MJPEG

Но через некоторое время в приложении всегда возникает ошибка, и я получил исключение:

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

Может ли кто-нибудь дать мне некоторые подсказки, чтобы решить эту проблему?


person Indiana    schedule 27.09.2012    source источник
comment
Здравствуйте @Indiana, вы решили эту проблему? Я получаю то же исключение...   -  person woyaru    schedule 24.03.2014
comment
Используйте эту ссылку stackoverflow.com/questions/10550139 /   -  person Kamlesh Kumar Verma    schedule 20.11.2014


Ответы (2)


Я знаю, что это немного устарело, но я нашел решение этой проблемы, код работает отлично, это камера, FPS, вероятно, установлен на «переменный» или «авто». Я использовал TrendNet TV-IP551WI, и настройка по умолчанию была «автоматической» для FPS, и я заметил, что примерно через 5–15 секунд программа вылетает, и я получаю ту самую ошибку, я также заметил, что это было очень рывками, что привело меня верить, что fps был неправильным. Но после установки фиксированной скорости кадров в секунду (неважно, что просто выберите один, я выбрал 20) ошибка должна исчезнуть, и она больше не должна появляться.

person Shamikul Amin    schedule 14.06.2014

Вы можете попробовать код neuralassembly для 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'
}

Надеюсь, это поможет другим людям.

person Izwan Akhirruddin    schedule 27.10.2014