Create a great spatial playback experience
Spatial Computing 进阶 20m

打造出色的空间视频播放体验

Create a great spatial playback experience

2023年6月5日

在 Apple 官方观看视频

一句话判断

如果你要在 visionOS 上做视频播放,用 AVPlayerViewController 就够了——它已经为你处理了 3D 视频、空间音频和 RealityKit 渲染的集成,你只需要确保用 visionOS SDK 编译并把播放器全屏展示。

这场 Session 讲了什么

Session 介绍了 visionOS 上视频播放的最佳实践,核心信息是:尽量复用你现有的 AVFoundation + AVKit 代码。

开箱即用的体验。AVFoundation 负责流媒体、解析、解码和同步。AVKit 的 AVPlayerViewController 在 visionOS 上被增强为使用 RealityKit 渲染——视频可以无缝融入用户周围的空间环境中,音频也会响应环境(空间音频)。播放控件包括标准的播放/暂停/快进等,还有平台特有的能力。

最低要求:Xcode 项目必须使用 visionOS SDK 编译。用 iOS SDK 编译的兼容 App 会获得 iOS 兼容的播放体验(不会自动获得空间增强)。使用方式与 iOS/tvOS 完全相同——创建 AVPlayerViewController,设置 player 属性,然后全屏展示。

新的媒体格式。AVFoundation 增强了对新媒体格式的支持,包括 3D 视频,以利用 visionOS 的独特能力。

展示方式的选择。标准的窗口展示、全屏沉浸式展示、以及通过 RealityKit 自定义渲染管线展示。Session 对比了不同方式的适用场景。

值得深挖的点

iOS SDK vs visionOS SDK 编译的差异:这是一个容易忽略的细节。如果你的 App 使用了 iOS 的兼容模式运行,视频播放器会获得基本的播放功能,但不会自动获得空间渲染增强。要获得完整体验,必须用 visionOS SDK 原生编译。

RealityKit 的渲染增强:视频通过 RealityKit 渲染意味着它可以与环境中的 3D 物体进行正确的遮挡和光照交互。这不是简单的”在一个窗口里放视频”——视频内容与空间环境是融合的。

空间音频的自动处理:当视频通过 AVPlayerViewController 播放时,音频自动获得空间化处理。如果你的 App 已经使用了 AVFoundation 的音频管线,不需要额外配置。

代码片段

在 visionOS 上展示视频播放(与 iOS 代码几乎相同):

import AVKit
import SwiftUI

struct VideoPlayerView: View {
    let videoURL: URL

    var body: some View {
        // 使用 AVPlayerViewController —— 与 iOS 代码一致
        VideoPlayer(player: AVPlayer(url: videoURL))
    }
}

// 更灵活的方式:直接使用 AVPlayerViewController
struct CustomPlayerView: UIViewControllerRepresentable {
    let player: AVPlayer

    func makeUIViewController(context: Context) -> AVPlayerViewController {
        let controller = AVPlayerViewController()
        controller.player = player
        return controller
    }

    func updateUIViewController(_ uiViewController: AVPlayerViewController,
                                 context: Context) {}
}

最佳实践

  • 使用 visionOS SDK 编译项目以获得完整的空间播放体验
  • 复用现有的 AVFoundation/AVKit 代码,无需学习新的 API
  • 让 AVPlayerViewController 填满窗口以获得最佳沉浸感
  • 不要自己实现播放控件——系统的控件已经针对 visionOS 优化
  • 3D 视频内容需要对应的媒体格式支持,参考相关 Session

还有什么值得关注

  • 3D 视频的具体编码格式和制作工作流
  • 自定义 RealityKit 渲染管线的视频展示方式
  • 空间音频在不同播放场景下的表现
  • 视频播放的性能优化和电池使用
WWDC 2023