AVPlayer和MPMoviePlayerController的区别[关闭]


87

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

主要区别是什么?


4
试图重新措辞此问题,以确保它不会生成基于意见的答案。
直到

Answers:


173

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

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

MPMoviePlayerController参考复制。

AVPlayer

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

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

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

MPMoviePlayerController

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

对于状态更改,请MPMoviePlayerController使用一些NSNotifications涵盖常规应用程序需要的内容。

在底层进行MPMoviePlayerController构建,AVPlayer但是实际上对用户完全透明-您在使用时无法访问该层MPMoviePlayerController

MPMoviePlayerController将底图AVPlayer用作单例实例,因此无法使用的多个实例MPMoviePlayerController同时播放视频。

另一方面,一旦您尝试MPMoviePlayerController使用自己的功能扩展功能时,代码很快就会变得令人讨厌-例如,您可能会开始使用多个计时器来覆盖适当的饥饿检测之类的东西(实际上,该功能已包括在内) (此类的iOS5版本中),自定义UI更新等等……或者您可能最终拥有多个状态属性,试图覆盖播放器仍在进行预缓冲时优雅地中止播放之类的事情。


个人推荐

我已经使用过这两种软件,并且我将继续使用这两种软件,具体取决于我有幸构建该应用程序。对于大多数(简单)项目,我建议使用MPMoviePlayerControllerover,AVPlayer因为它使用起来非常简单,并且只需几行代码,您就可以获得功能完善的媒体播放器。而且,如果您对媒体播放的要求更加简单,MPMoviePlayerViewController请浏览一下(请注意,观看部分)。


2
AVPlayer还自动允许您使用图层动画。如果您想在后台运行Core Animation,则不要使用MPMoviePlayerController,尽管它可能具有启用它们的设置,但是请注意,如果您正在使用CALayer的东西
Stephen J

3
不,答案是正确的。可以禁用MPMoviePlayerController UI或将其替换为自定义UI 。
戴夫·巴顿

1
@Besi不,按书面要求完全正确-可以将其完全禁用(使用MPMovieControlStyleNone),因此可以将其替换,因为没有什么阻止您将自己的视图添加为MPMoviePlayerController的同级视图或直接添加到其上backgroundView
直到

8
从iOS 9开始,不推荐使用MPMoviePlayerController,因此您应在以后的项目中使用AVPlayer
刘易斯

1
这是超级有价值的信息@ lewis42-会将其添加到我的古代帖子中:)
直到
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.