AVPlayer和MPMoviePlayerController的区别

sus*_*use 87 mpmovieplayercontroller avfoundation ios4 ios avplayer

我正在开发一个需要播放视频的iPhone应用程序.到目前为止,我了解到实现这一目标至少有两个API; AVPlayerMPMoviePlayerController.

有哪些主要区别?

Til*_*ill 173

从iOS9开始注意,Apple已经弃用了MPMoviePlayerController:

MPMoviePlayerController类在iOS 9中正式弃用.(MPMoviePlayerViewController类也正式弃用.)要在iOS 9及更高版本中播放视频内容,请使用AVKit框架中的AVPictureInPictureController或AVPlayerViewController类,或WebKit中的WKWebView类.

MPMoviePlayerController引用复制.

AVPlayer

AVPlayer为您提供了更多的灵活性,但记录很差.使用此API将强制您创建自己的UI.AVFoundation(带给你的框架AVPlayer)通常对用户(编码器)有点困难,因为它迫使你使用键值观察很多用于检查状态.KVO的概念很棒,不要误会我的意思 - 对于没有经验的开发人员来说,学习它会很痛苦.Apple有时会忽略哪些属性实际符合KVO的信息,这将迫使您进行一些实验.

的一分大优势,AVPlayerMPMoviePlayerController将例如是它的扩展版本,AVQueuePlayer作为一个是能够做到的多个电影音源无缝播放.另一个优势当然是功能丰富的AVFoundation框架,允许您执行动态电影合成/编码/转换等操作.

另一个巨大的优势AVPlayer是,您实际上可以同时播放多个视频源(例如,并排)而没有任何问题.

的MPMoviePlayerController

MPMoviePlayerController易于使用,涵盖了大多数开箱即用的需求.使用此API将为您提供美观且易于理解的UI.但是,UI可以被禁用,或者用自定义替换.

对于状态更改,MPMoviePlayerController使用一些NSNotifications覆盖常规App所需的一切.

在引擎盖下,MPMoviePlayerController构建在AVPlayer- 但实际上对用户完全透明 - 您在使用时无法访问该层MPMoviePlayerController.

MPMoviePlayerController使用underlaying AVPlayer作为单例实例,因此不可能同时使用多个实例MPMoviePlayerController来播放视频.

另一方面,只要您尝试MPMoviePlayerController使用自己的功能扩展功能,代码就会很快变得令人讨厌 - 例如,您可能会开始使用多个计时器来覆盖正确的饥饿检测(实际上,包含该功能)进入这个类的iOS5版本),自定义UI更新,...或者你可能最终有超过一些状态属性试图覆盖播放器仍在预缓冲时优雅地中止播放的事情.


个人推荐

我已经使用了两者,我将继续使用两者,这取决于我有兴趣构建的应用程序的需求.对于大多数(简单)项目,我建议使用MPMoviePlayerController,AVPlayer因为它使用起来非常简单,只需几行代码,您就可以获得成熟的媒体播放器.如果您对媒体播放的要求更加简单,MPMoviePlayerViewController请查看(请注意View-part).

  • 从iOS 9开始,不推荐使用MPMoviePlayerController,因此您应该将AVPlayer用于未来的项目 (8认同)
  • 不,答案是对的.MPMoviePlayerController UI**可以被禁用和/或替换为自定义的. (3认同)
  • AVPlayer还可以自动让您使用图层动画.如果你想在后台运行Core Animation,不要使用MPMoviePlayerController,虽然它可能有一个设置来启用它们,如果你正在使用CALayer的东西,请注意这一点 (2认同)