WWDC 2017 展望

WWDC 2017 将于北京时间 6 月 6 日凌晨 1 点拉开序幕,差不多就是今天晚上,明天凌晨的事。以前都是在结束后写专题的学习,今天我却要来写写展望,也可能算是历史回顾。

视频流媒体行业,绕不过去的就是带宽,与之紧密相关的就是音视频压缩与封装。WWDC 2014 与 iOS 8 一同开放的 VideoToolBox,使得硬编硬解 H.264 + AAC 成为非常简单的事情。而之前,这个 Framework 是私有的,即使是 iPhone 4 (发布于 WWDC 2010 ,原始操作系统为 iOS 4 )发布时就开始存在的东西,Apple 的确是打磨的够久了。然而国内一万年的 iOS 6 ,iOS 7 支持却使得效率、性能均不佳的软编软解一直存活至今,😂,也许是为了音画同步。

回看现在 iPhone 销售信息中的支持参数,关于视频播放的一项:

支持的视频格式:H.264 视频:最高支持 4K、30 fps、High Profile level 4.2 编码…

其实这差不多也是所有支持 4K 视频录制的 iOS 设备的标准封装格式,其提示中写到: 1 分钟视频约 350 MB,4K (高分辨率)。换算一下差不多是每秒 5.83 MB,对应大约是需要约 50 Mbps 的带宽来传输。

如果说 H.264(AVC) 是 Full-HD 时代的胜利者的话,那么 4K 时代对于 Apple 阵营应该是属于 H.265(HEVC) 的。毕竟唯一竞争对手仅是 Google 的 VP9 。在上面这个例子中,差不多用一半的带宽就能传输同样的视频了。

那么 iOS 是否支持 H.265 硬编硬解呢?仅在 iPhone 6 / iPhone 6 Plus ( 发布于 2014 年秋,原始操作系统为 iOS 8 )或者更新的机型中的 FaceTime 使用 H.265 进行编码,但是是否是硬编硬解却众说风云,个人倾向是硬编硬解。毕竟是 2015 年的 骁龙 810 就实现的东西,按照 A 系列芯片硬件领先 1 年,还是对的上号的。所以答案是暂时还是没法用。

但是,如果你熟悉 CoreMedia 的话,你也许会在 CMFormatDescription 中见过 CMVideoCodecType 以及让你有点小惊讶的 kCMVideoCodecType_HEVC 。难道是可以?Too Young!-1s ! 👓

在创建视频编码器时,你会用到 CMVideoCodecType 这个类型,一般硬编 H.264 时,直接传入 kCMVideoCodecType_H264 即可,如果这边我作死传入 kCMVideoCodecType_HEVC 呢?这里有一个大神过去的 例子

以下是核心的代码:

1
2
3
let status = VTCompressionSessionCreate(kCFAllocatorDefault, width, height,
kCMVideoCodecType_H264, // 传入 kCMVideoCodecType_HEVC 会如何?
nil, attributes as? CFDictionary, nil, callback, unsafeBitCast(self, to: UnsafeMutableRawPointer.self), &session)

今天我又拿手边 iPhone 7 Plus ( iOS 10.3.2 ) 重新测试了一下,不出意外的 -12908 ,即 kVTCouldNotFindVideoEncoderErr ,很明显的错误说明,没有找到这个视频编码器,🤦‍♂️。

但是 kCMVideoCodecType_HEVC 仅仅会是一个占位符么?我觉得不是,H.265 作为 4K 的好基友,至少一定会登录支持 4K 的 Apple TV ,而按照 Apple 全家桶的尿性,全平台支持是同步的。所有如果晚上见到了 HEVC ,那新的 4K 版本的 Apple TV 一定会到来(这个应该是 9 月)。

画外音:前几天收到某 CDN 厂商的 H.265 解决方案上线广告,的确,这友商都准备好了, Apple 会还没有准备好吗?You are not prepared!

最后再来抛几个水球。

前段时间微信打赏弄得那么僵,我觉得一定是在为 Apple Pay 的某个新功能铺路,比如个人对个人的转账?(银联对移动支付领域的大反击);又比如改进应用内购的结算效率;甚至降低应用销售分成。而绝不仅仅是开通个 NFC 乘地铁,搭公车那么简单。那么,又能对开发者开放多少呢?

另一个是关于版本号,今年的 macOS 是继续 10.13 呢?还是和 iOS 一样直奔 11 呢?毕竟 Apple 的强迫症也是不轻的。