最近、ビデオデコーダーを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コア登録
コンポーネントを作成し、正しいファクトリ メソッドが呼び出されるようにするには、コアをフレームワークに登録する必要がある場合があります。OMXStagefright
新しいコアを登録するには、エンド システムlibstagefrighthw.soに配置されるという名前の新しいライブラリを作成する必要があります。このライブラリは、 によって参照されるシンボルを/system/lib公開する必要があります。createOMXPlugindlsym
OMXしたがって、コアの登録は次のようになりOMXMasterます。では、などの他の関数ポインタが初期化されるものを使用して が検索されます。addVendorPluginaddPlugin("libstagefrighthw.so")addPlugincreateOMXPluginmakeComponentInstancedestroyComponentInstance
コアが初期化されるOMXと、Android フレームワーク内で独自のコンポーネントを実行する準備が整います。のリファレンスはOMXMasterここにあります。
これらの変更により、ビデオ デコーダーが android stagefright フレームワークに統合されます。