Learn about the Apple Projected Media Profile
2025年6月9日
一句话判断
如果你做 180/360/广角视频相关的产品,APMP 是你必须理解的格式规范。它定义了非矩形投影视频如何在 QuickTime/MP4 文件中被正确标记和传输——从投影类型到镜头畸变参数,从帧封装到 HLS 流媒体,一套规范覆盖全流程。
这场 Session 讲了什么
Jon 从投影基础讲起,一步步展开 APMP 的完整规范和工具链。
投影类型: APMP 支持四种投影——Rectilinear(2D/3D/Spatial video)、Half-Equirectangular(180 度)、Equirectangular(360 度)、ParametricImmersive(广角/鱼眼)。Equirectangular 把球面经纬度等距映射到矩形帧,Half-Equirectangular 是半球版本。ParametricImmersive 最复杂,包含相机内参矩阵(焦距、光学中心、偏斜)和畸变参数(径向畸变、切向畸变等),用于校正广角镜头的桶形畸变。
文件格式中的信号: 在 QuickTime/MP4 的 Video Extended Usage(vexu)box 中新增了三个 box:
- Projection box: 标记投影类型(equirectangular / half-equirectangular / ParametricImmersive)。
- Lens Collection box: 包含 ParametricImmersive 的内参、外参和畸变参数。
- View Packing box: 帧封装方式(side-by-side 或 over-under)。
组合这些 box 可以表达各种配置:单目 360、双目 180、双目 360 等。
内容采集与工作流: 支持 Canon EOS VR(双目 180)、GoPro MAX / Insta360 X5(360)、GoPro HERO 13 / Insta360 Ace Pro 2(广角)。Final Cut Pro 已支持 APMP 读写。Canon EOS VR Utility 和 GoPro Player 即将支持 APMP 导出。
资产转换: AVAssetCreationOptions.ShouldParseExternalSphericalTags 让系统识别旧的 Spherical Metadata V1/V2 并合成 APMP 格式描述扩展。visionOS 26 的 Quick Look 会自动提示转换 GoPro/Insta360 的广角视频。ParametricImmersiveAssetInfo(ImmersionMediaSupport framework)检测兼容相机并生成 ParametricImmersive 格式描述。
读取: AVAssetPlaybackAssistant 识别 non-rectilinear projection 配置。检查 projectionKind 和 viewPackingKind 格式描述扩展。
编辑: AVVideoComposition + CMTaggedBuffer。CMTaggedDynamicBuffer 用 CM Tag 标识属性(如左眼/右眼)。新增 outputBufferDescription 指定 compositor 输出的 tagged buffer 格式,finish 方法传入 tagged buffers。
写入: AVAssetWriter 通过 AVVideoCompressionPropertiesKey 的 CompressionPropertyKey.kind 指定投影类型。
发布参数: HEVC Main/Main 10, 4:2:0, Rec.709 或 P3-D65。单目 7680x3840 / 双目 4320x4320 per eye。30fps(8K 单目或 4K 双目 10-bit)。峰值码率不超过 150Mbps。
HLS 流媒体: EXT-X-STREAM-INFORMATION 中新增 REQ-VIDEO-LAYOUT 属性指定 stereo + half-equirectangular。map segment 的 formatDescription 也必须包含对应扩展。
APAC(Apple Positional Audio Codec): 支持 ambisonic 编码(1st/2nd/3rd order)。推荐码率 384kbps(1st)到 768kbps(3rd)。所有 Apple 平台(除 watchOS)支持解码。iOS/macOS/visionOS 内置编码器。可以通过 HLS 流式传输。
值得深挖的点
ParametricImmersive 是最值得深挖的投影类型。 它不只是”标记为广角”,而是完整描述了相机的光学模型——内参矩阵 K、径向/切向畸变、投影偏移、径向角度限制。这意味着你的 app 可以对任意广角相机的素材做精确校正。
Spherical Metadata 转换是存量内容的桥梁。 大量现有 180/360 视频使用 Google 的 Spherical Metadata V1。Apple 提供了自动转换能力,但转换后要检查 convertedFromExternalSphericalTags 扩展确认是否成功。
CMTaggedBuffer 是立体视频编辑的核心抽象。 如果你要做自定义视频编辑功能(不只是用 AVVideoComposition),必须理解 CM Tag 的 category/value 体系。左眼/右眼是 StereoView category,帧封装方式也在 tag 中编码。
APAC 的 ambisonic 支持是空间音频的关键。 Ambisonic 不绑定特定扬声器布局,而是用球谐函数数学编码完整声场。1st order 4 通道,2nd order 9 通道,3rd order 16 通道。越高阶空间分辨率越高。
代码片段
用 AVAssetWriter 写入单目 360 APMP 视频:
let writer = try AVAssetWriter(outputURL: outputURL, fileType: .mp4)
let videoSettings: [String: Any] = [
AVVideoCodecKey: AVVideoCodecType.hevc,
AVVideoWidthKey: 7680,
AVVideoHeightKey: 3840,
AVVideoCompressionPropertiesKey: [
AVVideoQualityKey: 0.9,
kVTCompressionPropertyKey_ProfileLevel as String:
kVTProfileLevel_HEVC_Main_AutoLevel
]
]
let input = AVAssetWriterInput(mediaType: .video, outputSettings: videoSettings)
// 关键:标记投影类型
let formatDescription = /* 创建带 equirectangular projection extension 的 format description */
input.expectsMediaDataInRealTime = false
writer.add(input)
用 AVAssetWriter 编码 APAC ambisonic 音频:
let audioSettings: [String: Any] = [
AVFormatIDKey: kAudioFormatApplePositional,
AVEncoderBitRateKey: 384_000, // 1st order 推荐
AVSampleRateKey: 48000,
AVNumberOfChannelsKey: 4, // 1st order = 4 channels
]
let audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: audioSettings)
writer.add(audioInput)
HLS manifest 示例(双目 180):
#EXT-X-STREAM-INFORMATION:BANDWIDTH=15000000,
CODECS="hvc1.2.4.L153.B0",
RESOLUTION=4320x4320,
REQ-VIDEO-LAYOUT="stereo, half-equirectangular"
最佳实践
发布前用 AVQT(Advanced Video Quality Tool)检查质量。 AVQT 新增了对 equirectangular 和 half-equirectangular 投影的感知质量评估,比通用质量指标更准确。
相机厂商软件导出后检查 APMP 信号。 不是所有相机的导出工具都已支持 APMP。如果导出的是 Spherical Metadata,用 avconvert 工具或代码做转换。
HLS 流媒体注意 map segment 的 formatDescription。 只在 manifest 里标记 REQ-VIDEO-LAYOUT 不够,map segment 的格式描述也必须包含对应的 projection 和 stereo view 扩展。
APAC 码率选择: 1st order 384kbps, 2nd order 512kbps, 3rd order 768kbps。更高码率不会线性提升质量,因为 ambisonic 的空间分辨率受阶数限制。
还有什么值得关注
- Apple 发布了 QuickTime and ISO Base Media File Formats and Spatial and Immersive Media 规范文档,详细定义了所有 box 的结构。
- visionOS 26 内置了 GoPro 和 Insta360 广角视频的 lens projection 参数支持,Quick Look 打开时自动提示转换。
- MV-HEVC 立体视频 profile 的详细规范在 “Apple HEVC Stereo Video Interoperability Profile” 文档中。
- 配套视频:“Support immersive video playback in visionOS apps”(Session 296)讲了如何在 app 中播放 APMP 内容。