AVPlayerとMPMoviePlayerControllerの違い[終了]


87

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

主な違いは何ですか?


4
この質問を書き直して、意​​見に基づく回答が生成されないようにしました。
まで

回答:


173

NOTE iOS9のように、アップルMPMoviePlayerControllerを推奨していません。

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

MPMoviePlayerControllerリファレンスからコピー。

AVPlayer

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

AVPlayer以上の大きな利点の1つMPMoviePlayerControllerは、たとえばAVQueuePlayer、複数の映画ソースを隙間なく再生できる拡張バージョンです。もう1つの利点は、機能が豊富なAVFoundationフレームワークであり、オンザフライでの映画の作成、エンコード、変換などを実行できることです。

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

MPMoviePlayerController

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

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

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

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

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


個人的な推薦

私は両方を使用しましたが、構築する喜びがあるアプリのニーズに応じて、両方を引き続き使用します。ほとんどの(単純な)プロジェクトでは、非常に簡単に使用でき、数行のコードで本格的なメディアプレーヤーが得られるため、MPMoviePlayerControllerover AVPlayerを使用することをお勧めします。また、メディアの再生に対する要求がさらに単純な場合は、のぞいてみてMPMoviePlayerViewControllerください(ビューの部分に注意してください)。


2
AVPlayerでは、レイヤーアニメーションを自動的に使用することもできます。Core Animationをバックグラウンドで実行したい場合は、MPMoviePlayerControllerを使用しないでください。有効にする設定があるかもしれませんが、CALayerのものを使用している場合は注意してください
Stephen J

3
いいえ、正解です。MPMoviePlayerController UI 無効にしたり、カスタムUIに置き換えることできます。
Dave Batton 2013年

1
@Besiいいえ、書かれたとおり完全に正しい-それは間違いなく(MPMovieControlStyleNoneを使用して)無効にできるため、MPMoviePlayerControllerのビューの兄弟として、またはその上に直接、独自のビューを追加することを妨げるものがないため、置き換えることができますbackgroundView
2013年

8
iOS 9以降、MPMoviePlayerControllerは非推奨となったため、将来のプロジェクトにはAVPlayerを使用する必要があります
lewis

1
それはlewis42 @超貴重な情報です- :)私の古代の投稿に追加されます
ティル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.