PRXPlayer 2.0.21

PRXPlayer 2.0.21

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年7月

Chris Kalafarski维护。



PRXPlayer 2.0.21

  • 作者:
  • Chris Kalafarski 和 Rebecca Nesson

PRXPlayer 目前依赖于一个修改过的 Reachability。

pod 'PRXPlayer', '~> 2.0'

如何使用

PRXPlayer 是围绕 AVPlayer 的轻量级包装器。其任务是简单地提供一套标准工具,这些工具大多数媒体播放器的实现都已经有了。这包括像重试逻辑、错误处理、监视基本状态变化和播放监控等功能。PRXPlayer 提供了一组抽象的 NSNotifications,这使得您的应用程序能够轻松响应几乎所有相关的更改。通过实现 PRXPlayerDelegate,可以更精确地与 AVPlayer 及其项和资产进行交互。除此之外,您始终可以直接处理底层的 AVPlayer 实例,以便进行所需程度的自定义。

PRXPlayerItem

PRXPlayer API 预期对象实现了 PRXPlayerItem 协议。该协议确保了对象包含执行一致的媒体播放器所必需的最基本的属性集合。每个 PRXPlayerItem 都必须提供一个 AVAsset,这是实际被加载到底层 AVPlayer 中的项,并实现 isEqualToPlayerItem: 来确保播放器能够准确地确定播放器项何时发生变化。

在某些情况下,对象的 AVAsset 可能会随时间改变。例如,一集对象默认情况下可能有一个对应远程服务器上文件的 AVURLAsset,但在下载完该视频集后,它可能返回对应本地存储中文件的 AVURLAsset。在这种情况下,isEqualToPlayerItem: 应该能够区分这些不同的情况,并且在将 PRXPlayerItem与自己进行比较时,不同的 AVAssets 返回 NO

PRXPlayer

借助代码PRXPlayer的控制播放有两种组方法:不那么明确和明确。不那么明确的方法有:playpausetogglestop。这些控制播放器,不管播放器中加载了什么内容。明确的控制方法,如playPlayerItem:loadPlayerItem:togglePlayerItem:,处理特定的媒体对象。如果向一个PRXPlayer发送明确的控制信息,而给定的对象不是当前加载的对象,播放器将采取步骤清除现有的媒体对象,并加载新的对象。loadPlayerItem:将尽可能准备媒体对象(即开始缓冲),但一旦准备就绪,将保持播放器暂停。

PRXPlayerDelegate

工作正在进行中…

响应变化

PRXPlayer的一个主要功能是使对AVPlayer和相关媒体变化的响应变得非常容易。为此,一种方法是随着变化的到来发布多个非常一般的通知。在大多数情况下,应用程序的不同部分(例如UI元素、持久层等)不关心发生了什么变化或是什么导致了变化,只想知道发生了变化。

一个常见的例子是在音乐应用程序中展示的播放器控制UI。管理UI的控制器不必关心播放器为什么不播放,只关心播放器已变化状态,UI应更新。

每当播放器的状态、其底层AVPlayer或加载到AVPlayer中的资产发生变化时,PRXPlayer将发布一个PRXPlayerChangeNotification。观察此通知,使用sharedPlayer作为对象,应该涵盖所有需要保持播放器UI与播放器保持同步的情况。

此外,在通过PRXPlayer进行播放时,将分别以每秒和10秒的时间间隔发布一个PRXPlayerTimeIntervalNotificationPRXPlayerLongTimeIntervalNotification。时间跳跃也将导致这些通知的发布。对于一般使用,为这些通知注册的对象应该是sharedPlayer

在播放器正在播放的资产是AVURLAsset的情况下,将发布两个额外的通知。它们也是PRXPlayerTimeIntervalNotificationPRXPlayerLongTimeIntervalNotification通知,但对象是AVURLAsset的URL的absoluteString

PRXPlayer还允许实施WWAN(例如3G/4G蜂窝连接)策略,如果由于网络连接条件而无法播放,将发布一个PRXPlayerReachabilityPolicyPreventedPlayback