
-
了解 Apple 沉浸视频技术
探索 Apple 沉浸视频和 Apple 空间音频格式技术的功能,以打造真正的沉浸式体验。了解新的 ImmersiveMediaSupport 框架,该框架可读取和写入必要的元数据来实现 Apple 沉浸视频。了解在单独的文件中编码和发布 Apple 沉浸视频内容以通过 HLS 进行播放或流媒体播放时应遵循的准则。 为了充分从这个讲座中获益,建议你先观看“探索 visionOS 的视频体验”。
章节
- 0:00 - 简介
- 0:48 - Apple 沉浸视频概览
- 2:36 - Apple 沉浸视频元数据
- 5:13 - 读取 AIVU 文件
- 7:16 - 写入 AIVU 文件
- 8:43 - 发布 Apple 沉浸视频内容
- 10:29 - 预览 Apple 沉浸视频内容
- 11:21 - Apple 空间音频格式
- 12:39 - Apple Positional Audio Codec
资源
- Authoring Apple Immersive Video
- AVFoundation
- AVPlayerItemMetadataOutput
- Core Media
- HTTP Live Streaming (HLS) authoring specification for Apple devices
- Immersive Media Support
- What's new in HTTP Live Streaming
相关视频
WWDC25
-
搜索此视频…
嗨 我叫 Blake 是 Apple 沉浸视频团队的工程师 在这个视频中 我将介绍 macOS 和 visionOS 26 中的 新功能 这些功能用于制作 Apple 沉浸视频 WWDC25 讲座 “探索 visionOS 的视频体验” 讲解了 visionOS 26 支持的视频格式规范 并大概介绍了 Apple 沉浸视频 它是这次讲座的基础 所以一定要先看上述讲座 在这个视频中 我将介绍 Apple 沉浸视频的功能 和空间音频技术 帮助你打造真正的沉浸式体验 我们先来看看 Apple 沉浸视频 Apple 沉浸视频是 极高质量的沉浸式体验 它在 Apple Vision Pro 上播放 具有高保真度的视频 和完全沉浸式音效 让你仿佛身临其境 由于内容极其逼真 因此需要使用特殊的摄像机 才能拍摄如此高保真度的视频 比如 Blackmagic URSA Cine Immersive 这种摄像机专为 Apple 沉浸视频而设计
Apple 沉浸视频摄像机 在出厂时经过特殊校准 以准确记录每个 立体镜头的精确曲率
每个视频文件中都 包含这个校准信息 校准信息在视频元数据中 用于准确地投影视频
这张表格 来自 WWDC25 的讲座 “探索 visionOS 的视频体验” 列出了 visionOS 26 支持的 不同格式 尤其是 Apple 沉浸视频 它使用参数化投影 来帮助校准摄像机 macOS 和 visionOS 26 现在推出了 Immersive Media Support 框架 让你可以创建自定工作流程 它允许读取和写入 Apple 沉浸视频的关键元数据 并提供在编辑工作流程中 预览内容的功能 为了创建一些工具 来支持视频制作流程 例如非线性编辑软件 或视频压缩和编码工具 我将介绍如何读取和写入 Apple 沉浸视频、 如何发布内容供所有人观看 以及如何在制作过程中预览内容 首先我要从元数据开始 它用于实现 Apple 沉浸视频体验 Apple 沉浸视频 可以使用多台摄像机制作 每台摄像机的校准都不同 它们各自拍摄的画面组合起来 描绘出场地的全貌 Immersive Media Support 框架 中的 VenueDescriptor 类型 包含场地中组合使用的所有摄像机 VenueDescriptor 信息 存储的形式是 Apple Immersive Media Embedded 亦即 AIMEData 我将在讲座后半部分 更详细地介绍 VenueDescriptor 类型中有 对摄像机 和摄像机视图模型的引用 具有添加和移除摄像机的功能 还有对 AIMEData 的引用 并且可以将它保存到 URL 这在之后会很重要 视频中使用的每台摄像机 除校准信息外 还有更多信息 遮罩或边缘融合的点 使用 alpha 通道 来遮蔽画面的边缘
此外摄像机校准信息 还有一些其他功能 例如设置摄像机的原点位置信息 而且摄像机校准信息中还包含 自定背景环境 要了解 VenueDescriptor 和沉浸式摄像机的 所有功能 请查看 Immersive Media Support 文档 由于摄像机校准针对的是 输出视频中的视频帧 因此要有动态元数据来明确 给定帧应使用哪种校准 在 Immersive Media Support 框架中 还有其他定时动态元数据命令 它们表示为呈现命令 会多路复用到 输出的 QuickTime 文件中 每个视频帧都可以包含 多个呈现命令 这些命令与视频轨道中的 每一帧一起存在 另一个呈现命令是镜像翻转 在编辑中因为各种原因 都会用到这个命令 它会将左右眼的画面 沿 y 轴翻转 需要注意的是 由于沉浸式摄像机 使用立体镜头 这使得镜像翻转 的编辑过程更具挑战性 因为左右眼的图像被交换了 但借助 PresentationCommand 这一切都会由 visionOS 在播放期间自动处理 除了摄像机校准和镜像翻转命令外 还有渐隐效果 这是动态渲染的 不会嵌入到视频帧中 如需详细了解这些命令 请参阅 PresentationDescriptor 和 PresentationCommand 类型 现在 我将介绍如何在你的 App 中 使用 Apple 沉浸视频 要将内容分段为 HLS、 编辑 Apple 沉浸视频文件 或创建自己的自定播放器 读取元数据都很重要 在制片过程中 通常会需要 单个、基于文件的 独立 Apple 沉浸视频体验 这就可以使用 Apple Immersive Video Universal 文件类型 Apple Immersive Video Universal 即 AIVU 文件 是输出视频的容器 其中多路复用了 PresentationDescriptor 并且还包含 VenueDescriptor 作为元数据
在 visionOS 上 AIVU 文件可以 通过“快速查看” 从“文件”App 中播放 要在你的 App 中以单独文件 或 HLS 的形式 播放 Apple 沉浸视频 请观看 WWDC25 讲座“支持 visionOS App 播放沉浸视频” 如果你要构建 App 或服务来 流式播放 Apple 沉浸视频 或与他人分享 Apple 沉浸视频内容 AIVU 文件是一种理想的方式 可以轻松导入或共享内容 并附带所有必要的元数据 除了新的 Immersive Media Support 框架外 AV Foundation 中也推出了 新的 API 帮助读取和写入 Apple 沉浸视频 要从 AIVU 文件中读取 VenueDescriptor 可以用你熟悉的 AVFoundation API 来载入素材的元数据 我们新增了 quickTimeMetadataAIMEData 标识符 用于筛选特定的元数据 以将 AIMEData 载入为 VenueDescriptor 要读取 PresentationDescriptor 元数据 请获取与每个视频帧的呈现时间戳 同步的元数据组 根据 quickTimeMetadataPresentationImmersiveMedia 标识符来筛选 并将值解码为 PresentationDescriptor 类型 要更详细地了解 如何获取定时元数据组 请参阅 AV Foundation 中的 AVPlayerItemMetadataOutput API 如果你要写入 Apple 沉浸视频 用于制片工具 或作为非线性编辑软件的 输出内容 则可以创建自己的 AIVU 文件 创建 Apple 沉浸视频时 有几点务必要知晓 对于视频素材投影类型 必须使用 AppleImmersiveVideo 这种投影类型为参数化类型 专门用于 Apple 沉浸视频 所以可以获取准确的投影方式 你还需要使用 AVAssetWriter 将 VenueDescriptor 和 PresentationCommand 值 写入视频素材元数据 使用 VenueDescriptor 来检索 AIMEData 将它保存到 AVMetadataItem 中 并用 AIMEData 标识符来标识 对于 PresentationCommands 用 PresentationDescriptor 读取器 来获取特定时间的命令 并使用我前面提到的呈现标识符 来创建定时 AVMetadataItem 使它与提供的时间 和视频帧缓冲区持续时间同步 创建 AIVU 文件后 你可以在 Immersive Media Support 框架中 用 AIVUValidator 的 validate 函数来验证 验证中如果有问题就会触发错误 如果有效 则返回 true 要详细了解如何使用 AVAssetWriter 写入 AIVU 文件 请参考 “制作 Apple 沉浸视频” 示例项目 要发布 Apple 沉浸内容 请使用 HLS 分段 将视频直接 流式传输到应用程序 Apple Vision Pro 能够以每只 眼睛 4320 x 4320 的推荐分辨率 渲染 MV-HEVC 每秒 90 帧 使用 P3-D65-PQ 色彩空间 以及 Apple 空间音频 后者我将在视频中稍后介绍 分段 Apple 沉浸视频的 推荐带宽等级范围为: 平均带宽从 最低 25 Mbps 到 100 Mbps 峰值带宽为 50-150 Mbps 在设定你自己的带宽等级时 一定要在质量和文件大小之间 做出权衡 同时保持相同的分辨率和帧速率 在构建 HLS 播放列表时 你需要将 VenueDescriptor 作为 AIMEData 保存到一个文件中 并与 HLS 播放列表一起存放 这样 Apple Vision Pro 才能正确渲染内容 要创建 AIME 文件 使用 save 函数保存 VenueDescriptor 对象 并将 AIME 文件 拷贝到 HLS 播放列表中 对 QuickTime 文件进行分段时 请务必保留 视频片段的元数据轨道 以便保留 PresentationDescriptor 命令 在 HLS 多变体播放列表中 要注意几个重要的标签 Apple 沉浸视频 需要 12 或更高版本 场地描述数据 ID 指向 AIME 文件 内容类型为完全沉浸式 而且除了使用 APAC 音频 这个我将在视频中稍后介绍 所需的视频布局必须是立体视频 并且要使用 Apple 沉浸视频投影 Immersive Media Support 框架中 另一个重要的新 API 是 ImmersiveMediaRemotePreviewSender 和 ImmersiveMediaRemotePreviewReceiver 请务必注意 这种预览方法 只支持比特率较低的 Apple 沉浸视频 并应该在编辑工作流程中使用 因为这时快速预览很有用 而且尚未处理整个视频文件 举一个例子就是 一边剪辑视频 一边在 Apple Vision Pro 上观看 这些 API 旨在 将 Apple 沉浸视频帧 从 Mac 发送到 Apple Vision Pro ImmersiveMediaRemotePreviewSender 和 ImmersiveMediaRemotePreviewReceiver 可以将沉浸视频帧 发送到一个或多个接收端 并使用自定合成器 在 visionOS 应用程序中 实现实时预览 有关更多信息 请查看 Immersive Media Support文档 在打造引人入胜的沉浸式体验时 空间音频与视频同样重要 我们为空间音频创建了 一种新的格式 称为 Apple Spatial Audio Format 缩写 ASAF ASAF 可用于打造 真正身临其境的音频体验 Apple Positional Audio Codec 缩写 APAC 用于对这个音频格式 进行编码以便传输 ASAF 使用声学线索来渲染音频 可打造真正环绕式的 逼真音频体验 它包括新的元数据和线性 PCM 以及内置于 Apple 平台中的 强大全新空间渲染器 它通过众多点声源和 高分辨率声音场景 或高阶声场 生成高分辨率空间音频 渲染的音频完全根据 音频对象的位置和方向 以及听者的位置和方向 进行自适应调整 而绝非预先嵌入 ASAF 可呈现来自 四面八方任何位置、 任何距离的声音 ASAF 通过包含线性 PCM 信号 和元数据的广播 Wave 文件 进行传输 通常在制作过程中使用 ASAF 若要流式传输 ASAF 音频 需要将音频编码为 mp4 APAC 文件 APAC 可高效地分发 ASAF 并且所有 Apple 沉浸视频体验 都需要 APAC 除 watchOS 外 所有 Apple 平台 都有APAC 播放功能 这个功能支持多声道、音频对象、 高阶声场 对白、双耳音频、 互动元素 此外还支持 配置扩展的元数据 这种编解码器十分高效 能够在低至 64 kbps 的比特率下 实现沉浸式空间体验 要使用 HTTP Live Streaming 传输空间音频 需要在媒体标签中包含音频通道信息 并在流信息标签中 指定 APAC 作为音频编解码器 有关 HLS 的新功能 特别是对 APAC 音频的支持 请参阅“HLS 新功能”一文 ASAF 内容可以使用 Apple 的 Pro Tools 插件创建并编码为 APAC 用户有许可证即可使用这个插件 此外也可用 Blackmagic Design 的 DaVinci Resolve Studio 编辑器 来创建和编码 在这场讲座中 我介绍了 元数据的基础知识 元数据是 Apple 沉浸视频的关键 如何使用 Immersive Media Support 框架 来读取和写入 此外还讲了空间音频 希望你能丰富 App 功能 让它支持 Apple 沉浸视频和 空间音频 打造真正的沉浸式体验 如需进一步了解 visionOS 的 其他沉浸视频格式 请观看 “了解 Apple Projected Media Profile” 要了解如何播放 Apple 沉浸视频 请观看 WWDC25 讲座“支持 visionOS App 播放沉浸视频” 我真的很喜欢 Apple 沉浸视频 真希望你们能打造更多精彩体验 要是你制作出了 Apple Immersive Video Universal 文件 一定要发给我欣赏一下! 谢谢大家!
-
-
6:23 - Read VenueDescriptor from AIVU file
func readAIMEData(from aivuFile: URL) async throws -> VenueDescriptor? { let avAsset = AVURLAsset(url: aivuFile) let metadata = try await avAsset.load(.metadata) let aimeData = metadata.filter({ $0.identifier == .quickTimeMetadataAIMEData }).first if let dataValue = try await aimeData.load(.value) as? NSData { return try await VenueDescriptor(aimeData: dataValue as Data) } return nil }
-
6:50 - Read PresentationDescriptor from AIVU playback
func presentation(timedMetadata: [AVTimedMetadataGroup]) async throws -> [PresentationDescriptor] { var presentations: [PresentationDescriptor] = [] for group in timedMetadata { for metadata in group.items { if metadata.identifier == .quickTimeMetadataPresentationImmersiveMedia { let data = try await metadata.load(.dataValue) { presentations.append( try JSONDecoder().decode(PresentationDescriptor.self, from: data) ) } } } } return presentations }
-
7:52 - Create AVMetadataItem from VenueDescriptor
func getMetadataItem(from metadata: VenueDescriptor) async throws -> AVMetadataItem { let aimeData = try await metadata.aimeData let aimeMetadataItem = AVMutableMetadataItem() aimeMetadataItem.identifier = .quickTimeMetadataAIMEData aimeMetadataItem.dataType = String(kCMMetadataBaseDataType_RawData) aimeMetadataItem.value = aimeData as NSData return aimeMetadataItem }
-
8:02 - Create timed AVMetadataItem from PresentationDescriptorReader
func getMetadataItem(reader: PresentationDescriptorReader, time: CMTime, frameDuration: CMTime) -> AVMetadataItem? { let commands = reader.outputPresentationCommands(for: time) ?? [] if commands.isEmpty { return nil } let descriptor = PresentationDescriptor(commands: commands) let encodedData = try JSONEncoder().encode(descriptor) let presentationMetadata = AVMutableMetadataItem() presentationMetadata.identifier = .quickTimeMetadataPresentationImmersiveMedia presentationMetadata.dataType = String(kCMMetadataBaseDataType_RawData) presentationMetadata.value = encodedData as NSData presentationMetadata.time = time presentationMetadata.duration = frameDuration return presentationMetadata }
-
8:20 - Validate AIVU file
func validAIVU(file aivuFile: URL) async throws -> Bool { return try await AIVUValidator.validate(url: aivuFile) }
-
9:31 - Save AIME file
let aimeFile = FileManager.default.temporaryDirectory.appendingPathComponent("primary.aime") try? await venueDescriptor.save(to: aimeFile)
-
-
- 0:00 - 简介
visionOS 26 带来了诸多新功能,支持利用空间音频打造 Apple 沉浸视频体验。
- 0:48 - Apple 沉浸视频概览
Apple 沉浸视频可在 Apple Vision Pro 上提供高保真度立体视频播放效果和完全沉浸式的音效。Blackmagic URSA Cine Immersive 等专业摄影机经过校准,可以提供每个立体镜头的精确曲率,并将校准信息与视频文件一起传递,以确保正确投影。macOS 和 visionOS 26 通过 Immersive Media Support 框架支持这种格式,从而为内容创作、预览和发布启用自定工作流程。
- 2:36 - Apple 沉浸视频元数据
Apple 沉浸视频可以使用多台摄像机制作,每台摄像机的校准都各不相同。它们各自拍摄的画面组合起来描绘出场地的全貌。VenueDescriptors 包括每个视频帧的摄像机信息、边缘融合遮罩、自定背景和动态校准数据,并存储为 Apple Immersive Media Embedded (AIMEData) 格式。 Immersive Media Support 框架支持集成各种呈现命令,例如镜像翻转、渐隐和动态渲染,这些命令会在播放期间由 visionOS 自动处理,从而简化立体沉浸式视频的编辑过程。如需了解更多详细信息,请参考 PresentationDescriptor 和 PresentationCommand 类型。
- 5:13 - 读取 AIVU 文件
Apple Immersive Video Universal (AIVU) 文件是输出视频的容器,其中多路复用了元数据。你可以在 visionOS 上通过“文件”App 中的“快速查看”功能播放 AIVU 文件,也可以使用 AVKit 在自定 App 中播放。新的 quickTimeMetadataAIMEData AVAsset 元数据标识符可以将 AIMEData 作为 VenueDescriptor 来访问,而 PresentationDescriptor 元数据可通过 AVTimedMetadataGroup 获得。
- 7:16 - 写入 AIVU 文件
若要创建 Apple Immersive Video Universal (AIVU) 文件,请使用 AppleImmersiveVideo 投影类型,并使用 AVAssetWriter 将 VenueDescriptor 和 PresentationCommand 值写入素材的元数据。然后可以使用 AIVUValidator 的 validate 函数来验证文件。如需了解更多详细信息,请参阅“制作 Apple 沉浸视频”示例项目。
- 8:43 - 发布 Apple 沉浸视频内容
要发布你的 Apple 沉浸式内容,请对 MV-HEVC 视频进行 HLS 分段,这类视频为每只眼睛 4320x4320,每秒 90 帧,采用 P3-D65-PQ 色彩空间。分段 Apple 沉浸视频的推荐带宽等级范围为:平均带宽 25-150 Mbps。你要将 AIME 文件 (VenueDescriptor) 和 APAC 音轨一起添加到 HLS 多变体播放列表中。播放列表需要指定版本 12 或更高版本、完全沉浸式内容类型,以及立体视频布局和 Apple 沉浸视频投影。
- 10:29 - 预览 Apple 沉浸视频内容
Immersive Media Support 框架中新增的 ImmersiveMediaRemotePreviewSender API 和 ImmersiveMediaRemotePreviewReceiver API 支持在编辑期间将 Apple 沉浸视频从 Mac 发送到 Apple Vision Pro,进行低比特率实时预览,从而在编辑时实时查看。如需了解更多详细信息,请查看 Immersive Media Support 文档。
- 11:21 - Apple 空间音频格式
Apple Spatial Audio Format (ASAF) 是一种新的制作格式,它使用新的元数据、线性 PCM 和空间渲染器来创建高分辨率空间音频。ASAF 可实现真正环绕式的逼真音效,呈现出来自四面八方、距离和位置各异的声音,并可自适应调整。ASAF 包含在带有线性 PCM 信号和元数据的广播 Wave 文件中。
- 12:39 - Apple Positional Audio Codec
要通过 HLS 流式传输 ASAF 音频,请使用 Apple Pro Tools 插件或 Blackmagic Design 的 DaVinci Resolve Studio 编辑器将音频编码为 MP4 APAC 文件。所有 Apple 沉浸视频体验都必须要有 APAC,并且它适用于除 watchOS 之外的所有 Apple 平台,能够以低比特率高效地呈现空间音频。你要在媒体标签中包含通道信息,并在流信息标签中指定 APAC,以通过 HLS 提供空间音频。