AVPlayer和MPMoviePlayerController的区别
我正在开发一个需要播放video的iPhone应用程序。 到目前为止,我了解到至less有两个API可以实现这个function。 AVPlayer
和MPMoviePlayerController
。
主要区别是什么?
从iOS9开始,Apple已经不赞成使用MPMoviePlayerController:
MPMoviePlayerController类在iOS 9中正式废弃。(MPMoviePlayerViewController类也被正式弃用。)要在iOS 9及更高版本中播放video内容,请使用AVKit框架中的AVPictureInPictureController或AVPlayerViewController类或WebKit中的WKWebView类。
从MPMoviePlayerController参考复制。
AVPlayer
AVPlayer
为您提供了更多的灵活性,但相当不完善的logging。 使用这个API将迫使你创build你自己的UI。 AVFoundation
(带给你AVPlayer
的框架)通常在用户(编码器)上有点困难,因为它迫使你使用Key-Value观察大量的检查状态。 KVO的概念是伟大的,不要误解我的意思 – 对于没有经验的开发者来说,学习可能会很痛苦。 苹果有时会忽略哪些属性实际上符合KVO的信息,这会迫使您做一些实验。
AVPlayer
对于MPMoviePlayerController
一大优势就是它的扩展版本AVQueuePlayer
因为它可以对多个电影源进行无缝播放。 另一个优势当然是function丰富的AVFoundation
框架,可以让您执行诸如animation电影合成/编码/转换等操作。
AVPlayer
另一个巨大优势是,您可以实际上同时播放多个video源(例如,并排)而没有任何问题。
的MPMoviePlayerController
MPMoviePlayerController
易于使用,覆盖了大部分需求。 使用这个API将给你一个很好看和通常理解的用户界面。 然而,用户界面可以被禁用或用自定义的replace。
对于状态更改, MPMoviePlayerController
使用一些NSNotifications
覆盖常规应用程序所需的一切。
在MPMoviePlayerController
, MPMoviePlayerController
build立在AVPlayer
之上 – 但实际上对用户来说是完全透明的 – 在使用MPMoviePlayerController
时候你不能访问这个层。
MPMoviePlayerController
使用底层AVPlayer
作为单例实例,因此不可能同时使用多个MPMoviePlayerController
实例来播放video。
另一方面,只要你试图用你自己的特性扩展MPMoviePlayerController
的function,代码很快就会变得讨厌 – 例如,你可能会开始使用多个定时器来覆盖像正确的starve-detection(事实上,包括到iOS5的这个类的版本中),自定义的UI更新,…或者你可能最终会有超过一些状态属性,试图覆盖这样的东西,如播放器仍在预缓冲时正常放弃播放。
个人推荐
我已经使用了两个,我将继续使用,这取决于我有幸build立的应用程序的需要。 对于大多数(简单)项目,我build议使用MPMoviePlayerController
不是AVPlayer
因为它使用MPMoviePlayerController
非常简单,只需几行代码就可以得到一个完整的媒体播放器。 如果您对媒体播放的要求更简单,请查看MPMoviePlayerViewController
(注意View-part)。