首页 文章

AVPlayer和MPMoviePlayerController的区别[关闭]

提问于
浏览
86

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

有哪些主要区别?

1 回答

  • 172

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

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

    复制自MPMoviePlayerController reference .

    AVPlayer

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

    AVPlayer 超过 MPMoviePlayerController 的一大优势就是它的扩展版本 AVQueuePlayer ,因为它可以无缝播放多个电影源 . 另一个优势当然是功能丰富的 AVFoundation 框架允许您执行动态电影合成/编码/转换等操作 .

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

    MPMoviePlayerController

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

    对于状态更改, MPMoviePlayerController 使用一些 NSNotifications 覆盖常规应用程序所需的所有内容 .

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

    MPMoviePlayerController 使用底层 AVPlayer 作为单例实例,因此无法使用多个 MPMoviePlayerController 实例同时播放视频 .

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


    Personal Recommendation

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

相关问题