9c5158952437716f43cb3f9556c24a1c
今年的相机有什么新玩法

概要

以下是 WWDC2019 Session 225: Advances in Camera Capture & Photo Segmentation 的总结。一句话说来就是今年可以在 iPhone 上同时使用两个不同的摄像头,并通过 Photo Segmentation 来获得头发、皮肤、牙齿的图层,以创建不同的照片效果。

如果你从事直播或者需要给自定义相机加入些花样,下面的内容会对你的胃口。

Multi-Camera Capture 多相机拍摄

早在 2011 年的 OS X Lion(macOS 10.7),Apple 的桌面系统就已经支持了多相机输入。今年在 iOS 13 中,多相机支持也终于正式加入。不过受限于硬件性能,现有支持这个功能的设备仅包括 A12 的 3 款 iPhone 及 A12X 的 2 款 iPad Pro。

在传统的相机开发中,我们使用 AVCaptureSession 来统一管理所有的输入与输出,但是你只能添加一个摄像头,或者添加不同的视频数据输出,比如同时输出 AVCaptureVideoDataOutputAVCaptureDepthDataOutput

在多相机开发中,我们使用全新的 AVCaptureMultiCamSession 来统一管理多个输入与输出。在这个 Session 中你可以添加多个不同的相机(比如同时使用前/后摄像头),多个相同的数据输出,多个预览视图。对于现有的设备,这个限制都是 2 个。不负责任猜想,在今年的新 iPhone 中,这个限制可能会是 3-4 个(与传闻中的 3 摄吻合)。

Multi-Camera Capture 最佳实践

let backCameraVideoConnection = AVCaptureConnection(inputPorts: [backCameraVideoPort],
                                                        output: backVideoDataOutput) 
session.addConnection(backCameraVideoConnection)
  • 之后老方法一致,在你需要的时候启动 Session 即可

Multi-Camera Capture 的局限

  • 不是使用一个输入源生成两份输出
  • 不提供两个输入源的合并输出
  • 你需要为每个输入设备指定他们的输出参数

Multi-Camera Capture 的代价

由于多个相机等于使用了多个传感器,但是 iPhone 只有一个 ISP(Image Signal Processor 图像信号处理器),在有限的性能里必须有一定的妥协。你需要在图像分辨率/图像帧率/以及其他消耗的性能的工作中作出平衡。

为此 AVCaptureMultiCamSession 提供了相应的硬件消耗/系统压力报告

  • 硬件消耗的报告
  • 系统压力的报告
top Created with Sketch.