Pillarbox logo

概述

Releases Platforms SPM compatible GitHub license TestFlight

Pillarbox 是基于 AVFoundation 和 AVKit 实现的 iOS 和 tvOS 现代响应式 SRG SSR 播放器生态系统。 Pillarbox 的设计着眼于稳健性、效率和灵活性,并可对以下内容进行完全自定义:

重要提示

即使 Pillarbox 提供了我们公司特有的功能,但它的播放器是完全通用的,可以用来播放任何类型的内容。

功能特点

Pillarbox 播放器提供了您可能期望的所有基本播放功能:

此外,Pillarbox 还提供了通过专用软件包播放所有 SRG SSR 内容的功能。

展示

以下是一些可以使用 Pillarbox 和 SwiftUI 实现的布局示例,直接取自我们的演示项目:

Showcase

从左到右:

兼容性

该库适用于在 iOS 16、tvOS 16 及更高版本上运行的应用程序。

集成

可以使用 Swift Package Manager 直接在 Xcode 中集成该库。 您也可以直接在相关的 Package.swift 清单中将该库声明为另一个库的依赖项。

如果您希望您的应用程序作为 iPad 应用程序在 Silicon Mac 上运行,则必须将 -weak_framework MediaPlayer 添加到目标其他链接器标志设置中。

文档

Pillarbox 文档包括文章、教程和 API 参考,以帮助您了解更多有关可用功能以及如何将它们集成到您的应用程序中的信息。

提示

如果您在文档中发现错误,或者缺少某些文档,请提交专门的 问题。 您还可以通过 pull requests 直接提交文档改进。

DocC 文档

文档以 DocC 文档目录的形式提供。 必须通过使用 Xcode 打开项目并选择产品 > 构建文档来构建此目录。 然后,您可以直接从 Xcode 文档窗口中访问它。

在线文档

Pillarbox 提供的每个主要产品的文档也可以在 Swift Package Index 上找到

以下是配套产品的文档

提示

从上述链接获得的文档适用于最新标签。 使用 Swift Package Index 导航栏顶部快速切换到另一个标签或 main

其他文档

还可以通过以下链接获取更多文档:

插件

该软件包提供一个插件,该插件会自动将正确的版本信息插入到二进制文件中。 首次使用 Xcode 构建集成 Pillarbox 的项目时,必须以交互方式信任此插件。

在持续集成服务器上,您必须通过设置适当的默认值来自动信任插件

defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES

如果您使用的是 Xcode Cloud,可以使用 自定义构建脚本来实现此目的。

如果您的项目直接使用 xcodebuild 构建,则可以通过传递 -skipPackagePluginValidation 选项来实现相同的效果。

重要提示

诸如 GitHub Actions、Bitrise、CircleCI 和 Travis CI 之类的构建服务通常提供缓存机制来加速 CI/CD 管道,包括缓存 Swift 包源。 Pillarbox 利用其包存储库中的 Git 标签来自动确定正确的版本。 但是,此过程取决于拥有最新的本地标签,而当使用包缓存时,可能无法保证这一点。

为了确保准确性和可靠性,我们建议在通过交付管道交付应用程序时执行全新构建。 缓存仍然可以用于日常持续集成任务,以节省开发期间的时间。

代码示例

使用 Pillarbox 创建自定义视频播放器用户界面从未如此简单。 只需实例化一个 Player 并立即开始在 SwiftUI 中构建您的用户界面:

import PillarboxPlayer
import SwiftUI

struct PlayerView: View {
    @StateObject private var player = Player(
        item: .simple(url: URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8")!)
    )

    var body: some View {
        ZStack {
            VideoView(player: player)
            Button(action: player.togglePlayPause) {
                Image(systemName: player.shouldPlay ? "pause.circle.fill" : "play.circle.fill")
                    .resizable()
                    .frame(width: 80, height: 80)
            }
        }
        .onAppear(perform: player.play)
    }
}

借助 SwiftUI 的表达能力、我们丰富的播放 API 以及您可以使用的组件集,您将立即拥有一个功能齐全的播放器用户界面。

贡献

如果您想为该项目做出贡献,请查看我们的贡献指南

许可证

有关更多信息,请参见LICENSE文件。