2

投稿からデモを実装しました: Android and MJPEG

しかし、しばらくするとアプリケーションで常にエラーが発生し、例外が発生しました。

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

class の次のコード内MjpegViewThread:

public void run() {
    開始 = System.currentTimeMillis();
    PorterDuffXfermode モード = 新しい PorterDuffXfermode(PorterDuff.Mode.DST_OVER);
    ビットマップ bm;
    int 幅;
    整数の高さ;
    Rect destRect;
    キャンバス c = null;
    ペイント p = 新しいペイント();
    文字列 fps = "";
    while (mRun)
    {
        if(表面完了)
        {
            試す
            {
                c = mSurfaceHolder.lockCanvas();
                同期 (mSurfaceHolder)
                {
                    試す
                    {
                        bm = mIn.readMjpegFrame();
                        destRect = destRect(bm.getWidth(),bm.getHeight());
                        c.drawColor(Color.BLACK);
                        c.drawBitmap(bm, null, destRect, p);
                        if(showFps) {
                            p.setXfermode(モード);
                            if(ovl != null) {
                                高さ = ((ovlPos & 1) == 1) ? destRect.top : destRect.bottom-ovl.getHeight();
                                幅 = ((ovlPos & 8) == 8) ? destRect.left : destRect.right -ovl.getWidth();
                                c.drawBitmap(ovl, width, height, 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 を一時停止しました。
    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を固定レートに設定した後(1つを選択しても問題ありません。私は20を選択しました)、エラーはなくなり、もうスパズすることはありません。

于 2014-06-14T05:39:32.320 に答える
0

新しいダミー プロジェクトとして、mjpegview 用の neuroassembly のコードを試してみてください。これは同じコードですが、拡張機能が追加されています。私は同じ問題を抱えていたので、彼のコードをいくつか調整して試してみましたが、それは魅力のように機能します。

さらに、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 に答える