
-
了解 Apple Projected Media Profile
深入了解 Apple Projected Media Profile (APMP),并探索 APMP 如何通过视频扩展使用信号技术在 QuickTime 和 MP4 文件中实现 180º/360º 和宽视角投影。我们将针对如何使用 OS 提供的框架和工具对包含 APMP 的媒体进行转换、读/写、编辑和编码提供相关指导。我们还将介绍 Apple Positional 音频编解码器 (APAC) 的功能,这些功能可用于创建和交付空间音频内容,从而打造出极具沉浸感的体验。
章节
- 0:00 - 简介
- 1:12 - 非矩形投影视频基础知识
- 3:42 - Apple Projected Media Profile 规格
- 5:59 - APMP 内容采集和工作流程
- 8:33 - 素材转化功能
- 10:45 - APMP 视频读取
- 11:47 - APMP 视频剪辑
- 13:42 - APMP 视频发布
- 16:14 - Apple Positional Audio Codec
资源
- Apple HEVC Stereo Video Interoperability Profile
- AVFoundation
- Converting projected video to Apple Projected Media Profile
- Core Media
- HTTP Live Streaming
- HTTP Live Streaming (HLS) authoring specification for Apple devices
- QuickTime and ISO Base Media File Formats and Spatial and Immersive Media
- Using Apple’s HTTP Live Streaming (HLS) Tools
相关视频
WWDC25
WWDC22
WWDC21
-
搜索此视频…
大家好 我叫 Jon 是 Core Media Spatial Technologies 团队的工程师 在本视频中 我将介绍相关基础知识 带大家了解非直线视频投影在 QuickTime 文件中的表示方式 此外 我还将介绍我们针对 Core Media、 Video Toolbox 和 AV Foundation 框架推出的更新 用于读取、写入、编辑和发布 Apple Projected Media Profile 或 APMP 视频 最后 我将介绍如何使用 Apple Positional Audio Codec 将沉浸式空间音频 添加到投影视频媒体 无论你是供应 180°、360° 或宽视野相机的 相机供应商 还是视频编辑软件的开发者 亦或是想要探索新型媒体的 App 开发者 本视频都能让你有所收获 建议观看 “探索 visionOS 的视频体验” 了解 visionOS 26 支持的 沉浸式视频配置文件 以及视频投影概念的关键基础知识 我们先来回顾一下 “探索 visionOS 的视频体验”中 介绍的非直线视频基础知识 visionOS 26 新增了 Apple Projected Media Profile 支持通过消费级相机设备拍摄的 180°、360°和宽视野视频 投影媒体配置文件的关键区分要素 是投影类型 2D、3D 和空间视频使用直线投影 180°视频使用半等距柱状投影 360°视频使用等距柱状投影 而宽视野视频使用参数化投影 等距柱状投影 也称为等距圆柱投影 Final Cut Pro 等编辑应用程序 都广泛支持这种投影类型 在等距柱状投影中 全景球体的像素坐标 以纬度和经度值表示 并均匀地投影到 矩形视频帧的行与列中 横轴映射从 -180°到 +180°的经度 纵轴则映射从 -90°到 +90°的纬度 半等距柱状投影原理相似 但视频帧内的 X 坐标 表示的范围为 -90°到 +90° 参数化沉浸投影 表示与广角或鱼眼镜头相关的 内参和镜头畸变参数 内参表示用于拍摄的镜头系统的信息 如焦距、 光学中心以及镜头的倾斜度等 这些参数被称为 3x3 矩阵 记作相机矩阵“K” 用于表示 从 3D 空间坐标 到图像平面上 2D 坐标的转换 此外 参数化沉浸投影 可以表示镜头畸变参数 例如径向畸变 径向畸变参数用于校正桶形畸变 桶形畸变的表现为 由于广角镜头设计的原因 直线离光学中心越远 就会越弯曲 在这张图片中 栅栏立柱呈现出 向镜头边缘弯曲的情况 其他镜头畸变特征 如切向畸变、 投影偏移、径向角度限制 和镜头框调整等 也可以在参数化沉浸投影中指定
介绍完基础知识后 我将简要介绍如何使用 Apple API 与 Apple Projected Media Profile 内容进行交互
首先我将介绍 APMP 视频 如何以 QuickTime 和 MP4 影片文件的形式传输 Apple Projected Media Profile 支持在 QuickTime 和 MP4 文件中 标记 180°、360°和宽视野视频 QuickTime 文件采用分层结构 包括多个容器 可存储各类媒体内容 同时包含音视频轨道 以及描述各轨道详细信息的数据 MP4 的 ISO Base Media File Format 或 ISOBMFF 规范 源自 QuickTime ISOBMFF 文件中数据组织的 基本组件称为“box” 我们针对 visionOS 1 推出了新的 Video Extended Usage 扩展 box 其中包含立体视图信息 用于指示立体或单视场内容 我们为 visionOS 26 的 Video Extended Usage (vexu) 新增了多个 box 以实现对投影媒体配置文件的标记 投影 box 可标记一种投影类型 例如等距柱状、 半等距柱状或参数化沉浸投影 镜头集合 box 包含参数化沉浸投影的 内参、外参以及镜头畸变参数 视图封装 box 包含帧封装图像中 双眼布局的信息 如横向并排或纵向叠加 这是一个单视场等距柱状投影文件 的最简标记示例 投影 box 的 ProjectionKind 表示为等距柱状 立体 180°文件需要立体视图 box 并且 ProjectionKind 标记为半等距柱状 有了这些构建块 还可以标记其他组合 例如立体 360°视频 请查看 “QuickTime 和 ISO Base Media File Format 以及空间和沉浸式媒体”规范 通过 developer.apple.com 可进一步了解投影 box 以及 Apple Projected Media Profile 支持的其他 box 接下来 我将概述一些 拍摄 APMP 内容的方法 以及典型的 APMP 工作流程 有多种相机可用于拍摄 符合 APMP 标准的内容 例如 佳能的 EOS VR 系统 可拍摄和处理立体 180°视频 GoPro MAX 或 Insta360 X5 可拍摄 360°视频 还有 GoPro HERO 13 和 Insta360 Ace Pro 2 等新推出的运动相机 可拍摄宽视野视频 Final Cut Pro 已支持读取和写入 360°格式的 APMP 内容 今年晚些时候 佳能的 EOS VR Utility 和 GoPro Player 等相机视频编辑软件会支持导出包含 Apple Projected Media Profile 标记的 MOV 或 MP4 文件 对于 180°或 360°视频 可使用相机供应商提供的软件 执行拼接、防抖和立体图像校正 等操作 如果编辑器已支持 APMP 可将文件导出为 MOV 或 MP4 格式 其中包含 APMP 标记 最后 隔空投送或使用 iCloud 将文件传输到 Apple Vision Pro 或者 如果你的相机软件尚不支持 Apple Projected Media 你可以使用球面元数据 将视频导出为 180°或 360°格式 然后使用 avconvert macOS 实用工具 可通过命令行执行 也可以在“访达”中 按住 Ctrl 键同时选中一个 或多个视频文件以执行操作 最后 隔空投送或使用 iCloud 将文件传输到 Apple Vision Pro Apple Projected Media Profile 适用于在完整媒体工作流程中 标记投影视频 包括拍摄、编辑和传输 以下是立体 180°工作流程的示例 其中每个步骤都可以使用 APMP 标记 使用 HEVC、RAW 或 ProRes 编解码器拍摄内容 然后使用 ProRes 进行编辑 对于拍摄和编辑 3D 内容 你可以利用帧封装、多画面、 为每只眼睛单独保存影片文件 甚至 在一个影片文件中标记两个视频轨道 在本例中 拍摄需要两个影片文件 而编辑则使用左右并排的 帧封装内容进行处理 可使用多画面 HEVC 或 MV-HEVC 编解码器进行编码和发布 实现在 visionOS 上的 高效传输与播放 现在 我已经介绍了 APMP 规范 和典型的工作流程 我们来回顾一下 macOS 和 visionOS 26 中提供的新功能 以便使用现有媒体 API 处理 APMP 文件 首先 我将介绍素材转换功能 媒体工作流程相关 App 的开发者 需要时间来采用 APMP 标记 因此 我们在 AV Foundation 中 增加了功能 用于识别使用球面元数据 V1 或 V2 标记的兼容素材 兼容的 180°和 360°内容 具有等距柱状投影 可以是帧封装的立体或单视场内容 传递素材创建选项 ShouldParseExternalSphericalTags 可识别直接兼容的球面内容 并合成适当的格式描述扩展 这样 其他系统 API 就能将素材视为 已经过 Apple Projected Media Profile 标记的内容 检查是否存在格式描述扩展 convertedFromExternalSphericalTags 以确定是否解析了球形元数据 visionOS 26 原生支持镜头投影参数 并兼容 GoPro 和 Insta360 等 相机供应商的常用视野模式 在打开这类文件时 “快速查看”会提示进行格式转换 要在应用程序中启用宽视野内容转换 可使用 ImmersiveMediaSupport 框架中的 ParametricImmersiveAssetInfo 对象 这样就会生成视频格式描述 其中包含具有内参和镜头畸变参数的 参数化沉浸投影 适用于兼容的相机模型 使用 isConvertible 属性 可确定是否检测到 来自兼容相机的元数据 并将视频轨道的格式描述 替换为新生成的格式描述 现在 使用这个素材的系统 API 会 将内容识别为宽视野 APMP 请参阅“将投影视频转换为 Apple Projected Media Profile” 示例应用程序 了解如何转换为可传输的 APMP 格式 你可以使用熟悉的系统媒体 API 读取 APMP 视频 Core Media 和 AV Foundation 框架 已进行更新 可支持投影媒体识别和读取 如果需要判断素材 是否符合 APMP 配置文件标准 可能是为了标记 或是为特定播放体验做准备 你可使用 AVAssetPlaybackAssistant 并查找 nonRectilinearProjection 配置选项 要进一步了解构建 APMP 视频播放体验 请观看讲座 “支持 visionOS App 播放沉浸视频”
如果你需要更多细节 首先要检查 mediaCharacteristics 以确定视频轨道是否为 indicatesNonRectilinearProjection 然后 你可以检查 projectionKind 以确定标记的具体投影类型 viewPackingKind 格式描述扩展 可识别帧封装内容 它支持 sideBySide 和 overUnder 帧封装 要编辑投影媒体 请使用 AV Foundation 框架中的 AVVideoComposition 对象 并熟悉 CMTaggedBuffer CMTaggedDynamicBuffer 可用于多个 API 以处理立体内容 包括编辑 API 比如 AVVideoComposition CMTaggedDynamicBuffer 提供了一种指定底层缓冲区 特定属性的方法 这些属性被称为 CM Tag 每个 CM Tag 将包含一个类别和值 这是一个表示 StereoView 类别的 示例 CM Tag 用于标识左眼视图
CMTaggedDynamicBuffer 可被归类到相关的缓冲区中 例如 本示例展示了 在立体视频样本中 左眼和右眼所对应的 CVPixelBuffer 要通过 AVVideoComposition 启用立体视频编辑 我们新增了 API 用于指定合成器生成的 带标记缓冲区的格式 并提供了将这些带标记缓冲区 传递给合成请求的方法 outputBufferDescription 可指定合成器将生成的 CMTaggedBuffer 的类型 在开始合成之前需要对它进行定义 构建 CMTaggedBuffer 立体组合后 可调用 finish 并传递 taggedBuffers
现在我已经介绍了 如何转换、读取和编辑 Apple Projected Media Profile 素材 现在 我将介绍编写的流程
在这个编写 360°单视场视频的 代码示例中 我使用 AVAssetWriter 来创建素材 使用 CompressionPropertyKey 类型来指定 等距柱状投影类型 将压缩属性传递给 AVAssetWriterInput 使用 outputSettings 字典属性 AVVideoCompressionPropertiesKey
接下来 我将为大家带来 发布 APMP 内容的建议
这些是在 visionOS 上播放的 建议限制 视频编解码器参数 应符合 HEVC Main 或 Main 10 标准 并采用 4:2:0 色度子采样 建议使用 Rec 709 或 P3-D65 原色 立体声模式可以是单视场或立体 对于 10 位色深的视频内容 建议单视场分辨率为 7680x3840 立体模式下单眼分辨率为 4320x4320 帧速率因分辨率和位深度而异 建议对 10 位单视场 8K 或立体 4K 视频 使用 30 FPS 位速率编码设置取决于具体内容 并应根据你的用例进行适当选择 但我们建议峰值不超过 150 MB/秒 要进一步了解 Apple 使用的 MV-HEVC 立体视频配置文件 可查看 developer.apple.com 上的 “Apple HEVC 立体视频 互操作性配置文件” 文档 我们更新了 Advanced Video Quality 工具或 AVQT 以支持沉浸式格式 如 3D、空间以及 APMP 180°和 360°内容 同时通过算法增强提高了准确性 AVQT 可用于评估压缩视频内容的 感知质量并精细调整视频编码器参数 它还有助于 HLS 层级位速率的优化 新增功能包括能够基于 对等距柱状投影 和半等距柱状投影的认知 来计算质量指标 HTTP Live Streaming 规范 已进行优化 支持流式传输 Apple Projected Media Profile 并且 Apple 开发者网站上的 新 HLS 工具 也已进行更新 可支持发布 APMP 内容 这是立体 180°素材的清单示例 关键更改在 EXT-X-STREAM-INFORMATION 标签中 REQ-VIDEO-LAYOUT 属性指定了立体 和半等距柱状投影 请注意 地图段还必须包含 formatDescription 扩展 用于标记半等距柱状投影 和立体视图信息 要了解 HLS 位速率层阶梯 和其他 HLS 创作指南的最新信息 请参阅 Apple 开发者网站上的 “HLS 创作规范” 在打造引人入胜的沉浸式体验时 空间音频与视频同等重要 在现实世界中 声音可能来自任意方位 要重现这种体验 就需要能够完整再现 整个声场的技术 因此 我们设计了 Apple Positional Audio Codec (APAC) APAC 的一项重要功能 是对立体混响音频进行编码 从而实现对真实声场的高保真呈现 立体混响音频是一种用于录音、混音 以及播放全向空间音频的技术
立体混响录音 不受特定扬声器布局的限制 因为它通过一组球谐函数 实现声场的数学建模
立体混响音频采集系统使用 特定阵列麦克风组录制 3D 声场环境 然后 使用数字信号处理 将原始麦克风信号转换为 具有方向性的球谐函数成分 所有这些信号组合可以准确地表示 原始声场 Ambisonics 中的“阶”一词指的是 用于表示音频混音的 球面分量的数量 一阶表示 4 个分量或声道 对应 1 个全向声道 以及 3 个分别表示前后、 左右和上下 定向音频的声道 二阶 Ambisonics 使用 9 个分量 而三阶 Ambisonics 使用 16 个分量 更高阶的 Ambisonics 提供更高空间分辨率 Apple Positional Audio Codec 是一种高效的空间音频编解码器 非常适合用于空间音频编码 包括带有 APMP 视频的 Ambisonics APAC 可在除 watchOS 之外的 所有 Apple 平台上解码 iOS、macOS 和 visionOS 上 可通过 AVAssetWriter 访问的 内置 APAC 编码器 支持一阶、二阶和三阶 Ambisonics 这段代码显示了 使用 AVAssetWriter 编码 一阶、二阶或三阶 Ambisonics 所需的最简 outputSettings 对于使用 APAC 编码 并用于 APMP 的 Ambisonics 音频 推荐位速率从一阶的 384 kbps 到三阶的 768 kbps 不等 APAC 音频可通过 HLS 进行分段和流式传输 这里是单视场等距柱状视频的示例 使用 APAC 音频编码 三阶立体混响音轨
现在你已经了解了 Apple Projected Media Profile 在你的 App 或服务中 添加对 APMP 的支持 以支持沉浸式用户生成内容的 播放、编辑与共享 如果你是相机供应商 请在适当的情况下集成 APMP 以解锁 Apple 生态系统中的 播放效果 采用 Apple Positional Audio Codec 将立体混响麦克风采集的 沉浸式音频声场与你的 沉浸式视频内容同步呈现 感谢观看! 现在 我要去拍摄立体 180°视频了
-
-
8:58 - Recognize spherical v1/v2 equirectangular content
// Convert spherical v1/v2 RFC 180/360 equirectangular content import AVFoundation func wasConvertedFromSpherical(url: URL) -> Bool { let assetOptions = [AVURLAssetShouldParseExternalSphericalTagsKey: true] let urlAsset = AVURLAsset(url: url, options: assetOptions) // simplified for sample, assume first video track let track = try await urlAsset.loadTracks(withMediaType: .video).first! // Retrieve formatDescription from video track, simplified for sample assume first format description let formatDescription = try await videoTrack.load(.formatDescriptions).first // Detect if formatDescription includes extensions synthesized from spherical let wasConvertedFromSpherical = formatDescription.extensions[.convertedFromExternalSphericalTags] return wasConvertedFromSpherical }
-
9:54 - Convert wide FOV content from supported cameras
// Convert wide-FOV content from recognized camera models import ImmersiveMediaSupport func upliftIntoParametricImmersiveIfPossible(url: URL) -> AVMutableMovie { let movie = AVMutableMovie(url: url) let assetInfo = try await ParametricImmersiveAssetInfo(asset: movie) if (assetInfo.isConvertible) { guard let newDescription = assetInfo.requiredFormatDescription else { fatalError("no format description for convertible asset") } let videoTracks = try await movie.loadTracks(withMediaType: .video) guard let videoTrack = videoTracks.first, let currentDescription = try await videoTrack.load(.formatDescriptions).first else { fatalError("missing format description for video track") } // presumes that format already compatible for intended use case (delivery or production) // for delivery then if not already HEVC should transcode for example videoTrack.replaceFormatDescription(currentDescription, with: newDescription) } return movie }
-
10:58 - Recognize Projected & Immersive Video
// Determine if an asset contains any tracks with nonRectilinearVideo and if so, whether any are AIV import AVFoundation func classifyProjectedMedia( movieURL: URL ) async -> (containsNonRectilinearVideo: Bool, containsAppleImmersiveVideo: Bool) { let asset = AVMovie(url: movieURL) let assistant = AVAssetPlaybackAssistant(asset: asset) let options = await assistant.playbackConfigurationOptions // Note contains(.nonRectilinearProjection) is true for both APMP & AIV, while contains(.appleImmersiveVideo) is true only for AIV return (options.contains(.nonRectilinearProjection), options.contains(.appleImmersiveVideo)) }
-
11:22 - Perform projection or viewPacking processing
import AVFoundation import CoreMedia // Perform projection or viewPacking specific processing func handleProjectionAndViewPackingKind(_ movieURL: URL) async throws { let movie = AVMovie(url: movieURL) let track = try await movie.loadTracks(withMediaType: .video).first! let mediaCharacteristics = try await track.load(.mediaCharacteristics) // Check for presence of non-rectilinear projection if mediaCharacteristics.contains(.indicatesNonRectilinearProjection) { let formatDescriptions = try await track.load(.formatDescriptions) for formatDesc in formatDescriptions { if let projectionKind = formatDesc.extensions[.projectionKind] { if projectionKind == .projectionKind(.equirectangular) { // handle equirectangular (360) video } else if projectionKind == .projectionKind(.halfEquirectangular) { // handle 180 video } else if projectionKind == .projectionKind(.parametricImmersive) { // handle parametric wfov video } else if projectionKind == .projectionKind(.appleImmersiveVideo) { // handle AIV } } if let viewPackingKind = formatDesc.extensions[.viewPackingKind] { if viewPackingKind == .viewPackingKind(.sideBySide) { // handle side by side } else if viewPackingKind == .viewPackingKind(.overUnder) { // handle over under } } } } }
-
12:51 - Specify outputBufferDescription for a stereoscopic pair
var config = try await AVVideoComposition.Configuration(for: asset) config.outputBufferDescription = [[.stereoView(.leftEye)], [.stereoView(.rightEye)]] let videoComposition = AVVideoComposition(configuration: config)
-
13:01 - Finish an asyncVideoCompositionRequest with tagged buffers
func startRequest(_ asyncVideoCompositionRequest: AVAsynchronousVideoCompositionRequest) { var taggedBuffers: [CMTaggedDynamicBuffer] = [] let MVHEVCLayerIDs = [0, 1] let eyes: [CMStereoViewComponents] = [.leftEye, .rightEye] for (layerID, eye) in zip(MVHEVCLayerIDs, eyes) { // take a monoscopic image and convert it to a z=0 stereo image with identical content for each eye let pixelBuffer = asyncVideoCompositionRequest.sourceReadOnlyPixelBuffer(byTrackID: 0) let tags: [CMTag] = [.videoLayerID(Int64(layerID)), .stereoView(eye)] let buffer = CMTaggedDynamicBuffer(tags: tags, content: .pixelBuffer(pixelBuffer!)) taggedBuffers.append(buffer) } asyncVideoCompositionRequest.finish(withComposedTaggedBuffers: taggedBuffers) }
-
-
- 0:00 - 简介
了解非直线视频投影在 QuickTime 文件中的表示方式。探索用于创建、编辑和发布支持空间音频的 APMP 视频的新 API。本视频专为相机供应商、视频编辑软件开发者以及有意设计沉浸式媒体 App 的开发者量身打造,尤其面向 visionOS 平台。
- 1:12 - 非矩形投影视频基础知识
visionOS 26 引入了 Apple Projected Media Profile,它支持除传统 2D、3D 和空间视频之外的各种非直线视频格式。此配置文件包括用于 180°视频的半等距柱状投影、用于 360°视频的等距柱状投影,以及用于通过广角或鱼眼镜头拍摄的宽视野视频的参数化投影。 等距柱状投影将球面坐标中的纬度和经度角度映射到一个矩形画框中。参数化沉浸投影考虑了镜头畸变参数,例如焦距、光学中心、倾斜和径向畸变等,可校正广角镜头中常见的桶形畸变。这使得宽视野视频内容能够以更准确且更具沉浸感的方式呈现。
- 3:42 - Apple Projected Media Profile 规格
Apple Projected Media Profile (APMP) 支持标记 180°、360°和宽视野投影。Apple API 让你能够处理 QuickTime 和 MP4 文件中的 APMP 内容。 在 visionOS 26 中,Video Extended Usage (vexu) 中新增的 box 可指定投影类型、镜头参数和视图封装排列方式。这些 box 可用于表示各种沉浸式媒体格式,例如单视场等距柱状投影和立体 180°视频。
- 5:59 - APMP 内容采集和工作流程
各种相机和编辑软件支持 APMP,可用于拍摄和编辑 180°和 360°视频。在整个工作流程 (包括拍摄、编辑和传输) 中使用 APMP 标记,可实现在 visionOS 设备上的高效播放。对于不支持 APMP 的软件,在将文件传输到 Apple Vision Pro 之前,你可以使用球面元数据和 avconvert 实用工具进行转换。
- 8:33 - 素材转化功能
macOS 和 visionOS 26 引入了处理 APMP 文件的新功能。AVFoundation 现在可识别兼容的球面素材并可合成 APMP 标记。visionOS 26 提供了对主流相机供应商的镜头投影参数和视角模式的内建支持,可在打开文件时自动进行转换。借助全新的框架与对象,可将宽视野内容转换为 APMP 格式,从而让系统 API 能够自动识别相关内容。
- 10:45 - APMP 视频读取
借助 visionOS 中更新的 Core Media 和 AVFoundation 框架,你可以使用系统媒体 API 读取和识别 APMP 视频。“AVAssetPlaybackAssistant”可用于查找非直线投影配置,而“viewPackingKind”格式描述扩展则支持横向并排和纵向叠加帧封装,以实现引人入胜的视频播放体验。
- 11:47 - APMP 视频剪辑
AVFoundation 的 AVVideoComposition 对象和 CMTaggedDynamicBuffer 可用于立体视频编辑。CMTaggedDynamicBuffer 包含具有类别和值的 CM Tag,可对左眼和右眼的 CVPixelBuffer 等相关缓冲区进行分组。要启用立体编辑功能,需要定义 outputBufferDescription,然后在构建立体组合后,将带有标记的缓冲区传递给合成请求。
- 13:42 - APMP 视频发布
在 visionOS 上发布 APMP 内容需要使用 HEVC Main 或 Main 10 编码,并符合特定的原色和分辨率要求。立体声模式可以是单视场或立体,推荐帧速率和位速率因分辨率而异。 Apple Advanced Video Quality Tool (AVQT) 已经过更新,支持沉浸式格式并可评估视频质量。HLS 已得到增强,支持 APMP 内容的流式传输,Apple 开发者网站上已提供更新后的工具与相关指南。
- 16:14 - Apple Positional Audio Codec
Apple Positional 音频编解码器 (APAC) 技术专门用于对立体混响音频进行编码,以实现身临其境的空间音频体验。立体混响音频是一种用于录制和播放完整球面声场的技术。它使用数学函数和阵列麦克风组,可呈现来自任意方向的声音。 APAC 支持一阶、二阶和三阶 Ambisonics,阶数越高,空间分辨率越高。该编解码器非常高效,建议用于在 APMP 视频中对空间音频进行编码处理。APAC 可在除 watchOS 之外的所有主要 Apple 平台上解码,并支持通过 HLS 进行分段和流式传输。