【iOS】聊一聊AVCaptureDevice中hasFlash和hasTorch的区别

输入设备AVCaptureDevice 继承自NSObject:是关于相机硬件的接口,用于配置底层硬件的属性(例如相机聚焦、白平衡、感光度ISO、曝光、帧率、闪光灯、缩放等),这些底层硬件包括前置摄像头、后置摄像头、麦克风、闪光灯等。使用AVCaptureDeviceAVCaptureSession对象提供输入数据(如音频或视频)

问题:

AVCaptureDevice同时具有hasFlash和hasTorch属性(以及类似的其他方法/属性)。闪光灯和手电筒有什么不同?
另外,是否有iOS设备只具备上述功能之一?

解答:

hasFlash 指示AVCaptureDevice是否有闪光灯。
hasTorch 反映当前设备是否具有内置的手电筒。即使设备有手电筒,也可能无法使用。 因此,在使用之前检查torchAvailable属性的值。

在iPhone设备上,两个摄像头都有闪光灯
后置摄像头有LED闪光灯,可以在手电筒模式下工作
前置摄像头使用显示屏作为闪光灯(短时间内白色屏幕显示足够的光线),但显示屏不能用作手电筒。
前后摄像头都会通过条件[device hasFlash],但是为前置摄像头设置[device setTorchMode:AVCaptureTorchModeOn]可能会导致app崩溃,最好的办法两者都检查一下:

示例.png

在iPad设备上,只有前置摄像头有闪光灯
只有前置摄像头使用显示屏作为闪光灯(短时间内白色屏幕显示足够的光线),但显示屏不能用作手电筒。

当使用后置摄像头,而且代码中使用[device hasTorch] 进行条件判断的话,那么在iPad中是没法调起摄像头实现扫码等功能的。

更多内容请参看:
OC之AVCaptureDevice
iOS视频录制功能预研

你可能感兴趣的:(【iOS】聊一聊AVCaptureDevice中hasFlash和hasTorch的区别)