1

Android でビデオを抽出、デコード、編集、エンコード、および多重化する機能を追加しようとしています。したがって、Android CTS ExtractDecodeEditEncodeMuxTestの一部である非常に便利な実装を見つけました。残念ながら、コードはテストケースの一部として実行された場合にのみ機能します。通常のアクティビティから実行して取得しようとしました:

E/ExtractDecodeEditEncodeMuxTest (18781): java.lang.IllegalStateException: マルチプレクサの停止に失敗しました

W/System.err(18781): java.lang.RuntimeException: Surface フレームの待機がタイムアウトしました W/System.err(18781): at ...OutputSurface.awaitNewImage(OutputSurface.java:216)

出力サーフェスがフレームを受信しない理由はありますか?

更新: 動作中のテスト ケースと動作していない実装のログ ファイルは次のとおりです。両方のコードはまったく同じです。唯一の違いは、動作中のものは AndroidTestCase であり、もう 1 つは IntentService 内のアプリケーションで実行されていることです。

約 6 フレーム後に抽出とデコードがすべて停止するようです。何か案は?

作業中のテストケースのログ出力

非稼働ログ出力

4

2 に答える 2

1

fadden に感謝します。この問題を解決できました。私は現在インテントサービスを使用しており、ルーパーなしでスレッドを開始しています。これは正常に機能します。

Android サービスでコードを実行するには、ラッピング スレッドをカスタム スレッドから開始する必要があります。スレッド内でスレッドを開始することはおそらく最善の解決策ではありませんが、実際には問題を解決します。

于 2014-07-15T05:07:19.840 に答える
1

おそらく、別のスレッドで実行する必要があります

    public static void runTest(ExtractDecodeEditEncodeMuxTest test) throws Throwable {
        test.setOutputFile();
        TestWrapper wrapper = new TestWrapper(test);
        Thread th = new Thread(wrapper, "codec test");
        th.start();
        th.join();
        if (wrapper.mThrowable != null) {
            throw wrapper.mThrowable;
        }
    }
于 2014-07-14T10:07:59.403 に答える