良い例は、ビデオの再生を実装するために必要な小さなプロジェクトです。 任意の形式とコーデックを選択できますが、さまざまなコーデックを使用してmp4およびaviでテストを実施しました。 手元にあるすべてのデバイスで、問題なく再生がスムーズに行われました。 古いデバイスとOSバージョン<4.0はサポートする必要がなく、これらの形式で問題はないと思いました。 次に、HTC desire Vで、ギャラリーの組み込みプレーヤーであるいくつかのビデオも再生されていないことがわかりました。 デバイスはかなり弱いと考えられていましたが、驚きは、Nexus 5でテストビデオがほとんど再生されなかったことです。 私は規則性を見つけることができませんでした-同じコーデックを使用しても、1つのファイルを読み取ることはできましたが、他のファイルはできませんでした。 ファイルは破損していなかったため、MediaPlayerを使用したVideoViewのみが罪を犯しました。
幸いなことに、より信頼性が高いだけでなく、より高速に動作する優れた選択肢が見つかりました。
- FFmpegライブラリ。 Android NDKを使用して自分でコンパイルできます。 しかし、このアプローチの欠点は明らかです。NDKを処理し、ビルドする必要があり、これはLinuxでのみ可能です。 これに時間を無駄にしたくありませんでした。
- FFmpegMediaPlayer。 実際には、最初のライブラリに基づいていますが、アセンブリを処理する必要はなく、ネイティブMediaPlayerに完全に類似したインターフェイスが既に提供されています。 純粋に検証のために、私はそれを使用しようとしましたが、ビデオはSurfaceViewでまったく同じコードで描画されませんでしたが、ネイティブMediaPlayerでは問題なく動作しました。 おそらくこれは私のカントですが、簡単な解決策を見つけることができませんでした。
(UPD:コメントで述べたように、このライブラリは音声のみです) - ヴィタミオ。 また、FFmpegを基礎とし、既製のアセンブリも提供します。 同時に、ネイティブのAndroid SDKと同様のインターフェースを備えた独自のVideoViewおよびMediaMetadataRetrieverも備えており、プレーヤー作成時の生活を大幅に簡素化します。 独自のFFmpegビルドを使用して、OS 2.1+およびほぼすべての形式をサポートすることができます。 私はこの図書館に立ち寄った;問題は起こらなかった。 アセンブリには、最初はx86用のビルドがないことに注意してください。 このライブラリを使用すると、APKの厚さが最大8メガバイトになることも予想されます。
- 他のオプションもあり、それらのほとんどは同じFFmpegを使用しますが、Vitamioは完全に私に適しています。
一般に、小規模なプロジェクトや「一般的な」一般的なビデオ/オーディオ形式であっても、標準クラスを使用しないことを強くお勧めします。 誰かが反対し、すべてが彼にとってうまくいくと言うかもしれません。 ここでは、たとえばGenymotionを使用して、より多くのファイルとデバイスでテストすることをお勧めします。