Android には、ネイティブ レベルのメディア再生エンジンである Stagefright が内蔵されています。これには、一般的なメディア形式に対応するソフトウェアベースのコーデックが組み込まれています。
Stagefright の音声と動画の再生機能には、OpenMAX コーデック、セッション管理、時間同期レンダリング、トランスポート制御、DRM との統合が含まれています。
Stagefright は、カスタム ハードウェア コーデックとの統合もサポートしています。メディアのエンコードとデコードにハードウェア パスを設定するには、ハードウェア ベースのコーデックを OpenMax IL(統合レイヤ)コンポーネントとして実装する必要があります。
注: Stagefright の更新は、Android の月次セキュリティ アップデートのプロセスと Android OS リリースの一部として行われます。
アーキテクチャ
メディア アプリは、次のアーキテクチャに従って Android のネイティブ マルチメディア フレームワークと通信します。

図 1:メディア アーキテクチャ
- アプリケーション フレームワーク
- アプリケーション フレームワーク レベルには、android.media API を利用してマルチメディア ハードウェアと通信するアプリケーション コードがあります。
- Binder IPC
- Binder IPC プロキシは、プロセスの境界を越えた通信を容易にします。
これらは
frameworks/av/media/libmediaディレクトリにあり、「I」の文字で始まります。 - ネイティブ マルチメディア フレームワーク
- Android はネイティブ レベルで、音声と動画の記録や再生に Stagefright エンジンを使用するマルチメディア フレームワークを提供します。Stagefright にはデフォルトでサポートされているソフトウェア コーデックがあります。また、OpenMax の統合レイヤ標準を使用して独自のハードウェア コーデックを実装できます。実装について詳しくは、
frameworks/av/mediaにある MediaPlayer コンポーネントと Stagefright コンポーネントをご覧ください。 - OpenMAX 統合レイヤ(IL)
- OpenMAX IL は、コンポーネントと呼ばれるカスタム ハードウェア ベースのマルチメディア コーデックを Stagefright が認識して使用するための標準化された方法を提供します。OpenMAX プラグインは、
libstagefrighthw.soという名前の共有ライブラリの形式で作成する必要があります。このプラグインは、Stagefright とカスタム コーデック コンポーネントをリンクしますが、このコンポーネントは OpenMAX IL コンポーネント標準に従って実装する必要があります。
カスタム コーデックを実装する
Stagefright には一般的なメディア形式用のソフトウェア コーデックが組み込まれていますが、独自のカスタム ハードウェア コーデックを OpenMAX コンポーネントとして追加することもできます。このためには、OMX コンポーネントと、カスタム コーデックを Stagefright フレームワークと一緒にフックする OMX プラグインを作成する必要があります。コンポーネントの例については hardware/ti/omap4xxx/domx/ を、Galaxy Nexus のサンプル プラグインについては hardware/ti/omap4xx/libstagefrighthw をご覧ください。
カスタム コーデックを追加するには:
- コンポーネントを OpenMAX IL コンポーネント標準に従って作成します。コンポーネント インターフェースは、
frameworks/native/include/media/OpenMAX/OMX_Component.hファイル内にあります。OpenMAX IL の仕様について詳しくは、OpenMAX のウェブサイトをご覧ください。 - 作成したコンポーネントと Stagefright サービスをリンクする OpenMAX プラグインを作成します。プラグインを作成するインターフェースについては、ヘッダー ファイル
frameworks/native/include/media/hardware/OMXPluginBase.hとHardwareAPI.hをご覧ください。 - 自作プロダクトの Makefile で、プラグインを
libstagefrighthw.soという名前の共有ライブラリとしてビルドします。次に例を示します。
LOCAL_MODULE := libstagefrighthw
デバイスの Makefile で、このモジュールが PRODUCT_PACKAGES の 一つとして宣言されていることを確認します。
PRODUCT_PACKAGES += \ libstagefrighthw \ ...
コーデックをフレームワークに公開する
Stagefright サービスは、system/etc/media_codecs.xml と system/etc/media_profiles.xml を解析し、デバイスでサポートされているコーデックとプロファイルを android.media.MediaCodecList および android.media.CamcorderProfile クラスを通じてアプリ デベロッパーに知らせます。両方のファイルを device/<company>/<device>/ ディレクトリに作成し、デバイスの Makefile でシステム イメージの system/etc ディレクトリにコピーする必要があります。次に例を示します。
PRODUCT_COPY_FILES += \ device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \ device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
完全な例については、device/samsung/tuna/media_codecs.xml と device/samsung/tuna/media_profiles.xml をご覧ください。
注: Android 4.1 以降、メディア コーデック用の <Quirk> 要素はサポートされなくなりました。