Highlight
visionOS 的 3D 视频内容交付建立在现有 HLS 工作流之上,使用 MV-HEVC 编码立体视频,通过新增的视差轮廓(parallax contour)元数据确保字幕与 3D 画面无深度冲突,2D 和 3D 可共享同一套音频和字幕资源。
核心内容
现有 2D 工作流完全兼容
你的视频平台已经在用 HLS 交付 2D 内容了吗?那大部分工作已经完成。
(00:51)visionOS 的 2D 视频播放能力与 iPhone、iPad、Apple TV 完全一致。现有 HLS 流不需要任何修改就能在空间计算平台上播放。Apple 的目标是:交付 2D 内容到 visionOS 应该与交付到其他平台完全相同。
空间计算平台的播放能力
(02:15)visionOS 支持以下播放规格:
- 最高 4K 分辨率
- 90Hz 刷新率,24fps 内容自动使用 96Hz 模式
- 支持 SDR 和 HDR
这些规格与高端电视相当,确保你的最高质量内容能被完整体验。
3D 立体视频:MV-HEVC
(05:37)3D 视频的核心是立体视觉——为左眼和右眼提供略有差异的图像,大脑通过视差感知深度。Apple 采用 MV-HEVC(Multiview HEVC)编码:
- 单个视频轨道包含左右眼两个视图
- “2D Plus Delta” 策略:基础 2D 视图用标准 HEVC 编码,右眼只编码与左眼的差异
- 2D 播放器只能看到基础视图,正常播放
- 3D 播放器解码两个视图呈现立体画面
- Apple Silicon 原生支持 MV-HEVC 解码
新增 Video Extended Usage(VEXU)box 作为轻量级信号,标识视频是否为立体格式。
字幕与深度冲突
(09:17)3D 视频中的一个关键问题:字幕可能与画面中的前景物体产生深度冲突,导致观看不适。
Apple 的解决方案是视差轮廓(parallax contour)元数据:
- 将每帧视频划分为 10x10 的网格
- 记录每个网格区域的最小视差值
- 播放时系统自动调整字幕深度,避免与前景物体重叠
- 相同的 2D 字幕资源可用于 2D 和 3D 体验
HLS 适配
(13:03)3D 内容的 HLS 交付需要以下更新:
- HLS 规范版本更新到 12
- 新增
REQ-VIDEO-LAYOUT标签标识立体视频 - 支持 fragmented MP4 timed metadata 携带视差信息
- 2D 和 3D 视频可在同一播放列表中混合
详细内容
2D 内容生产流程回顾
(00:41)现有 HLS 交付流程包括三个步骤:
- 编码:视频用 HEVC 编码,音频按语言和角色(对白、音频描述)编码,字幕用 WebVTT
- 打包:使用 Apple HLS 工具将编码后的媒体转为 fMP4 片段和播放列表
- 交付:通过 CDN 分发给客户端
音频准备
(02:33)音频生产与 2D 相同,建议同时提供:
- Spatial Audio 格式(支持头部追踪)
- 立体声回退轨道(确保所有设备可靠播放)
如果 2D 和 3D 视频使用相同的剪辑,可以共享同一套音频资源。
MV-HEVC 编码详解
(06:48)MV-HEVC 的技术细节:
单帧结构:
+------------------+
| Base HEVC 视图 | ← 2D 播放器可见(如左眼)
| (左/右眼基础图像) |
+------------------+
| Delta 编码 | ← 右眼与基础的差异
| (视差差异数据) |
+------------------+
关键点:
- 基础视图使用标准 HEVC 编码,2D 解码器可直接播放
- Delta 数据描述左右眼差异,3D 解码器可计算完整立体对
- 编码效率高于独立编码两个视图
- VEXU box 标识立体格式和包含的眼视图
视差轮廓元数据生产
(11:20)生产视差轮廓元数据的步骤:
- 准备左右眼同步视频轨道
- 执行视差/差异分析,生成每个区域的深度信息
- 将视差信息打包为 metadata payload
- 写入 timed metadata track,与视频轨道关联
- 多路复用到同一文件中,HLS 打包时自动生成包含元数据的片段
推荐 10x10 网格作为存储和分辨率之间的平衡。
HLS 播放列表示例
(13:57)支持 3D 视频的 multivariant playlist:
#EXTM3U
#EXT-X-VERSION:12
# 3D 视频流
#EXT-X-STREAM-INF:BANDWIDTH=8000000,REQ-VIDEO-LAYOUT="CH-STEREO"
3d_video_1080p.m3u8
# 2D 视频流(回退)
#EXT-X-STREAM-INF:BANDWIDTH=4000000
2d_video_1080p.m3u8
# 2D iFrame 流(缩略图拖拽)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2000000
2d_iframe_1080p.m3u8
# 音频流(2D/3D 共享)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",URI="audio_en.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="中文",LANGUAGE="zh",URI="audio_zh.m3u8"
# 字幕流(2D/3D 共享)
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",LANGUAGE="en",URI="subtitles_en.m3u8"
关键点:
#EXT-X-VERSION:12:HLS 规范版本 12 支持REQ-VIDEO-LAYOUTREQ-VIDEO-LAYOUT="CH-STEREO":标识立体视频流- 3D 和 2D 视频可在同一播放列表中,但加载后不会自动切换
- 建议包含 2D iFrame 流支持缩略图拖拽
3D 内容舒适度指南
(14:46)3D 内容设计需要考虑观看舒适度:
- 避免极端视差(正负方向都不可过大)
- 避免高频运动导致聚焦困难
- 避免窗口违规(window violations)导致的深度冲突
- 屏幕大小影响舒适度,用户可通过调整距离改变屏幕尺寸
核心启发
-
为视频平台添加 3D 内容支持
- 做什么:在现有 HLS 工作流中增加 MV-HEVC 编码环节,为 visionOS 用户提供 3D 视频
- 为什么值得做:visionOS 用户期望沉浸式观影体验,3D 内容是差异化竞争力
- 怎么开始:使用支持 MV-HEVC 的编码工具,在现有 HEVC 工作流基础上增加立体视图编码
-
复用现有字幕资源服务 3D 内容
- 做什么:为 3D 视频添加视差轮廓元数据,让现有 WebVTT 字幕自动适配 3D 播放
- 为什么值得做:不需要重新制作字幕,同一套字幕资源同时服务 2D 和 3D 用户
- 怎么开始:在视频后期制作中执行视差分析,生成 10x10 网格的视差轮廓数据
-
为 HLS 流添加 Spatial Audio
- 做什么:在现有音频工作流中增加 Spatial Audio 格式,同时保留立体声回退
- 为什么值得做:visionOS 支持头部追踪的空间音频是核心体验,回退确保兼容性
- 怎么开始:使用支持 Dolby Atmos 或 Apple Spatial Audio 的编码工具,在 HLS 播放列表中同时声明两种音频变体
-
优化 CDN 缓存策略
- 做什么:3D 视频(MV-HEVC)的码率通常高于 2D,调整 CDN 缓存和分发策略
- 为什么值得做:visionOS 用户期望 4K 3D 体验,需要确保带宽和缓存足够
- 怎么开始:分析 MV-HEVC 相对于 2D HEVC 的码率增量,调整 CDN 边缘缓存配置
-
建立 2D/3D 混合播放列表
- 做什么:在同一 HLS 播放列表中提供 2D 和 3D 视频变体,让播放器根据设备能力选择
- 为什么值得做:一套播放列表覆盖所有 Apple 设备,简化内容管理
- 怎么开始:使用
#EXT-X-VERSION:12和REQ-VIDEO-LAYOUT标签组织变体
关联 Session
- Create a great spatial playback experience — visionOS 上视频播放的框架和 API
- Support HDR video in your app — 在 App 中支持 HDR 视频
- Explore immersive sound design — 空间音频和沉浸声音设计
评论
GitHub Issues · utterances