2012-03-11 16 views
11

Androidは、デフォルトでは多くのメディアファイル形式(.mkvなどのファイル)をサポートしていません。しかし、MXPlayerやMoboPlayerのようなプレーヤーでは、このようなファイルを再生することができます。これらのアプリケーションはどのように機能しますか? プログラミングのチュートリアルや記事の仕方を説明していますか?MXPlayerやMoboPlayerなどのMedia PlayerのAndroidアプリは、MKVなどのサポートされていないファイル形式をどのように再生しますか?

+0

mkvは単なるコンテナです。あなたは内部に多くの異なるビデオ/オーディオコーデックを使用することができます... – Goddchen

答えて

10

Androidはデフォルトですべてのメディア形式をサポートしているわけではありません。したがって、サポートされていないフォーマットをサポートするために、MoboPlayerのようなアプリケーションは、JNIを介してJavaとネイティブコードの組み合わせを使用して標準のメディアプレーヤータスクを実行します。

さらに詳しく知りたい場合は、メディアプレーヤーがメディアファイルを再生する方法と、AndroidのアプリのようなMoboPlayerでメディアファイルを再生する方法を見てみましょう。

Typical tasks of a Media Player

プレイヤーは、(b)は、ビデオおよびオーディオ(c)は、映像を表示し、音声を再生するデコードファイル形式DEMUX、次のタスク(A)を実行し、ビデオ/オーディオを抽出する必要があります。 MoboPlayerのようなプレーヤーの場合、これらの3つの領域をどのように処理できるかを考えてみましょう。

File format Demux

のAndroidは、デフォルトでは、すべてのファイル形式のコンテナをサポートしていません。たとえば、ASF(WMVファイルのファイル形式)はサポートされていません。したがって、プレーヤーは仕事をするためにそれ自身のデマルチプレクサを持つ必要があります。 libavformat(FFMPEGで使用)は、オープンソースの主要なデモライブラリです。 (FFMPEGで使用)

Video/Audio decode

libavcodecのはたデマルチプレクサストリームをデコードし、非圧縮の生の出力フレームを生成する主要なオープンソースデコーダライブラリです。したがって、MoboPlayerのようなプレイヤーがよく使用します。

Video display

映像を表示するための2つのオプションがあります。プレイヤーはSurfaceViewバッファーまたはOpenGLアクセラレーテッドバッファーを使用します。 Androidは、内部のネイティブオブジェクトNativeWindowにjava Surfaceオブジェクト(基底のサーフェスオブジェクトオブジェクトの抽象化)のキャストを提供します。このオブジェクトはネイティブコードでアクセスできます。

Androidは、OpenGLアクセラレーションされたバッファ(SurfaceTexureおよびTextureView)にもアクセスできます。これらは、ビデオを表示するためにも使用できます。

Audio playout

プレイヤーが直接デコードされたオーディオサンプルを再生するには、Javaレベルで提供AudioTrackオブジェクトと対話することができます。

+1

OakBytesが正しいです。これらのプレーヤーは、サードパーサー/ソフトウェアデコーダを使用しています(専有またはFFMPEG)。 一部のプレーヤーは、表示にもopenglを使用しています。それらの大部分はSuraceViewを使用し、ネイティブの相手NativeWindowはデコードされたビデオを表示します。 これはネイティブフレームワークなしで動作し、それと並行して動作します。したがって、moboplayerは、ソフトウェアまたはハードウェアデコーダを使用するオプションも提供します。 – peasea

関連する問題