PRXPlayer 目前依赖于一个修改过的 Reachability。
pod 'PRXPlayer', '~> 2.0'
PRXPlayer 是围绕 AVPlayer 的轻量级包装器。其任务是简单地提供一套标准工具,这些工具大多数媒体播放器的实现都已经有了。这包括像重试逻辑、错误处理、监视基本状态变化和播放监控等功能。PRXPlayer 提供了一组抽象的 NSNotifications,这使得您的应用程序能够轻松响应几乎所有相关的更改。通过实现 PRXPlayerDelegate,可以更精确地与 AVPlayer 及其项和资产进行交互。除此之外,您始终可以直接处理底层的 AVPlayer 实例,以便进行所需程度的自定义。
PRXPlayer
API 预期对象实现了 PRXPlayerItem
协议。该协议确保了对象包含执行一致的媒体播放器所必需的最基本的属性集合。每个 PRXPlayerItem
都必须提供一个 AVAsset
,这是实际被加载到底层 AVPlayer
中的项,并实现 isEqualToPlayerItem:
来确保播放器能够准确地确定播放器项何时发生变化。
在某些情况下,对象的 AVAsset
可能会随时间改变。例如,一集对象默认情况下可能有一个对应远程服务器上文件的 AVURLAsset
,但在下载完该视频集后,它可能返回对应本地存储中文件的 AVURLAsset
。在这种情况下,isEqualToPlayerItem:
应该能够区分这些不同的情况,并且在将 PRXPlayerItem
与自己进行比较时,不同的 AVAssets
返回 NO
。
借助代码PRXPlayer
的控制播放有两种组方法:不那么明确和明确。不那么明确的方法有:play
、pause
、toggle
和stop
。这些控制播放器,不管播放器中加载了什么内容。明确的控制方法,如playPlayerItem:
、loadPlayerItem:
和togglePlayerItem:
,处理特定的媒体对象。如果向一个PRXPlayer
发送明确的控制信息,而给定的对象不是当前加载的对象,播放器将采取步骤清除现有的媒体对象,并加载新的对象。loadPlayerItem:
将尽可能准备媒体对象(即开始缓冲),但一旦准备就绪,将保持播放器暂停。
工作正在进行中…
PRXPlayer
的一个主要功能是使对AVPlayer
和相关媒体变化的响应变得非常容易。为此,一种方法是随着变化的到来发布多个非常一般的通知。在大多数情况下,应用程序的不同部分(例如UI元素、持久层等)不关心发生了什么变化或是什么导致了变化,只想知道发生了变化。
一个常见的例子是在音乐应用程序中展示的播放器控制UI。管理UI的控制器不必关心播放器为什么不播放,只关心播放器已变化状态,UI应更新。
每当播放器的状态、其底层AVPlayer
或加载到AVPlayer
中的资产发生变化时,PRXPlayer
将发布一个PRXPlayerChangeNotification
。观察此通知,使用sharedPlayer
作为对象,应该涵盖所有需要保持播放器UI与播放器保持同步的情况。
此外,在通过PRXPlayer
进行播放时,将分别以每秒和10秒的时间间隔发布一个PRXPlayerTimeIntervalNotification
和PRXPlayerLongTimeIntervalNotification
。时间跳跃也将导致这些通知的发布。对于一般使用,为这些通知注册的对象应该是sharedPlayer
。
在播放器正在播放的资产是AVURLAsset
的情况下,将发布两个额外的通知。它们也是PRXPlayerTimeIntervalNotification
和PRXPlayerLongTimeIntervalNotification
通知,但对象是AVURLAsset
的URL的absoluteString
。
PRXPlayer
还允许实施WWAN(例如3G/4G蜂窝连接)策略,如果由于网络连接条件而无法播放,将发布一个PRXPlayerReachabilityPolicyPreventedPlayback
。