大多数浏览器和
Developer App 均支持流媒体播放。
-
了解 iOS 相机拍摄的改进:深度、聚焦和多任务处理
探索如何利用 App 中的高级相机拍摄功能。我们将介绍如何使用激光雷达扫描仪创建照片和视频效果,并执行准确的深度测量。了解您的 App 如何利用相机的画中画或多任务处理,并在相机拍摄期间控制面部自动聚焦和自动曝光等。我们还将分享使用多个视频输出的策略,让您在捕捉优质视频输出的同时优化实时预览。如需了解有关相机拍摄功能的概述,请观看 WWDC21 的“相机拍摄的新功能”。
资源
- Accessing the camera while multitasking
- Adopting Picture in Picture for video calls
- Capture setup
- TN3121: Selecting a pixel format for an AVCaptureVideoDataOutput
相关视频
WWDC23
WWDC22
WWDC21
-
下载
Nikolas Gelo:您好 欢迎来到 “发现 iOS 相机捕获功能的进展” 我是相机软件团队的 Nikolas Gelo 我将展示 iOS 和 iPadOS 新相机中一些令人兴奋的功能 首先 我将讲解如何利用使用 AVFoundation 的 LiDAR 扫描仪将深度信息以流媒体传输 然后展示如何在您的 App 上 通过面部自动对焦和自动曝光 获得更好的面部渲染效果 再带您了解 高级 AVCaptureSession 流配置 最后向您展示您的 App 将如何 能够在处理多任务时使用相机 我将讲解如何利用使用 AVFoundation 的 LiDAR 扫描仪达成流式传输深度 iPhone 12 Pro、iPhone 13 Pro 和 iPad Pro 均配备 能够输出密集深度图的 LiDAR 扫描仪 LiDAR 扫描仪向周围环境 发射光 然后收集场景中表面反射的光 通过测量光线从 LiDAR 发射至 环境 再反射回扫描仪的时间来估计深度 这一过程每秒可运行数百万次 我将向您展示在操作中 使用 AVFoundation 的 LiDAR 扫描仪 我在这台 iPhone 13 Pro Max 上运行了一个 使用了新 LiDAR 深度相机 AVCaptureDevice 的 App 该 App 在直播摄像头视频流上 呈现出流式深度数据 蓝色表示近处的对象 红色表示较远的对象 拖动滑动条 我可以调整深度的不透明度 这个 App 还可以拍摄 带有高分辨率深度图的照片 当我拍照时 会应用相同的深度叠加 但对于静止物体 分辨率甚至会更高 这个 App 还有一个很好用的功能 当我按下手电筒按钮时 App 会使用 带有彩色图像的高分辨率深度图 用 RealityKit 在场景上渲染出一个聚光灯 我可以四处点击 将聚光灯指向场景中的不同对象 看这里用聚光灯效果突出了吉他 或者如果我在墙角点击了正确的位置 聚光灯会打出心形 让我们把聚光灯重新 移回到那把吉他上 看起来很酷
LiDAR 扫描仪的 API 在 iPadOS 13.4 的 ARKit 中首次引入 如果您还没有看过 WWDC 2020 的演讲“探索 ARKit 4” 我建议您去观看 iOS 15.4 有一项新增功能 即您的 App 使用 AVFoundation 即可访问 LiDAR 扫描仪 我们引入了一种新的 AVCapture 设备类型 内置 LiDAR 深度相机 可传送视频和深度 产生高质量、高精度的深度信息 这个新 AVCaptureDevice 使用后置广角摄像头 再使用 LiDAR 扫描 仪传送视频以捕获深度 广角摄像头 可在视野中捕获视频和深度 就像 TrueDepth AVCaptureDevice 它的所有格式都支持深度数据传送 这个新 AVCaptureDevice 通过融合 带有后置广角摄像头的彩色图像 LiDAR 扫描仪的稀疏输出 能产生高质量的深度数据 LiDAR 和颜色输入可通过 能够输出密集深度图的 机器学习模型来处理 由于 LiDAR 深度相机 采用的是后置广角摄像头 长焦和超广角相机也均可使用 使用 AVCaptureMultiCamSession 这项功能对希望同时使用 多个摄像头的 App 很有帮助 LiDAR 深度相机 可提供多种格式 从 640 x 480 的视频分辨率 到 4032 x 3024 的 完整 12 兆像素图像 流传输时 它可以输出高达 320 x 240 的深度图 拍摄照片可以捕获 768 x 576 的深度图 注意 16 x 9 和 4 x 3 格式 的深度分辨率略有不同 这是为了匹配视频的纵横比 在 iPhone 12 Pro iPhone 13 Pro 和 iPad Pro 第 5 代上 可以使用 LiDAR 深度相机 AVCaptureDevice iPhone 13 Pro 可以 使用后置摄像头的组合传送深度数据 AVFoundation Capture API 将这些称为“虚拟设备” 它们由物理设备组成 在 iPhone 13 Pro 的背面 有四个虚拟 AVCaptureDevices 可供使用: 新 LiDAR 深度相机 使用广角摄像头的 LiDAR 扫描仪 双摄像头使用了广角和长焦摄像头 双广角摄像头 使用了广角和超广角摄像头 以及三摄像头 使用了广角、超广角和长焦摄像头 这些设备生成的深度类型存在差异 LiDAR 深度相机能生成 “绝对深度” 飞行时间技术 能够计算真实世界的规模 比方说 它很适用于 测量等计算机视觉任务 TrueDepth 摄像头 双摄像头、双宽摄像头 和三摄像头能生成 相对的、基于视差的深度 这会消耗更少的电量 非常适合需要呈现照片效果的 App AVFoundation 使用 AVDepthData 类来表示深度 此类的像素缓冲区包含深度 还有可以描述它的其他属性 其中包括深度数据类型 准确率、是否过滤 它像新 LiDAR 深度相机一样 由具有深度功能的 AVCaptureDevice 提供 您可以从 AVCaptureDepthDataOutput 达成流式传输深度 或从 AVCapturePhotoOutput 接收附加到照片的深度 默认情况下会过滤深度数据 过滤能降低噪音 并填充深度图中的缺失值或孔 非常适合用于视频和摄影 App 所以 使用深度图在彩色图像上 应用效果时 不会出现伪影 但是 计算机视觉 App 应该更容易处理未经过滤的深度数据 保留深度图中的原始值 禁用过滤时 LiDAR 深度相机 会排除低置信点 要禁用深度数据过滤 可将 AVCaptureDepthDataOutput 上的 isFilteringEnabled 属性设置为 false 当您从委托回调中收到 AVDepthData 对象时 它就不会被过滤 由于 ARKit 已经提供了 对 LiDAR 扫描仪的访问权限 您可能会问 “AVFoundation 相比如何?”
AVFoundation 专为视频和摄影 App 而设计 您可以使用 AVFoundation 把 LiDAR 扫描仪捕获的 深度数据嵌入高分辨率照片 ARKit 顾名思义 最适合 增强现实 App 有了 LiDAR 扫描仪 就可以 使用 ARKit 场景几何和物体放置等功能 AVFoundation 可提供 高分辨率视频 非常适合录制电影和拍照 AVFoundation 的 LiDAR 深度相机 可以输出高达 768 x 576 的深度 高于 ARKit 深度分辨率 256 x 192 的两倍 ARKit 使用分辨率较低的 深度图 因此它可以针对其功能 应用增强现实算法 想要了解更多有关如何使用 AVFoundation 捕获深度数据的“深入”信息 观看我们 WWDC 2017 的课程 “捕获 iPhone 摄影的深度” 我们很高兴看到 您能在您的 App 中 对 LiDAR 深度摄像头的趣用 接下来 我将讨论 自动对焦和自动曝光系统 如何帮助提高 App 场景中人脸的可见度 自动对焦和自动曝光系统会分析场景 捕获最佳图像 自动对焦系统 会调整镜头 保证焦点在主体上 自动曝光系统则会平衡场景最亮的 和最暗是区域 保证主体可见 但是 有时拍照做出的自动调整 不需要对焦在拍摄对象的脸部 还有的时候 在明亮的背光下 很难看见拍摄对象的脸 数码单反相机和其他专业相机 有一个共同特点:跟踪场景中的人脸 动态调整焦点和曝光 确保人脸可见 iOS 15.4 有一项新增功能 焦点和曝光系统将为面部优先 我们非常喜欢它的效果 以至于我们在 iOS 15.4 或更高版本上的 所有 App 中启用了这项功能 我会给您看一些例子 没有面部自动对焦 相机的焦点 一直在背景上而不会重新在脸上对焦 再看一遍 看看他转身时他的脸是如何失焦的 并且背景中的树木保持锋利 启用面部自动对焦后 您可以清楚地看到他的脸 当他把脸转开 相机将焦点会转移到背景上
把视频放在一起比较 差异会很明显 右侧启用了面部自动对焦 您可以在他的胡须中 看到更清楚的细节 在明亮的逆光场景中 保持脸部曝光良好是一项挑战 但是在自动曝光系统 优先处理面部的情况下 我们能很容易看到他
放在一起比较 可以再次看到这里的区别 请注意 右侧图片中 他的脸部曝光良好 背景中的树木会显得更亮 天空也是 人脸优先时 系统会调整整个场景的曝光
在 iOS 15.4 中 启用面部自动对焦和自动曝光时 AVCaptureDevice 上有可控的新属性 您可以控制设备 是否会“自动调整”这些设置 并决定何时启用 在切换“isEnabled” 属性之前 您必须首先禁用自动调整 摄影 App 自动启用此行为效果会很好 它应用于 Apple 的 相机 App 也非常适合用于视频会议 App 可在通话期间保持面部可见 FaceTime 就利用了这一点 但有时 人脸驱动的 自动对焦和自动曝光系统 并不是 App 的最佳选择 例如 如果您希望 您的 App 为用户提供 手动控制捕获的图像 您可以考虑将其关闭
如果您认为在您的 App 中 面部自动对焦或自动曝光有误 您可以选择关闭此行为 首先锁定 AVCaptureDevice 进行配置 然后 关闭面部自动对焦或自动曝光 中的自动调整 接着 禁用面部自动对焦或自动曝光 最后 解锁设备进行配置
我将接着谈谈如何使用高级流配置 接收为您 App 的需求 量身定制的音频和视频数据 AVFoundation Capture API 允许 开发人员使用相机构建沉浸式 App AVCaptureSession 管理的是 摄像头和麦克风等输入设备的数据流 连接在可传送视频、音频、照片等 的 AVCaptureOutputs 上 让我们以一个常见的 相机 App 用例为例: 将自定义效果(如过滤器或叠加) 应用于已录制的视频 像这样的 App 将具有以下功能 一个带有两个输入的 AVCaptureSession 需要连接两个输出的 一个摄像头和一个麦克风 分别用于视频数据和音频数据 然后在视频数据上应用效果 并将处理后的视频发送到两处 一处为视频预览 另一处为用于记录的 AVAssetWriter 音频数据也会发送 到 AVAssetWriter iOS 16 和 iPadOS 16 有一项新增功能 App 可以同时使用 多个 AVCaptureVideoDataOutputs 您可以自定义 每个视频数据输出的分辨率 稳定性、方向和像素格式 让我们回到示例相机 App 这个 App 正在 平衡冲突捕获要求 它想要显示捕获内容的实时视频预览 并录制高质量视频 供以后播放 预览的分辨率需要刚好适合设备屏幕 并且处理速度需要足够快 才能实现低延迟预览 但是在录制时 最好以高分辨率捕获 同时应用质量效果 在能添加第二个 AVCaptureVideoDataOutput 的情况下 可以扩展捕获图 现在 可以优化 视频数据输出了 一个输出可以为预览提供 较小的缓冲区 另一个可以为录制提供 全尺寸 4K 缓冲区 此外 该 App 可以在 较小的预览缓冲区上 呈现更简单的、性能更好的效果 并在录制时留下 全尺寸缓冲区的优质效果 现在该 App 不用再 削弱其预览 或录制的视频了
使用单独的视频数据输出 进行预览和录制的另一个原因 是为了应用不同的稳定模式 视频稳定会对视频捕获管道 造成额外的延迟 预览不需要延迟 因为延迟太明显会造成内容很难捕获 录制上可以应用稳定功能 以便稍后观看视频时获得更好的体验 因此您可以 在低延迟预览视频数据输出上 不应用任何稳定功能 并将稳定功能 应用到另一个上 供以后播放 配置视频数据输出 分辨率的方法有很多 配置全尺寸输出 首先要 禁用输出缓冲区尺寸的自动配置 然后禁用预览大小中 输出缓冲区的传递 然而 在大多情况下 视频数据输出 已配置为全尺寸输出 配置预览大小的输出 需要再次禁用自动配置 然后启用预览大小中 输出缓冲区的传递 这在使用照片 AVCaptureSessionPreset 时默认启用 要请求自定义分辨率 请指定宽度和高度 在输出的视频设置字典中 宽高的纵横比必须与源设备的 activeFormat 纵横比匹配 配置您的视频数据输出的方法有很多 若要应用稳定 请像电影扩展一样 将首选的稳定设置为模式 会生成非常适合观看的视频 您可以更改方向以接收纵向的缓冲区 并且您可以指定像素格式 以接收 10 位无损 YUV 缓冲区
更多 AVCaptureVideoDataOutput 选择像素格式的信息 请参阅“技术说明 3121”
从 iOS 16 和 iPadOS 16 开始 除了可以使用多个视频数据输出 App 可以在 从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 接收数据时 使用 AVCaptureMovieFileOutput 进行录制 要确定可以添加到会话中的内容 您可以检查 是否可以将输出添加到其中 并查询会话的 hardwareCost 属性 以确定系统是否可以支持您的配置 您可以在接收 带有电影文件输出的视频数据时 录制和分析场景时检查视频 接收带有电影文件输出的音频数据时 您可以在录制时对音频进行采样 并聆听正在录制的内容 有了这样的捕获图 您可以将录制机制卸载到 AVCaptureMovieFileOutput 同时仍接收未压缩的视频和音频样本 实现这些高级流配置 不需要使用新的 API 我们可以让您使用现有 API 启用高级流配置
最后 我将讨论 您的 App 将如何 在用户处理多任务时使用相机 在 iPad 上 用户可以 通过多种方式执行多项任务 例如 使用分屏浏览 同时阅读备忘录和录制语音备忘录 或使用侧拉在 全屏 Safari 浏览器的上方 使用备忘录的浮动窗口 使用 Picture in Picture 您可以继续播放视频 同时添加观看 更多 WWDC 视频的提醒 借助 iPadOS 16 的 全新 Stage Manager 用户可在大小不一的 浮动窗口中打开多个 App 从 iOS 16 开始 AVCaptureSessions 将能够 在处理多任务时使用相机 我们之前在多任务时阻止了相机访问 因为担心在处理多任务时 相机系统呈现的效果会不好 像游戏这类资源密集型 App 会与使用相机的 App 一起运行 可能会导致丢帧和其他延迟 从而导致摄像头输入不佳 用户在数月或数年后 观看质量较差的视频的时候 可能不记得这是他们 在处理多任务处理时录制的视频 提供良好的相机使用体验 是我们的首要任务 当系统检测到相机在多任务过程中 录制视频时 将显示一个对话框 告知用户视频的质量可能会不高 这个对话框在录制完成后 由 AVCaptureMovieFileOutput 或 AVAssetWriter 显示 这个对话框只会显示一次 可用“确定”按钮关闭 AVCaptureSession 添加了两个新属性 在支持并启用 多任务相机访问时给予指示 启用此功能的捕获会话将不再中断 因为“视频设备 不适用于多个前台 App” 某些 App 可能希望需要全屏 使用相机 如果您希望您的 App 不与其他 前台 App 一起竞争系统资源 这可能会很有用 例如 ARKit 不支持 在处理多任务时使用相机
您应该确保您的 App 在与 其他 App 一起运行时表现良好 监控 App 的通知 使您的 App 能够适应 系统压力不断增加 并采取措施减少压力的影响 例如降低帧速率 您可以通过请求较低分辨率、分箱 或非 HDR 格式 减少 App 在系统上的占用空间 想了解更多保持性能最佳实践的信息 请阅读文章 “在处理多任务时访问相机”
此外 视频通话和视频会议 App 可以在系统提供的 Picture in Picture 窗口 显示远程参与者 现在 您 App 的用户可以 在 iPad 上进行多任务处理时 继续流畅地视频通话 AVKit 在 iOS 15 中引入了 API 是为 App 指定一个可以显示 远程呼叫参与者的视图控制器 视频通话视图控制器允许您自定义 窗口的内容 要了解更多采用方法 请参阅文章 “采用 Picture in Picture 进行视频通话” 至此即为 iOS 相机捕获技术的所有进步 我展示了如何利用使用 AVFoundation 的 LiDAR 扫描仪达成流式传输深度 您的 App 将如何 获得更好的面部渲染效果 为您 App 量身定制的 高级 AVCaptureSession 流配置 和您的 App 如何 在处理多任务时使用相机 我希望您的 WWDC 精彩绝伦
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。