ZonPlayer 是一个基于 AVPlayer 的播放库,具有缓存和远程控制支持。为了方便起见,我们定义了可以链式调用的接口。
- 异步配置 AVAudioSession,以防止主线程挂起。
- 支持 VIMediaCache 等第三方缓存。预设了
ZPC.DownloadThenPlay
和ZPC.Streaming(base on AVAssetResourceLoader)
。 - 管理现在播放信息和远程控制命令。
- 使用插件拦截流播放的进度。
- 如果播放器出现错误(例如:媒体服务被重置),将自动重试。
let player: ZonPlayable = ZonPlayer.player(URLConvertible)
.session(ZPSessionable)
.cache(ZPCacheable) // Conform ZPCacheable to customize cache category.
.remoteControl(self) { wlf, payload in // Conform ZPRemoteControllable to customize background playback controller.
payload.title(String).artist(String)....
}
.onPaused(self) { wlf, payload in // Conform ZPObservable to listen player.
}
.activate(in: ZonPlayerView)
// Conform ZPControllable to control player instance.
player.pause()
player.play()
player.seek(to: 0)
// ...
// Conform ZPGettable to read player status.
player.currentTime
player.duration
player.url
// ...
集成第三方缓存
import VIMediaCache
final class TestCache: ZPCacheable {
let manager = VIResourceLoaderManager()
func prepare(url: URL, completion: @escaping (Result<AVURLAsset, ZonPlayer.Error>) -> Void) {
let item = manager.playerItem(with: url).unsafelyUnwrapped
let asset = (item.asset as? AVURLAsset).unsafelyUnwrapped
completion(.success(asset))
}
}
func play() {
let player = ZonPlayer.player(url).cache(TestCache())
}
注意:在使用 ZPC.Streaming 之前,建议确保 URL 支持随机访问,以避免潜在的不意外问题。以下是对 isByteRangeAccessSupported
的官方文档说明:
如果此属性对于必须增量加载的资源不为真,加载资源可能会失败。此类资源包括包含媒体数据的任何内容。
- iOS 12.0 或更高版本
- Swift 5.0 或更高版本
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '12.0'
use_frameworks!
target 'MyApp' do
pod 'ZonPlayer', '~> 1.0.0'
end
github "ZeroOnet/ZonPlayer" ~> 1.0.0
- 文件 > Swift 包 > 添加包依赖
- 添加
[email protected]:ZeroOnet/ZonPlayer.git
- 选择 "Up to Next Major" 并将其设置为 "1.0.0"。
ZeroOnet, [email protected]
从头开始编写一个播放器 I —— ZonPlayer 需求分析和接口设计
从头开始编写一个播放器 II —— 音频会话、远程控制和播放器实现
从头开始编写一个播放器 III —— 缓存
从头开始编写一个播放器 IV(终)—— Github Action 与组件发布
Alamofire
Kingfisher
VIMediaCache
ZonPlayer 可在 MIT 许可下使用。有关更多信息,请见 LICENSE 文件。