Introducing HEIF and HEVC

以下是 WWDC 2017 - Session 503 - Introducing HEIF and HEVC 的学习笔记。

背景

在当前的音视频现状中, Apple 提到了以下几点:

  • 视频与图像资源的快速增长(包括拍摄的,云端存储的,分享的…)
  • 更高的分辨率与帧率的内容( 4K 甚至更高)
  • 媒体的定义正在改变(社交媒体, live photos ,短视频)
  • 受到网络带宽的约束(OTT, wireless)
  • 传统的 H.264 与 JPEG 本身的限制

因而,必须有更高压缩率的影片编码方式来适应新时代的要求。那就是 HEVC (High Efficiency Video Coding),高效率影片编码 。它于 2013 年被 ITU-T (国际电信联盟电信标准化部门)标准化并通过。

  • ISO/IEC: MPEG-H Part 2
  • ITU-T: H.265

这两者是不同标准化部门对于 HEVC 的称呼,但的确指代的是同一个标准。

就如同 AVC (Advanced Video Coding),高级视频编码。既是 ISO/IEC: 14496 MPEG-4 Part 10 ,又是 ITU-T: H.264 。

HEVC 简介

在同一个例子中,使用 HEVC 能比比 H.264 提高 40% 的压缩率。并且在 iOS 相机拍摄中,H.264的压缩效果能提高 2 倍。

关于 HEVC 的优点:

  • 行业与 Apple 的支持
  • 与行业文件格式很好的协同工作
  • 同时对视频和照片都是理想的编码器

HEIF 简介

对新图片文件格式的特性要求:

  • 压缩编码器的支持(特别是 HEVC)
  • 支持透明通道与景深
  • 动画的支持( GIF , Live Photo)
  • 图像序列压缩的支持(照片长曝光)
  • 支持划分图像到子图中

它相比 JEPG 能够提高 2 倍的压缩率。

不同的 Payload 下其扩展名的差异:

兼容性与最佳实践

创建

Apple HEIF 文件构成

HEIF 图像的解码支持

HEIF 图像的编码支持

Apple HEVC 文件构成

HEVC 影片的解码支持

HEVC 影片的编码支持

可以看出,想要使用硬件加速完成解码(硬解), A9 已经是 iOS 11 生态的入门要求(这同样也是 ARKit 的入门要求)。

不负责任推论:
基于 Apple 生态的一致性,今年应该有一款至少采用 A9 芯片的 tvOS 设备更新,并且全面支持 4K 。

访问

访问 HEIF 图像,可以说在新的操作系统与系统框架层面是全部支持的,用法与原来并没有什么两样,注意格式选择即可。

  • ImageIO —– supported image source
  • Core Image —– supported image source
  • PhotoKit —– image, resources, and edit
  • Apple applications

访问 HEVC 影片资源,同样也是全部支持,甚至连 HLS(HTTP Live Streaming) 协议都已经扩展完毕,想必视频站都会尽早跟进,毕竟相同画质能节约 40% 的带宽,省钱就是盈利啊。

  • AVFoundation —– supported media source
  • PhotoKit —– movies, resources, and edit
  • WebKit —– hardware support and macOS desktops
  • HTTP Live Streaming
  • Apple apps

但是由于影片播放的实时性要求,可解码并不完全等同于可播放。对于特定的设备,注意使用 AVFoundation 提供的 isPlayable 来区别对待。

直接通过 PhotoKit 来直接访问 HEIF/HEVC 内容。

传输

其实对用户而言是比较无感的,对于生态外,总是会自动转码为 JPEG/H.264 来获得最好的兼容性,对于 Apple 自己生态内,会判定目标设备是否能够解码相应内容而选择是否转码。

目前测试的情况,使用 iOS 11 beta 通过 AirDrop 传输新格式的照片/视频到 macOS 10.12.5 时,因为目标设备不兼容新的格式,iPhone 端会转码后发送 JPEG/H.264 内容。