ModernAVPlayer
ModernAVPlayer
是一个持久性的 AVPlayer
包装器
++ 亮点特性 ++
- 获取 9 个优秀且相关的播放状态(播放中、缓冲、加载、加载完成...)
- 在后台模式下,即使在网络连接不良的情况下也能持久化播放器以恢复播放
- 管理耳机交互、电话与 Siri 打断、现在播放信息
- 添加您自己的插件以管理跟踪、事件...
- RxSwift 兼容
- 循环模式
- 按域名提供日志
已知问题
- 音频未由其他音频源停止,
AVAudiosession.CategoryOptions
设置为 mixWithOther,但可以进行更改:[参考](https://github.com/noreasonprojects/ModernAVPlayer/issues/174)
菜单
需求
- iOS 10.0+
- tvOS 10.0+
为了支持后台模式,请将以下内容添加到您的
Info.plist
文件中
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
安装
Swift 包管理器
支持版本:swift-tools-version:5.0
// Package.swift
import PackageDescription
let package = Package(
name: "Sample",
dependencies: [
.package(url: "https://github.com/noreasonprojects/ModernAVPlayer", from: "X.X.X")
],
targets: [
.target(name: "Sample", dependencies: ["ModernAVPlayer"])
]
)
CocoaPods
CocoaPods 是 Cocoa 项目的依赖关系管理器。您可以使用以下命令安装它
$ gem install cocoapods
要构建 ModernAVPlayer,需要 CocoaPods 1.3+。
要使用 CocoaPods 将 ModernAVPlayer
集成到您的 Xcode 项目中,请在 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
target '<Your Target Name>' do
pod 'ModernAVPlayer'
end
然后,运行以下命令
$ pod install
入门教程
从 URL 创建媒体
let media = ModernAVPlayerMedia(url: URL, type: MediaType)
从 AVPlayerItem 创建媒体
let media = ModernAVPlayerMediaItem(item: AVPlayerItem, type: MediaType, metadata: PlayerMediaMetadata)
实例化包装器
let player = ModernAVPlayer()
加载和播放媒体
player.load(media: media, autostart: true)
重复播放
player.loopMode = true
↓ 状态 / 命令 → | loadMedia | play | pause | stop | seek |
---|---|---|---|---|---|
Init | O | X | O | O | X |
Loading | O | X | O | O | X |
Loaded | O | O | O | O | O |
Buffering | O | X | O | O | O |
Playing | O | X | O | O | O |
Paused | O | O | X | O | O |
Stopped | O | O | O | X | O |
WaitingNetwork | O | X | O | O | X |
Failed | O | O | X | X | X |
高级功能
自定义配置
所有玩家配置均由 PlayerConfiguration
协议提供。
提供了一个默认实现 ModernAVPlayerConfiguration
,并附带文档。
远程命令
如果使用默认配置文件( swift useDefaultRemoteCommand = true
),ModernAVPlayer 会 自动 使用由 ModernAVPlayerRemoteCommandFactory
类创建的所有命令。文档可于 ModernAVPlayerRemoteCommandFactory.swift
文件中找到。
自定义命令
使用你自己的
PlayerConfiguration
实现。
...
useDefaultRemoteCommand = false
...
创建一个符合
ModernAVPlayerRemoteCommand
协议的命令数组。
let player = ModernAVPlayer(config: YourConfigImplementation())
let commands: [ModernAVPlayerRemoteCommand] = YourRemoteCommandFactory.commands
player.remoteCommands = commands
你可以使用来自公共 ModernAVPlayerRemoteCommandFactory
类的现有命令。
插件
使用 PlayerPlugin
协议来创建你自己的插件系统,如跟踪插件。
RxSwift
您可以使用 Rx 绑定玩家属性,而不是使用代理模式。
设置
在 Podfile 中使用 pod 'ModernAVPlayer/RxSwift'
。
用法
let player = ModernAVPlayer()
let state: Observable<ModernAVPlayer.State> = player.rx.state
通讯
- 如果您发现了错误,请在示例部分使用
Simple Audio
模板提交一个Pull Request来演示。 - 如果您有功能需求,请创建一个Issue。
- 如果您希望贡献,请提交一个Pull Request。