6

Android 2.3以降でレイヤーからストリームlibstagefright.soをデコードするために直接アクセスする方法はありますか?H.264JNI

4

1 に答える 1

11

目的がエレメンタリ ストリームをデコードすることである場合H.264、コードはストリームが抽出され、codec-specific-data主にコーデックに提供され、SPSデータPPSとフレーム データがタイムスタンプと共にコーデックに提供されることを保証する必要があります。すべてのAndroidバージョンで、最も一般的なインターフェイスは、基になるコンポーネントOMXCodecの抽象化です。OMX

Gingerbread (Android 2.3) および ICS (Android 4.0.0) では、デコーダを作成する場合、OMXCodecコンポーネントを作成し、インターフェイスを介してコードを抽象化するのが最善の方法MediaSourceです。つまり、ラッパー コードは次のようにモデル化されMediaSource、からOMXCodec 読み取られます。このソースとデコードを実行します。

Android 2.3 ビデオ デコーダの作成へのリンク: http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

Android 4.0.0 ビデオ デコーダの作成へのリンク: http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

主な課題は次のとおりです。

  1. 入力を としてモデル化しますMediaSource

  2. ラッパー コードを読み取り、コーデックからバッファを読み取り、それを処理してコーデックに解放します。

簡単にするために、 http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233stagefrightのようにコマンドライン実行可能コードを見ることができます

ただし、プログラムが JellyBean (Android 4.1.x、4.2.x) 以降に基づいている場合、これらは少し単純化されています。MediaCodecJNI コードからコンポーネントを作成し、それをデコードに使用できます。同じものをプログラムに統合するには、 http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316SimplePlayerのように実装を参照できます

于 2013-04-22T16:30:00.603 に答える