web-dev-qa-db-ja.com

AVPlayerとMPMoviePlayerControllerの違い

ビデオを再生する必要があるiPhoneアプリケーションを開発しています。これまでのところ、これを達成するために少なくとも2つのAPIがあることを学びました。 AVPlayerおよびMPMoviePlayerController

主な違いは何ですか?

86
suse

[〜#〜] note [〜#〜]iOS9以降、AppleはMPMoviePlayerControllerを廃止しました:

MPMoviePlayerControllerクラスは、iOS 9では正式に廃止されました(MPMoviePlayerViewControllerクラスも正式に廃止されました)。iOS9以降でビデオコンテンツを再生するには、代わりにAVKitフレームワークのAVPictureInPictureControllerまたはAVPlayerViewControllerクラス、またはWebKitのWKWebViewクラスを使用します。

MPMoviePlayerController reference からコピーしました。

AVPlayer

AVPlayerを使用すると柔軟性が大幅に向上しますが、文書化はかなり不十分です。このAPIを使用すると、独自のUIを作成する必要があります。 AVFoundationAVPlayerをもたらすフレームワーク)は、一般的にユーザー(コーダー)にとって少し難しいです Key-Value Observing 状態を確認します。 KVOの概念は素晴らしいですが、誤解しないでください。それでも、経験のない開発者にとっては、学ぶのは苦痛です。 Appleは、実際にどのプロパティが実際にKVOに準拠しているかに関する情報を省略している場合があります。

AVPlayerに対するMPMoviePlayerControllerの大きな利点の1つは、たとえば、拡張バージョンであるAVQueuePlayerにあります。これは、複数の映画ソースのギャップレス再生が可能なためです。別の利点は、確かに機能豊富なAVFoundationフレームワークであり、オンザフライでの映画の合成/エンコード/変換などを行うことができます。

AVPlayerのもう1つの大きな利点は、実際に問題なく複数のビデオソースを同時に(たとえば、並べて)再生できることです。

MPMoviePlayerController

MPMoviePlayerControllerは使いやすく、ほとんどのニーズをすぐにカバーします。このAPIを使用すると、見栄えがよく、よく理解されているUIが提供されます。ただし、UIは無効にしたり、カスタムUIに置き換えたりできます。

ステータス変更の場合、MPMoviePlayerControllerは、通常のアプリが必要とするすべてをカバーするいくつかのNSNotificationsを使用します。

内部では、MPMoviePlayerControllerAVPlayerの上に構築されますが、実際にはユーザーに対して完全に透過的に行われます。MPMoviePlayerControllerを使用している間は、そのレイヤーにアクセスできません。

MPMoviePlayerControllerは、下層のAVPlayerをシングルトンインスタンスとして使用するため、MPMoviePlayerControllerの複数のインスタンスを使用してビデオを同時に再生することはできません。

一方、独自の機能でMPMoviePlayerControllerの機能を拡張しようとするとすぐに、コードはすぐに厄介になります。適切な飢ve検出(実際には、この機能はiOS5のこのクラスのバージョンに含まれています)、カスタムUIの更新などをカバーするために複数のタイマーの使用を開始する可能性があります。プレーヤーがまだプリバッファリングしている間に再生を正常に中止するなどのことをカバーしようとするプロパティ。


個人的な推奨事項

私は両方を使用しましたが、ビルドする喜びがあるアプリのニーズに応じて、両方を使用し続けます。ほとんどの(単純な)プロジェクトでは、MPMoviePlayerControllerよりもAVPlayerを使用することをお勧めします。使用するのは非常に簡単で、ほんの数行のコードで本格的なメディアプレーヤーが得られるからです。また、メディアの再生に対する要求がさらに単純な場合は、 MPMoviePlayerViewController (View-partに注意してください)を覗いてください。

172
Till