ビデオを再生する必要がある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の更新など...または、プレーヤーがまだプレバッファリングしているときに、再生を適切に中止するなどの状況プロパティをカバーしようとする状態プロパティがいくつかある場合があります。
個人的な推薦
私は両方を使用しましたが、構築する喜びがあるアプリのニーズに応じて、両方を引き続き使用します。ほとんどの(単純な)プロジェクトでは、非常に簡単に使用でき、数行のコードで本格的なメディアプレーヤーが得られるため、MPMoviePlayerController
over AVPlayer
を使用することをお勧めします。また、メディアの再生に対する要求がさらに単純な場合は、のぞいてみてMPMoviePlayerViewController
ください(ビューの部分に注意してください)。
backgroundView
。