AVCaptureVideoDataOutput停止变焦但AVCaptureVideoPreviewLayer仍可变焦问题咨询
物理镜头的光学变焦上限限制:单个物理镜头(如广角、长焦)有固定的光学变焦范围,当
videoZoomFactor超过该镜头的光学变焦最大值后,AVCaptureVideoDataOutput默认不会自动启用数码变焦(未配置相关参数时),但AVCaptureVideoPreviewLayer会自动通过数码变焦继续放大画面,导致两者显示不一致。而虚拟多摄像头由系统统筹多个物理镜头,变焦过程是光学切换+数码变焦的无缝结合,因此不会出现该问题。视频数据输出的分辨率配置限制:若
AVCaptureVideoDataOutput设置的输出分辨率低于预览层的分辨率,当变焦到某一阈值后,数据输出的缓冲区因分辨率不足无法继续放大(系统为避免画质过度劣化会停止进一步缩放),但预览层可基于更高的预览分辨率进行数码变焦,进而产生画面差异。会话预设的参数不匹配:如果
AVCaptureSession使用的预设(如AVCaptureSessionPresetPhoto)偏向单一功能,单个物理镜头场景下,数据输出的变焦会被限制在预设对应的分辨率范围内,而预览层不受该严格限制,最终导致变焦不同步。虚拟多摄像头的预设经过系统优化,能自动协调预览层与数据输出的参数适配。镜头切换后变焦参数未同步:手动切换到单个物理镜头时,若未重新同步
videoZoomFactor的有效范围,或未给AVCaptureDevice配置允许数码变焦的参数(如通过ramp(toVideoZoomFactor:)方法调整,或设置activeFormat.videoMaxZoomFactor),会导致数据输出的变焦卡在光学上限,而预览层可继续进行数码变焦。
内容的提问来源于stack exchange,提问作者海上琢也

