Androidは、デフォルトで多くのメディアファイル形式(.mkvなどのファイル)をサポートしていません。ただし、MXPlayerやMoboPlayerなどのプレーヤーを使用すると、このようなファイルを再生できます。これらのアプリケーションはどのように機能しますか?それがどのように行われるかを説明するプログラミングチュートリアルや記事はありますか?
1 に答える
Androidは、デフォルトですべてのメディア形式をサポートしているわけではありません。したがって、サポートされていない形式をサポートするために、MoboPlayerなどのアプリケーションは、JNIを介してJavaとネイティブコードの組み合わせを使用して、標準のメディアプレーヤータスクを実行します。
詳細を理解するために、メディアプレーヤーがメディアファイルを再生するために何をするか、そしてこれらがAndroidのアプリのようなMoboPlayerによってどのように実行されるかを見てみましょう。
Typical tasks of a Media Player
プレーヤーは次のタスクを実行する必要があります(a)ファイル形式をデマルチプレクサしてビデオ/オーディオを抽出します(b)ビデオとオーディオをデコードします(c)ビデオを表示してオーディオを再生します。MoboPlayerのようなプレーヤーの場合、これら3つの領域をどのように処理できるかを考えてみましょう。
File format Demux
Androidは、デフォルトですべてのファイル形式コンテナをサポートしているわけではありません。たとえば、ASF(WMVファイルのファイル形式)はサポートされていません。したがって、プレイヤーはその仕事をするためにそれ自身のデマルチプレクサを持っている必要があります。libavformat(FFMPEGで使用)は、主要なオープンソースのdemuxライブラリです。
Video/Audio decode
libavcodec(FFMPEGで使用)は、デマックスされたストリームをデコードし、非圧縮のraw出力フレームを生成する主要なオープンソースデコーダライブラリです。したがって、MoboPlayerのようなプレーヤーによってよく使用されます。
Video display
ビデオを表示するには2つのオプションがあります。プレーヤーは、 SurfaceView
バッファーまたはOpenGLアクセラレーションバッファーのいずれかを使用します。Androidは、Java Surfaceオブジェクトのキャスト(基になるサーフェスフリンガーオブジェクトの抽象化)を、と呼ばれる内部ネイティブオブジェクトに提供します。このオブジェクトNativeWindow
には、ネイティブコードからアクセスできます。
SurfaceTexure
ICS(Android 4.0)以降、AndroidはOpenGLアクセラレーションバッファ(および)へのアクセスも提供しますTextureView
。これらは、ビデオの表示にも使用できます。
Audio playout
AudioTrack
プレーヤーは、Javaレベルで提供されるオブジェクトと直接対話して、デコードされたオーディオサンプルを再生できます。