Android MediaCodec dekodiert h264 rohen Rahmen

8

Ich verwende die Android MediaCodec-API, um h264-Frames zu decodieren. Ich konnte die Frames in der Ansicht decodieren und rendern. Mein Problem ist, dass der Decoder viele Frames verpasst, besonders die ersten Frames. DecodeMediaCodec.dequeueOutputBuffer () gibt -1 zurück. aÜber 150 h264 Bilder, gerade entschlüsselt 43 Bilder. Ich kann nicht finden, wo das Problem ist. Hier sind meine Codes.

%Vor%

Nach dem Start des Decoders starte ich den Decoder-Thread.

%Vor%

Weiß jemand warum? Ich hoffe deine Hilfe.Mein Android-Gerät ist Nexus 7.

    
Read Mark 17.01.2014, 09:28
quelle

1 Antwort

5

-1 von MediaCodec#dequeueOutputBuffer() zurück zu bekommen ist normal. Es bedeutet nur, dass es noch keine Ausgabe bereit hat.

Es ist nicht der Fall, dass Sie MediaCodec einem Puffer codierter Daten übergeben und sofort einen decodierten Puffer zurückbekommen. Sie übergeben es einem Datenpuffer, der an den mediaserver -Prozess gesendet wird, der ihn in den Hardware-AVC-Decoder einspeist, der immer noch initialisiert werden kann oder vielleicht nur auf ein paar Frames sitzt. Wenn der Decodiervorgang abgeschlossen ist, werden die decodierten Daten durch mediaserver an Ihren App-Prozess zurückgegeben.

Der Trick ist, dass der Aufruf queueInputBuffer() sofort zurückkehrt. Im Normalbetrieb läuft die Eingangsseite des Decoders einige Frames vor der Ausgangsseite. Wenn Sie mit der Eingabe fertig sind, legen Sie das Flag für das Ende des Streams fest. Wenn Sie sehen, dass EOS auf die Ausgabe gesetzt ist, wissen Sie, dass Sie das Ende erreicht haben.

Sie finden verschiedene Arbeitsbeispiele auf bigflake und in Grafika . Die Beispiele DecodeEditEncodeTest und EncodeDecodeTest arbeiten ausschließlich mit Raw H.264, die anderen verwenden MediaExtractor und MediaMuxer , um MP4-Wrapper zu verarbeiten.

    
fadden 17.01.2014 15:59
quelle

Tags und Links