Highlight
iPhone 17 系列的前置摄像头采用方形传感器和 95° 视角镜头,支持动态宽高比切换和智能取景,让你的自拍和视频通话自动适配画面中的人数和位置。
核心内容
以前用前置摄像头拍照有几个固定的烦恼。
横拍还是竖拍,你必须旋转手机。多人合影时,要找人帮忙或者伸长手臂。视频通话时,人稍微一移动就跑出画面,用户得手动调整位置。
iPhone 17、iPhone Air 和 iPhone 17 Pro 的前置摄像头从硬件层面解决了这些问题。
传感器是方形的,不再是传统的 4:3 矩形。这意味着你可以选择任何宽高比——横屏、竖屏、正方形——都不用旋转手机。镜头视角达到 95°,是 iPhone 前置摄像头中最宽的。配合人脸和注视检测,摄像头能自动缩放和旋转画面,把所有人框进来。
Apple 把这套能力封装成了两个 API:动态宽高比(Dynamic Aspect Ratio)和智能取景监视器(Smart Framing Monitor)。前者让你无缝切换画面方向,后者自动给出取景建议。
视频通话场景下,Center Stage 可以实时调整画面,让通话者始终居中。还有一个低延迟防抖模式,专门优化视频通话的稳定性。
详细内容
动态宽高比
(05:29)
动态宽高比是所有手动和自动取景的基础。iOS 26 开始,AVCaptureDevice 新增了 dynamicAspectRatio 属性。
设置这个属性后,摄像头会从方形传感器中裁剪出你选择的宽高比,无需重建 capture session 或中断预览。切换是实时的。
支持的设备类型是 .builtInUltraWideCamera(前置超广角),只支持方形格式,分辨率从 1280 到 4032。可用宽高比有五种:3:4、4:3、9:16、16:9 和 1:1。4032 格式只支持 3:4 和 4:3,因为这两个能提供最高照片分辨率。
实现一个”点击旋转”按钮,代码如下:
// 选择 Center Stage 前置摄像头
let discoverySession = AVCaptureDevice.DiscoverySession(
deviceTypes: [.builtInUltraWideCamera],
mediaType: .video,
position: .front
)
guard let camera = discoverySession.devices.first else { return }
// 找到支持目标宽高比的格式
let desiredAspectRatio = AVCaptureDevice.AspectRatio.ratio4x3
let format = camera.formats.first { format in
format.supportedDynamicAspectRatios.contains(desiredAspectRatio)
}
// 配置摄像头
try? camera.lockForConfiguration()
camera.activeFormat = format
camera.activeVideoMinFrameDuration = CMTime(value: 1, timescale: 30)
// 切换宽高比
let timestamp = camera.setDynamicAspectRatio(desiredAspectRatio)
camera.unlockForConfiguration()
关键点:
DiscoverySession只查找.builtInUltraWideCamera类型的前置摄像头supportedDynamicAspectRatios返回格式支持的宽高比数组setDynamicAspectRatio返回变化生效时的第一帧时间戳- 切换过程不中断预览,用户看不到黑屏
智能取景监视器
(07:39)
自动缩放和自动旋转由 AVCaptureSmartFramingMonitor 驱动。它基于人脸和注视检测,定期给出取景建议——包含宽高比和缩放系数。你的应用可以选择采纳或忽略。
监视器只在 4032 照片格式下提供建议,这是因为它专为拍照场景设计。
设置代码:
// 摄像头已在动态宽高比步骤中选中
let format = camera.formats.first { format in
format.supportedDynamicAspectRatios.contains(.ratio4x3) &&
format.supportedFramings.contains(.smartFraming)
}
try? camera.lockForConfiguration()
camera.activeFormat = format
camera.unlockForConfiguration()
// 获取并配置智能取景监视器
let monitor = camera.smartFramingMonitor
monitor.enabledFramings = monitor.supportedFramings
// 观察取景建议
monitor.observe(\.recommendedFraming) { monitor, _ in
guard let recommendation = monitor.recommendedFraming else { return }
try? camera.lockForConfiguration()
camera.setDynamicAspectRatio(recommendation.aspectRatio)
camera.videoZoomFactor = recommendation.zoomFactor
camera.unlockForConfiguration()
}
// 启动监视
monitor.startMonitoring()
关键点:
smartFramingMonitor是AVCaptureDevice的属性enabledFramings控制监视器推荐哪些取景方式,可限制为子集- 用 KVO 观察
recommendedFraming属性获取实时建议 - 建议包含
aspectRatio和zoomFactor两个值 - 先设置宽高比,再设置缩放系数,预览过渡更平滑
stopMonitoring()停止监视,removeObserver()取消观察
传感器方向补偿
(10:05)
历代 iPhone 前置摄像头的传感器都是横向(Landscape Left)安装的。竖屏拍照时,图像缓冲区会带着 EXIF 方向标记,告诉播放器要旋转 270°。
iPhone 17 系列的 Center Stage 前置摄像头传感器改为竖向安装。如果你的代码依赖旧的旋转值,照片可能横着显示。
AVCapturePhotoOutput 默认会自动处理方向补偿——它会物理旋转照片,更新 EXIF 元数据,然后再交付给你的应用。结果照片和旧设备一样,是 landscape left 方向,你可以继续使用原来的旋转逻辑。
补偿只应用于 HEIC、JPEG 和未压缩的处理后照片,不应用于 Bayer RAW 或 Apple ProRAW。
iOS 26 新增 cameraSensorOrientationCompensationEnabled 属性,可以关闭这个行为。关闭后性能更好,但你要确保旋转处理正确。
Center Stage 视频通话
(14:44)
如果你的视频通话应用使用了 VoIP 后台模式,用户可以直接从控制中心的”视频效果”菜单开启 Center Stage。系统级别的视频效果(人像、演播室灯光、手势)都是按进程启用的,激活后对应用内所有支持的摄像头生效。
不使用 VoIP 模式的应用也可以手动启用 Center Stage,从 iPhone 17 系列开始支持。
// 选择支持的格式
let format = camera.formats.first { format in
format.supportedCenterStage == true
}
try? camera.lockForConfiguration()
camera.activeFormat = format
camera.centerStageControlMode = .cooperative // 允许用户从应用内控制
camera.isCenterStageEnabled = true
camera.unlockForConfiguration()
关键点:
supportedCenterStage判断格式是否支持 Center StagecenterStageControlMode有cooperative(用户可控制)和app(仅应用控制)两种isCenterStageEnabled开启 Center Stage- 开启后画面会自动调整,保持所有人居中
低延迟防抖
(15:47)
Center Stage 前置摄像头还支持一个实时低延迟防抖模式,专门优化视频通话。
if let connection = videoOutput.connection(with: .video) {
connection.preferredVideoStabilizationMode = .lowLatency
}
这个模式默认关闭。开启后,通话中的抖动会明显减少,画面更稳定。
核心启发
1. 自拍应用集成”智能合影”模式
做什么:用智能取景监视器自动检测画面中的人数,自动缩放和旋转,让所有人在按下快门前都出现在合适的构图里。
为什么值得做:多人自拍时总有人被裁掉或挤在边缘,用户需要反复调整位置和距离。智能取景监视器基于人脸和注视检测给出取景建议,应用自动采纳后用户只需按快门。
怎么开始:获取 AVCaptureDevice 的 smartFramingMonitor,启用 smartFraming,用 KVO 观察 recommendedFraming 变化,自动设置 dynamicAspectRatio 和 videoZoomFactor。入口 API:AVCaptureSmartFramingMonitor
2. 直播应用添加”横竖屏同播”
做什么:用动态宽高比让主播在不旋转手机的情况下切换横屏和竖屏,适应不同平台的推荐格式。
为什么值得做:不同直播平台推荐的画面比例不同(抖音竖屏 9:16,B站横屏 16:9),主播以前需要旋转手机或重新配置。动态宽高比切换实时生效,直播不中断,一个按钮就能适配多平台。
怎么开始:选择 .builtInUltraWideCamera 前置摄像头,找到支持目标宽高比的格式,调用 setDynamicAspectRatio(_:) 切换。入口 API:camera.setDynamicAspectRatio(.ratio16x9)
3. 视频会议应用优化”多人入会”体验
做什么:启用 Center Stage 和低延迟防抖,当有人走进画面时自动扩宽画面,所有人都能被看到,且手持走动时画面稳定。
为什么值得做:视频会议中人员变动频繁,有人加入时画面可能框不住所有人,手持设备时的抖动也让对方看得不舒服。Center Stage 自动跟踪人物,低延迟防抖减少画面晃动,提升通话质量。
怎么开始:选择 supportedCenterStage 格式,设置 centerStageControlMode = .cooperative,开启 isCenterStageEnabled,视频连接设置 preferredVideoStabilizationMode = .lowLatency。入口 API:camera.isCenterStageEnabled = true + connection.preferredVideoStabilizationMode = .lowLatency
4. 社交应用增加”自拍姿势引导”
做什么:结合智能取景监视器的建议,在预览界面显示视觉提示,告诉用户”向左移动一点”、“后退能拍得更全”。
为什么值得做:普通用户不懂构图规则,拍出来的自拍经常构图失衡。把监视器的取景建议翻译成直观的视觉引导,能帮用户拍出更好的照片,提升应用的拍照体验。
怎么开始:观察 smartFramingMonitor.recommendedFraming 的变化,对比当前取景和建议取景的差异,在预览层叠加箭头或文字提示,引导用户调整位置。入口 API:monitor.observe(\.recommendedFraming)
5. 相机应用支持”180° 拍照”
做什么:利用方形传感器和 95° 视角,让用户一次拍照覆盖前后两个方向,后期拼接成全景或对比图。
为什么值得做:iPhone 17 的方形传感器和 95° 超广角是前置摄像头中最宽的,一次拍摄能覆盖比传统前置更大的视野范围。利用这个特性可以创造新的拍照玩法,如前后景同框、超广自拍等。
怎么开始:使用 .builtInUltraWideCamera 的 4032 分辨率格式(最大视野),拍摄后利用超广角覆盖的范围做图像拼接或创意裁剪。入口 API:camera.formats 中筛选最大分辨率 + .builtInUltraWideCamera
关联 Session
- 304 - Photo capture — 深入讲解照片捕获的高级功能,与 Center Stage 配合使用
- 222 - MetricKit — 分析摄像头性能和功耗指标
- 269 - SwiftUI — 构建自定义相机 UI 的最佳实践
- 274 - SwiftData — 存储和管理拍摄的照片与元数据
- 258 - Xcode 27 — 调试摄像头应用的新工具和功能
评论
GitHub Issues · utterances