AndroidでMediaPlayerとMediaMetadataRetrieverを使用しないでください

私のささやかな経験が示すように、ネイティブMediaPlayer、MediaMetadataRetriever、およびそれらに何らかの方法で基づいている他のクラス(VideoView、ThumbnailUtilsなど)は、使用するのが非常に信頼できません。 おそらく問題は、それらがネイティブに実装されており、バージョンごとに異なることですが、異なるデバイスでの動作を予測できないという事実が残っており、これは鉄の力にも依存していません。



良い例は、ビデオの再生を実装するために必要な小さなプロジェクトです。 任意の形式とコーデックを選択できますが、さまざまなコーデックを使用してmp4およびaviでテストを実施しました。 手元にあるすべてのデバイスで、問題なく再生がスムーズに行われました。 古いデバイスとOSバージョン<4.0はサポートする必要がなく、これらの形式で問題はないと思いました。 次に、HTC desire Vで、ギャラリーの組み込みプレーヤーであるいくつかのビデオも再生されていないことがわかりました。 デバイスはかなり弱いと考えられていましたが、驚きは、Nexus 5でテストビデオがほとんど再生されなかったことです。 私は規則性を見つけることができませんでした-同じコーデックを使用しても、1つのファイルを読み取ることはできましたが、他のファイルはできませんでした。 ファイルは破損していなかったため、MediaPlayerを使用したVideoViewのみが罪を犯しました。



幸いなことに、より信頼性が高いだけでなく、より高速に動作する優れた選択肢が見つかりました。





一般に、小規模なプロジェクトや「一般的な」一般的なビデオ/オーディオ形式であっても、標準クラスを使用しないことを強くお勧めします。 誰かが反対し、すべてが彼にとってうまくいくと言うかもしれません。 ここでは、たとえばGenymotionを使用して、より多くのファイルとデバイスでテストすることをお勧めします。



All Articles