ModernAVPlayer

Swift 4.2 Build Status CocoaPods CocoaPods

ModernAVPlayer 是一个持久化的 AVPlayer 包装器

++ 酷炫功能 ++


已知问题

从版本 1.5.1 开始,从后台模式恢复播放失败。如果您有任何建议,请帮忙。

使用 mixWithOther AVAudiosession CategoryOptions 不是一个解决方案。


菜单

要求

为了支持后台模式,请将以下内容添加到您的 Info.plist 文件中

<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
</array>

安装

Swift Package Manager

支持版本: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 播放 暂停 停止 seek
初始化 O X O O X
加载中 O X O O X
已加载 O O O O O
缓冲中 O X O O O
播放中 O X O O O
已暂停 O O X O O
已停止 O O O X O
等待网络 O X O O X
失败 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

交流