WWDC Quick Look 💓 By SwiftGGTeam
Deliver video content for spatial experiences

Deliver video content for spatial experiences

观看原视频

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 交付流程包括三个步骤:

  1. 编码:视频用 HEVC 编码,音频按语言和角色(对白、音频描述)编码,字幕用 WebVTT
  2. 打包:使用 Apple HLS 工具将编码后的媒体转为 fMP4 片段和播放列表
  3. 交付:通过 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)生产视差轮廓元数据的步骤:

  1. 准备左右眼同步视频轨道
  2. 执行视差/差异分析,生成每个区域的深度信息
  3. 将视差信息打包为 metadata payload
  4. 写入 timed metadata track,与视频轨道关联
  5. 多路复用到同一文件中,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-LAYOUT
  • REQ-VIDEO-LAYOUT="CH-STEREO":标识立体视频流
  • 3D 和 2D 视频可在同一播放列表中,但加载后不会自动切换
  • 建议包含 2D iFrame 流支持缩略图拖拽

3D 内容舒适度指南

14:46)3D 内容设计需要考虑观看舒适度:

  • 避免极端视差(正负方向都不可过大)
  • 避免高频运动导致聚焦困难
  • 避免窗口违规(window violations)导致的深度冲突
  • 屏幕大小影响舒适度,用户可通过调整距离改变屏幕尺寸

核心启发

  1. 为视频平台添加 3D 内容支持

    • 做什么:在现有 HLS 工作流中增加 MV-HEVC 编码环节,为 visionOS 用户提供 3D 视频
    • 为什么值得做:visionOS 用户期望沉浸式观影体验,3D 内容是差异化竞争力
    • 怎么开始:使用支持 MV-HEVC 的编码工具,在现有 HEVC 工作流基础上增加立体视图编码
  2. 复用现有字幕资源服务 3D 内容

    • 做什么:为 3D 视频添加视差轮廓元数据,让现有 WebVTT 字幕自动适配 3D 播放
    • 为什么值得做:不需要重新制作字幕,同一套字幕资源同时服务 2D 和 3D 用户
    • 怎么开始:在视频后期制作中执行视差分析,生成 10x10 网格的视差轮廓数据
  3. 为 HLS 流添加 Spatial Audio

    • 做什么:在现有音频工作流中增加 Spatial Audio 格式,同时保留立体声回退
    • 为什么值得做:visionOS 支持头部追踪的空间音频是核心体验,回退确保兼容性
    • 怎么开始:使用支持 Dolby Atmos 或 Apple Spatial Audio 的编码工具,在 HLS 播放列表中同时声明两种音频变体
  4. 优化 CDN 缓存策略

    • 做什么:3D 视频(MV-HEVC)的码率通常高于 2D,调整 CDN 缓存和分发策略
    • 为什么值得做:visionOS 用户期望 4K 3D 体验,需要确保带宽和缓存足够
    • 怎么开始:分析 MV-HEVC 相对于 2D HEVC 的码率增量,调整 CDN 边缘缓存配置
  5. 建立 2D/3D 混合播放列表

    • 做什么:在同一 HLS 播放列表中提供 2D 和 3D 视频变体,让播放器根据设备能力选择
    • 为什么值得做:一套播放列表覆盖所有 Apple 设备,简化内容管理
    • 怎么开始:使用 #EXT-X-VERSION:12REQ-VIDEO-LAYOUT 标签组织变体

关联 Session

评论

GitHub Issues · utterances