Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVPlayer和MPMoviePlayerController的差异_Ios_Ios4_Mpmovieplayercontroller_Avfoundation_Avplayer - Fatal编程技术网

Ios AVPlayer和MPMoviePlayerController的差异

Ios AVPlayer和MPMoviePlayerController的差异,ios,ios4,mpmovieplayercontroller,avfoundation,avplayer,Ios,Ios4,Mpmovieplayercontroller,Avfoundation,Avplayer,我正在开发一个需要播放视频的iPhone应用程序。 到目前为止,我了解到至少有两个API可以实现这一点AVPlayer和MPMoviePlayerController 主要区别是什么?注意从iOS9开始,苹果已经弃用了MPMoviePlayerController: 在iOS 9中,MPMoviePlayerController类被正式弃用。(mpmovieplayervicewcontroller类也被正式弃用。)要在iOS 9及更高版本中播放视频内容,请改用AVKit框架中的AVPictur

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


主要区别是什么?

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

在iOS 9中,MPMoviePlayerController类被正式弃用。(mpmovieplayervicewcontroller类也被正式弃用。)要在iOS 9及更高版本中播放视频内容,请改用AVKit框架中的AVPictureInputController或AVPlayervicewcontroller类,或WebKit中的WKWebView类

抄袭自

AVPlayer
为您提供了更大的灵活性,但它的文档记录非常糟糕。使用此API将强制您创建自己的UI
AVFoundation
(为您提供
AVPlayer
)的框架)通常对用户(编码员)来说有点难,因为它迫使您大量使用来检查状态。KVO的概念很好,请不要误解我的意思——不过,对于没有经验的开发人员来说,学习KVO可能会很痛苦。苹果有时会忽略哪些属性实际上与KVO兼容的信息,这将迫使你做一些实验

与MPMoviePlayerController相比,
AVPlayer
的一大优势是它的扩展版本,
AVQueuePlayer
,因为它能够对多个电影源进行无间隙播放。 另一个优点当然是功能丰富的AVFoundation框架,允许您进行动态电影合成/编码/转换

AVPlayer
的另一个巨大优势是,您可以同时(例如并排)播放多个视频源,而不会出现任何问题

MPMoviePlayerController
易于使用,可满足大多数开箱即用的需求。使用此API将为您提供一个外观良好且易于理解的UI。但是,用户界面可以被禁用或替换为自定义用户界面

对于状态更改,
MPMoviePlayerController
使用一些
nsnotification
来覆盖常规应用程序所需的一切

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

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

另一方面,当您试图用自己的特性扩展
MPMoviePlayerController
的功能时,代码很快就会变得糟糕-例如,您可能会开始使用多个计时器来覆盖诸如适当饥饿检测之类的内容(实际上,该特性已包含在该类的iOS5版本中),自定义UI更新。。。或者,您可能最终拥有不止一部分的状态属性,试图覆盖一些内容,例如在播放器仍在预缓冲时优雅地中止播放


个人推荐

我已经使用了这两种方法,我将继续使用这两种方法,这取决于我有幸构建的应用程序的需要。
对于大多数(简单的)项目,我建议使用
MPMoviePlayerController
而不是
AVPlayer
,因为它使用起来非常简单,只需几行代码,就可以得到一个成熟的媒体播放器。如果您对媒体播放的要求更简单,请看一看(请注意查看部分)

AVPlayer还自动允许您使用层动画。如果要在后台运行核心动画,请不要使用MPMoviePlayerController,尽管它可能有启用它们的设置,但如果使用CALayer stuffNo,请注意这一点。答案是正确的。MPMoviePlayerController用户界面可以被禁用或替换为自定义用户界面。@Besi否,完全正确,如书面所述-它肯定可以被禁用(使用MPMovieControlStyleNone)因此被取代,因为没有任何东西可以阻止您将自己的视图添加为MPMoviePlayerController视图的兄弟视图或直接添加到其
背景视图中。从iOS 9开始,MPMoviePlayerController已被弃用,因此您应该在未来的项目中使用AVPlayer,这是非常有价值的信息@lewis42-将其添加到我的项目中发帖:)试图改写此问题,以确保它不会生成基于意见的答案。