我正在开发一个需要播放视频的iPhone应用程序。到目前为止,我了解到至少有两个API可以实现此目的。AVPlayer
和MPMoviePlayerController
。
主要区别是什么?
Answers:
注意从iOS9开始,Apple已弃用MPMoviePlayerController:
在iOS 9中正式弃用了MPMoviePlayerController类(在形式上也弃用了MPMoviePlayerViewController类。)要在iOS 9和更高版本中播放视频内容,请改用AVKit框架中的AVPictureInPictureController或AVPlayerViewController类,或WebKit中的WKWebView类。
AVPlayer
为您提供了更多的灵活性,但是文档记录很少。使用此API将迫使您创建自己的UI。AVFoundation
(带来您的框架AVPlayer
)通常对用户(编码器)来说有点困难,因为它迫使您大量使用键值观察来检查状态。KVO的概念很棒,不要误会我的意思-但是,对于没有经验的开发人员来说,学习它可能会很痛苦。Apple有时会忽略有关哪些属性实际上符合KVO的信息,这将迫使您进行一些试验。
例如,AVPlayer
over的一大优势就是MPMoviePlayerController
它的扩展版本,AVQueuePlayer
因为它能够无缝播放多个电影源。当然,另一个优势是功能丰富的AVFoundation
框架,使您可以执行动态电影合成/编码/转换等操作。
另一个巨大的优点AVPlayer
是您实际上可以同时(例如并排)播放多个视频源而没有任何问题。
MPMoviePlayerController
易于使用,开箱即可满足大多数需求。使用此API将为您提供美观且通常被理解的UI。但是,可以禁用UI或将UI替换为自定义UI。
对于状态更改,请MPMoviePlayerController
使用一些NSNotifications
涵盖常规应用程序需要的内容。
在底层进行MPMoviePlayerController
构建,AVPlayer
但是实际上对用户完全透明-您在使用时无法访问该层MPMoviePlayerController
。
MPMoviePlayerController
将底图AVPlayer
用作单例实例,因此无法使用的多个实例MPMoviePlayerController
同时播放视频。
另一方面,一旦您尝试MPMoviePlayerController
使用自己的功能扩展功能时,代码很快就会变得令人讨厌-例如,您可能会开始使用多个计时器来覆盖适当的饥饿检测之类的东西(实际上,该功能已包括在内) (此类的iOS5版本中),自定义UI更新等等……或者您可能最终拥有多个状态属性,试图覆盖播放器仍在进行预缓冲时优雅地中止播放之类的事情。
个人推荐
我已经使用过这两种软件,并且我将继续使用这两种软件,具体取决于我有幸构建该应用程序。对于大多数(简单)项目,我建议使用MPMoviePlayerController
over,AVPlayer
因为它使用起来非常简单,并且只需几行代码,您就可以获得功能完善的媒体播放器。而且,如果您对媒体播放的要求更加简单,MPMoviePlayerViewController
请浏览一下(请注意,观看部分)。
backgroundView
。