0

JB の Hardware Media Codec を使用しています。ビデオをエンコードしてデコードし、コーデックを使用して表示しようとしています (ビデオ/AVC 形式)...

ビデオのレンダリングを「開始」および「停止」するために 2 つのボタンを使用しています。初めて、ビデオをレンダリングすると、正しく表示されます。ビデオを 2 回目に開始すると、ビデオが表示されず、次のエラーがスローされます。

「AVIモードではありません」

開始ボタンと停止ボタンのコード スニペットをコピーして貼り付けます。

     public void Stop(){
    try {
        //stopping the decoder alone
        decoderMediaCodec.flush();
        decoderMediaCodec.stop();
        decoderMediaCodec.release();
         //Tried with various combination of flush(), stop() and release();
    } catch (Exception e) {
        e.printStackTrace();
    }

    public void Start(Surface view){
    try {
        decoderMediaCodec = MediaCodec.createDecoderByType(mime);//Initialize the decoder again
        MediaFormat format = MediaFormat.createVideoFormat(mime, mWidth, mHeight);
        format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
        format.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
        format.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat);
        format.setInteger(MediaFormat.KEY_FRAME_RATE, framerate);
        decoderMediaCodec.configure(format, view, null, 0);
        decoderMediaCodec.start();


    } catch (Exception e) {
        e.printStackTrace();
    }
}

ビデオのレンダリングを手伝ってください。

注 : デコーダーで受信したデータは有効です...データは、Beyond Compare ツールを使用してチェックされます

outputBufferIndex に -1 を取得しています

    int outputBufferIndex = decoderMediaCodec.dequeueOutputBuffer(bufferInfo, 0);

ログで私が得る

E/( 271):

E/( 271):avi モードではない

E/( 271):

E/( 271): avi モードではありません

4

1 に答える 1

0

問題が発生したときに、より多くのログを共有できれば便利です。問題の説明から、2回目の呼び出しSurfaceで渡されたものが有効なハンドルであることを確認できますか?Start

Androidを再構築できる場合は、ログトレースを有効にすることで、特に方法Mediacodec.cppが役立つでしょう。Mediacodec::setNativeWindow

PS:デコーダーの場合、Iフレーム間隔、ビットレート、フレームレートが設定されているのはなぜですか?

于 2013-02-09T00:02:15.143 に答える