Android 2.3以降でレイヤーからストリームlibstagefright.so
をデコードするために直接アクセスする方法はありますか?H.264
JNI
1 に答える
目的がエレメンタリ ストリームをデコードすることである場合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
主な課題は次のとおりです。
入力を としてモデル化します
MediaSource
。ラッパー コードを読み取り、コーデックからバッファを読み取り、それを処理してコーデックに解放します。
簡単にするために、 http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233stagefright
のようにコマンドライン実行可能コードを見ることができます
ただし、プログラムが JellyBean (Android 4.1.x、4.2.x) 以降に基づいている場合、これらは少し単純化されています。MediaCodec
JNI コードからコンポーネントを作成し、それをデコードに使用できます。同じものをプログラムに統合するには、 http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316SimplePlayer
のように実装を参照できます