ビデオを再生する必要があるiPhoneアプリケーションを開発しています。これまでに、これを実現するためのAPIが少なくとも2つあることを学びました。AVPlayerとMPMoviePlayerController。
主な違いは何ですか?
回答:
NOTE iOS9のように、アップルMPMoviePlayerControllerを推奨していません。
MPMoviePlayerControllerクラスはiOS 9では正式に非推奨になりました(MPMoviePlayerViewControllerクラスも正式に非推奨になりました)。iOS9以降でビデオコンテンツを再生するには、代わりにAVKitフレームワークのAVPictureInPictureControllerまたはAVPlayerViewControllerクラス、またはWebKitのWKWebViewクラスを使用します。
MPMoviePlayerControllerリファレンスからコピー。
AVPlayer柔軟性が大幅に向上しますが、文書化が不十分です。このAPIを使用すると、独自のUIを作成する必要があります。AVFoundation(あなたをもたらすフレームワークAVPlayer)状態をチェックするためにKey-Value Observingをたくさん使わざるを得ないので、一般的にユーザー(コーダー)にとって少し難しいです。KVOのコンセプトは素晴らしいです。誤解しないでください。それでも、未経験の開発者にとっては、学ぶのが面倒なこともあります。Appleは、実際にKVOに準拠しているプロパティに関する情報を省略している場合があります。その場合、いくつかの実験が必要になります。
AVPlayer以上の大きな利点の1つMPMoviePlayerControllerは、たとえばAVQueuePlayer、複数の映画ソースを隙間なく再生できる拡張バージョンです。もう1つの利点は、機能が豊富なAVFoundationフレームワークであり、オンザフライでの映画の作成、エンコード、変換などを実行できることです。
さらにもう1つの大きな利点AVPlayerは、複数のビデオソースを問題なく同時に(たとえば並べて)実際に再生できることです。
MPMoviePlayerController使いやすく、箱から出してほとんどのニーズをカバーします。このAPIを使用すると、見栄えがよく、よく理解されているUIが得られます。ただし、UIを無効にしたり、カスタムUIに置き換えることができます。
ステータスの変更についてMPMoviePlayerControllerはNSNotifications、通常のアプリが必要とするすべてをカバーするいくつかを使用します。
内部でMPMoviePlayerControllerは、上に構築されますAVPlayerが、実際にはユーザーに対して完全に透過的に行われますMPMoviePlayerController。使用中はそのレイヤーにアクセスできません。
MPMoviePlayerControllerでは、アンダーレイAVPlayerをシングルトンインスタンスとして使用しているため、の複数のインスタンスを使用してMPMoviePlayerControllerビデオを同時に再生することはできません。
一方、MPMoviePlayerController独自の機能での機能を拡張しようとすると、コードはすぐに厄介なものになります。たとえば、適切な飢餓検出などの対象をカバーするために複数のタイマーの使用を開始する可能性があります(実際には、その機能が含まれています) iOS5のこのクラスのバージョン)、カスタムUIの更新など...または、プレーヤーがまだプレバッファリングしているときに、再生を適切に中止するなどの状況プロパティをカバーしようとする状態プロパティがいくつかある場合があります。
個人的な推薦
私は両方を使用しましたが、構築する喜びがあるアプリのニーズに応じて、両方を引き続き使用します。ほとんどの(単純な)プロジェクトでは、非常に簡単に使用でき、数行のコードで本格的なメディアプレーヤーが得られるため、MPMoviePlayerControllerover AVPlayerを使用することをお勧めします。また、メディアの再生に対する要求がさらに単純な場合は、のぞいてみてMPMoviePlayerViewControllerください(ビューの部分に注意してください)。
backgroundView。