大多数浏览器和
Developer App 均支持流媒体播放。
-
使用视频格式拍摄高质量照片
通过使用 AVCapture API,您的 app 可以充分利用 iPhone 强大的相机系统。了解如何为您的用例选择最合适的照片或视频格式,同时权衡照片质量和成像速度。探究一些强大的新算法,如果您在 app 中使用视频格式,这些算法可以帮助您显著提高照片质量。要了解有关 AVCapture 改进情况的更多信息,另请务必观看“摄像头捕捉新功能”视频。
资源
相关视频
WWDC22
WWDC21
WWDC16
-
下载
♪ ♪ 嗨 我叫罗伊 我是相机软件团队的工程师 今天很高兴能为您说明 我们在照片质量上的改善 包括最受欢迎的视频格式 以及您的应用程序如何使用它们 来提供更优质的体验 iPhone是全世界最受欢迎的相机 许多年来 开发者一直 充分利用它强大的相机系统 提供多样的一流体验 从专业摄影app到视频直播工具 不同情境条件需要不同水平的 照片质量 比方说 专拍静态照片的app 就会要求相机能够提供 最佳的照片质量 另一方面 一个社交app 可能需要把面部特效覆盖到 正在直播的视频帧上 这种自定义渲染 在计算上可能要求较高 为了避免掉帧 开发者可能会偏好低分辨率 让每帧要处理的像素较少 这么多样的用途需要有个简单方法 让您能指定自己是 偏重质量还是性能那一端 不过 在讨论照相质量以前 我们简要回顾一下 iOS的基本拍照原理 我们先开启一个 AVCaptureSession会话对象 可以围绕它构建出一个对象图 因为我们要拍照 所以相机就会是 我们的AVCaptureDevice 接着 AVCaptureDeviceInput 会基于相机装置而实例化 提供输入数据给这个会话 接着 AVCapturePhotoOutput 就会添加到图表中 作为照片的接收方
所有这些元素会通过 AVCaptureConnection连接在一起 会话开始运行后 我们就可以捕获照片 通过呼叫capturePhoto方法 到AVCapturePhotoOutput实例上 欲进行更多自定义设置 可以使用AVCapturePhotoSettings对象 将它传递到capturePhoto方法 捕获的照片将会以 AVCapturePhoto对象表示 最后在您的委托方法上接收 我们对这些API有非常详尽的讨论 2016年的会话 “iOS Photography的新进展” 还没看过的可以前去收看 知道iOS的基本拍照原理后 我们来看看高质量照片可以如何拍摄 过去 如果你想捕获 最高质量的照片 您会设置 AVCapturePhotoSettings上的 isAutoStillImageStabilization Enabled属性为true 那是因为静态图像的稳定性 是获得较高质量照片的主要方法 但这些年来 我们一直持续在 改善我们提升照片质量的算法 除了静态照片稳定性外 我们现在有了更丰富的技术可以选用 像是不同的多图像融合技术 包括Smart HDR和Deep Fusion 带来的结果是 isAutoStillImageStabilization Enabled 已经过时 不适合作为 高照片质量的代理 为解决这个问题 我们在iOS 13引入 AVCapturePhotoOutput. QualityPrioritization 用非常简单的方式 告诉AVCapturePhotoOutput 如何在照片捕获中设置质量的优先级 我们在先前的WWDC 一直没有机会谈论 这个重要的API 所以想在此花点时间说明它的原理 我们有三种质量优先级 可以选择: 速度优先、平衡优先、质量优先 选择速度优先 就是在跟框架说 您最在乎的是捕获速度 甚至可以牺牲照片质量 若您想要取得 照片质量和传递速度的平衡 就使用平衡优先 质量优先和速度优先正好相反 认为图像质量最重要 应该优先考虑 而较为缓慢的捕获流程 是可以容忍的 请留意 上述指明的质量优先级 只是作为提示 提供给 AVCapturePhotoOutput 并不会影响所使用的算法 最终 AVCapturePhotoOutput 会针对各种限制进行考虑 选择最适合当下场景的算法 例如 它为低照明情境选择的方法 就会和光线充足的空间不同 虽然如此 我们明白 基于不同的捕获长度 您可能想要安排不同的用户体验
所以在 AVCaptureResolvedPhotoSettings 对象传递给 AVCapturePhotoOutputDelegate 方法这方面 我们为您带来一个属性 photoProcessingTimeRange 它能指示 照片传递到您的委托要花多少时间 这就能帮助您决定 像是 在等待捕获完成的过程中 您是否想去投个球 我们来看看天它在代码中如何运行 当您在设置AVCapturePhotoOutput时 您可以为特定的捕获会话需求 指定一个最高质量优先级 若您不选择设置 默认值为平衡优先 这只需要设置一次 设置优先级很重要 是因为 根据场景不同 我们的捕获管道 也会有不同设置 比方说 如果我们知道你不会 超出速度优先 我们就能构造一个捕获管道 让它消耗的内存和电池 远远少于平衡优先 因此我们鼓励您审慎判断 选择所需的优先级 在您呼叫capturePhoto方法之前 您可以为这次特定的捕获 自定义质量优先级 做法是在 AVCapturePhotoSettings对象上 设置photoQualityPrioritization属性 默认值是平衡优先 如画面所演示 我们在两个不同情况 使用两种不同优先级
请留意 捕获前的质量优先级设置 不得超过AVCapturePhotoOutput的 最高质量优先级 不然代码会显示异常 三种优先级的性能特征 是由我们使用的基础算法所决定 映射会根据您使用何种格式 而有所差异 我们接着就来谈谈 照片和视频格式之间的差异 先看照片格式 速度优先会拍出WYSIWYG照片 也就是“所见即所得”照片 只经过稍微处理 使用一些降噪措施 若指定平衡优先 我们会选择 快速融合算法的集合 能产出 比WYSIWYG照片更好的质量 不过捕获速率较低 至于质量优先 取决于现有装置 和照度 框架会使用 一些强大的工具 像是Deep Fusion 以提供最佳的照片质量 照片会看起来很优 但天下没白吃的午餐 您得付费才能持续使用 另一方面 来看视频格式 三种优先级都使用最微量的处理 让照片能以最快速度传递 照片和视频格式的讨论 差不多告个段落 接着进一步来看 它们之间的不同 使用照片格式 等于是跟框架说 你最在乎的就是拍摄静态照片 例如 如果你将 AVCaptureVideoDataOutput 设为照片格式 你在默认设置得到的采样缓冲 就只会是预览分辨率 那是因为我们知道拍摄照片 是你的第一优先 所以可以设想这些帧数 会用在预览 而不是视频录制上 选择照片格式的好处是 有些以照片为中心的功能 只有照片格式可以使用 像是Live Photo和ProRAW等等 如果你想使用那些功能 选照片格式就对了 照片格式拥有最高分辨率 但帧率最高只有每秒30帧
选择照片格式的做法是 将您的会话预设为照片 或是您可以选择一个格式 它的 isHighestPhotoQualitySupported 为true 另一方面 使用视频格式 就表示这是以视频为中心的体验 你得到的分辨率会更适合 录制和直播 而且您也能 使用高帧率 如60fps 若有个格式不是照片格式 那肯定就是视频格式 所以您可以将会话预设为非照片 或是选择一个格式 它的 isHighestPhotoQualitySupported 为false 您可能很纳闷 我们为何不将 一些强大的算法应用到视频格式 并非因为我们懒惰 我们有充分的原因 许多app选择使用视频格式 是因为它们需要执行 大量的自定义处理 而视频格式很适用于这种目的 是因为它们系统需求低 若我们利用前面提到的 照片增强技术 可能反而损害了这些app的体验 比方说 一个AR app可能允许客户 快照一张他们和3D场景互动的照片 这时候若运作现有的融合算法 很有可能导致app的摄像头 出现掉帧现象 干扰了它的核心功能 所以我们非常小心翼翼地 看待质量和速度之间的 微妙平衡 我们还将视频格式设计为 在最艰难的状况下也能尽职工作 不过 以上妥协做法 都在今天止于iOS 15 我们的照片质量有了大跃进 通过我们最受欢迎的视频格式 通过一些改良的算法 我们现在能够极致地 改善照片质量 还不会影响到 您的app体验的其他面向 有了这个新功能 您的app 现在可以拍摄精彩的照片 并保留同样的操作弹性 来执行复杂的自定义计算
所以我们谈到的质量大跃进 到底有多大呢? 我们来看一些前后对照
改善是相当显著的 右图小男孩的脸 噪声较少 因此看起来比较自然 我们更可以观察到他头发的光泽
照片主角眼中的反射光 也看起来更鲜明、更灵动
在这个低照明的户外情境下 她脸上和衣服上的去噪成果非凡 最后一张 整体环境好看很多 椅子的皮革纹理也更好地保留下来
既然你很好奇 我们来看看 已支持的视频格式的算法映射
速度优先仍然会产出稍微处理的 WYSIWYG照片 这仍然是得到照片最快的方法 既然速度是您的第一优先 就非常符合您的需求 所以我们没有更动 在您录制的视频之中 不会出现掉帧现象 预览时也不会出现中断 然而 在平衡优先中 您现在能获得 质量上十分显著的提升 照片处理的时间也只有些微增加
跟速度优先一样 您的视频录制 不会有任何掉帧现象 您的预览过程不会被打断 就算你正在拍摄、处理 那些精美的照片 最后 在质量优先中 我们运行成本更高的算法 来获得更好的质量 这可能会出现掉帧 或是造成预览过程中断 全取决于您的装置新旧 这个功能将适用于所有iPhone 一路支持到iPhone XS 获得本次升级的视频格式 是最受欢迎的那几种 1280x720 支持30fps和60fps
1920x1080 也支持30fps和60fps
1920x1440 支持30fps 我们甚至添加4K 支持30fps
您要如何确保自己的代码里 使用的是正确的格式呢? 非常简单 在iOS 15 我们引入了新的属性 isHighPhotoQualitySupported 在AVCaptureDevice.Format类型上 若格式支持这个功能 这个属性就会为true 这个属性为true的任何格式 都保证是视频格式 所以您不用担心 会不小心点选照片格式
若你想要这种格式 您只需要取得可适用于 您的AVCaptureDevice实例的格式 然后只要选取 isHighPhotoQualitySupported 为true的格式就行了 我们也在示例代码AVcam 更新了这个功能 若您想看工作样本 请不吝使用看看 您很有可能会搞混这个新属性 isHighPhotoQualitySupported 以及现存的 isHighestPhotoQualitySupported 如我们前面提到的 后者会告诉您 格式是不是照片格式 它不会告诉你 一个视频格式 是否支持高照片质量 那么 您需要做些什么 才能得到这个新功能吗? 答案是也许 如果您已经在使用 AVCapturePhotoOutput 以及平衡优先级 那就恭喜您 您会自动 在iOS 15上得到优质的照片
如果您的app使用速度优先级 只要将它更新为平衡优先 您就能得到更好的照片 不用担心掉帧问题
如果您还在使用被舍弃的 AVCaptureStillImageOutput 那希望以上介绍能 说服您即刻跳槽 因为现在质量优先级的使用 可能会导致视频掉帧 我们不想把这个新的行为 强加在您的app上 除非您自己选择 所以我们加了一个链接时间检查 以确定 您的app使用的质量优先级 与视频格式 是在iOS 15之前编译的 那么我们就会自动改为平衡优先 如果您真的想要获得最佳质量 您只需要用iOS 15 SDK 重新编译您的app就行了 有一些警告事项需要注意
这个功能目前只用于 AVCaptureSession 不能用于 AVCaptureMultiCamSession
已舍弃的 AVCaptureStillImageOutput 将不会支持这个功能 如果您使用平衡或质量优先 那么我们使用的某些算法 可能会合并不同曝光程度的图像 来改善动态范围 照片会获得更佳的质量 但它们可能会和同时间 录制的视频看起来不一样 如果您想让视频和照片一模一样 请改用速度优先 最后 我们简述一下今天涵盖的内容
在设计您的app体验时 请留意您选择的是 质量还是速度 弄清楚照片质量在您的用途中 会扮演什么角色 并选用适切的 优先级来达成这个目的 您只要花一点点工夫 有时甚至不用费心 就能通过视频格式获得 精美的照片 非常感谢您的收看 [音乐]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。