Android MediaPlayer に関するメモ

Android で音楽や動画を再生するときに必要な MediaPlayer だけど、直に JNI に処理を吸い込まれていってデバッグしづらいので、 AOSP ネイティブ実装を追い掛けてみた。

TP Vision の資料 (以下の図) がわかりやすすぎて、あんま調べる意味がなかった感じもする。

Android builders summit - The Android media framework (PDF)

Application

JNI

libmedia

https://android.googlesource.com/platform/frameworks/av/+/android-5.1.1_r18/media/libmedia

MediaPlayerService

libmedia で ServiceManager 経由で呼び出された "media.player" サービスは libmediaplayerservice に実体がある。

libmediaservice (MediaPlayerService)

https://android.googlesource.com/platform/frameworks/av/+/android-5.1.1_r18/media/libmediaplayerservice/

libstagefright (Stagefrihgt)

Stagefright の役割はだいたい以下のような感じ、パースとレンダリングをやって、デコード処理とかは OMX (OpenMAX) を通じてハードウェアにやらせている。

Integrating a Hardware Video Codec into Android Stagefright using OpenMAX IL (PDF)

AwesomePlayer#prepareAsync

NuPlayer

https://android.googlesource.com/platform/frameworks/av/+/android-5.1.1_r18/media/libmediaplayerservice/nuplayer/

用語集

参考リンク

所感

追記 (2015/9/15)

Git の参照しているブランチが master だったので MediaPlayer まわりにコミットがあるとだんだんこの解説と乖離してしまいそう。ということで、 2015/9/15 現在で最新の android-5.1.1_r18 というタグに変更した。