最近、ビデオデコーダーをAndroidに移植しました。また、サーフェスビューに出力をダンプし、ネイティブ API を使用して出力を確認しました。次のタスクは、再生、一時停止、ストリーミングなど、つまりメディア プレーヤーのその他の機能を実装することです。これらの機能はすべて android マルチメディア フレームワークで既に定義されているため、これを行うと手直しが必要になります。デコーダーをプラグインとして作成し、Android のマルチメディア フレームワークに統合できると聞きました。同じことについてグーグルで検索しましたが、同じことに関する情報はほとんど見つかりませんでした。したがって、上記の問題に対するいくつかの関連リンクまたは解決策を提案するよう読者にお願いします。お返事をお待ちしております。
1 に答える
Android SF フレームワークでは、コーデックは を通じて登録されますmedia_codecs.xml
。標準の Android ディストリビューションでは、例をここmedia_codecs.xml
で見つけることができます。すべての視聴覚コンポーネントは、コンポーネントとして登録されます。OMX
1.コーデック登録
ビデオ デコーダーを登録するには、<Decoders>
リストの下に新しいエントリを追加する必要があります。MIME
コーデックが常に選択されるようにするには、コーデックが特定のタイプの最初のエントリとしてリストされていることを確認してください。H.264 デコーダのエントリの例は次のようになります。
<Decoders>
<MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" >
<Quirk name="requires-allocate-on-input-ports" />
<Quirk name="requires-allocate-on-output-ports" />
</MediaCodec>
<MediaCodec name="OMX.google.h264.decoder" type="video/avc" />
どこ、
を。OMX.ABC.XYZ.H264.Decoder
コンポーネントの名前です
b. video/avc
コンポーネントのMIME
タイプです。この例では、AVC / H.264ビデオ デコーダーを示します。
c.次の 2 つのステートメントは、コンポーネントのquirks
または特別な要件を示します。与えられた例では、コンポーネントがすべての入力ポートにバッファーを割り当てることを好むことをフレームワークにrequires-allocate-on-input-ports
示します。Stagefright
同様に、もう 1 つquirk
は、コンポーネントもその出力ポートに割り当てることを好むことを通知します。システムでサポートされているリストについては、OMXCodec.cppファイルquirks
の関数を参照できます。これらの癖はフラグに変換され、フレームワークによって読み取られてコンポーネントが作成および初期化されます。OMXCodec::getComponentQuirks
例の図では、 Google が実装するデフォルトのビデオ デコーダOMX
の前にコンポーネントが登録されていることが示されています。
注: エンド デバイスでこれを試す場合は、このエントリが最終media_codecs.xml
ファイルに反映されていることを確認する必要があります。
2.OMXコア登録
コンポーネントを作成し、正しいファクトリ メソッドが呼び出されるようにするには、コアをフレームワークに登録する必要がある場合があります。OMX
Stagefright
新しいコアを登録するには、エンド システムlibstagefrighthw.so
に配置されるという名前の新しいライブラリを作成する必要があります。このライブラリは、 によって参照されるシンボルを/system/lib
公開する必要があります。createOMXPlugin
dlsym
OMX
したがって、コアの登録は次のようになりOMXMaster
ます。では、などの他の関数ポインタが初期化されるものを使用して が検索されます。addVendorPlugin
addPlugin("libstagefrighthw.so")
addPlugin
createOMXPlugin
makeComponentInstance
destroyComponentInstance
コアが初期化されるOMX
と、Android フレームワーク内で独自のコンポーネントを実行する準備が整います。のリファレンスはOMXMaster
ここにあります。
これらの変更により、ビデオ デコーダーが android stagefright フレームワークに統合されます。