iOS中拍照与拍摄都需要操作相机,对于相机的相关特性,例如前后切换,对焦,变焦,曝光,白平衡,红眼等特性。借助网友整理的部分,增加了一些说明和使用,同时随着apilevel的升高,部分接口有变化或有新的接口增加,请对照实际的
typedef NS_ENUM(NSInteger, AVCaptureDevicePosition) {
AVCaptureDevicePositionUnspecified = 0, //未指定
AVCaptureDevicePositionBack = 1,//后置
AVCaptureDevicePositionFront = 2,//前置
} API_AVAILABLE(macos(10.7), ios(4.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
typedef NS_ENUM(NSInteger, AVCaptureFlashMode) {
AVCaptureFlashModeOff = 0, //关
AVCaptureFlashModeOn = 1, //开
AVCaptureFlashModeAuto = 2, //自动
} API_AVAILABLE(macos(10.7), ios(4.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchOS);
@property(nonatomic, readonly) BOOL hasFlash;
@property(nonatomic, readonly, getter=isFlashAvailable) BOOL flashAvailable API_AVAILABLE(macos(10.15), ios(5.0), macCatalyst(14.0)) API_UNAVAILABLE(tvOS);
//设置闪光灯模式,10以上用AVCapturePhotoSettings.flashMode
@property(nonatomic) AVCaptureFlashMode flashMode API_DEPRECATED("Use AVCapturePhotoSettings.flashMode instead.", ios(4.0, 10.0)) API_UNAVAILABLE(tvOS);
设置闪光灯模式,10以上用AVCapturePhotoSettings.flashMode
typedef NS_ENUM(NSInteger, AVCaptureTorchMode) {
AVCaptureTorchModeOff = 0, //关
AVCaptureTorchModeOn = 1, //开
AVCaptureTorchModeAuto = 2, //自动
} API_AVAILABLE(macos(10.7), ios(4.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
@property(nonatomic) AVCaptureTorchMode torchMode;
device.torchMode = AVCaptureTorchModeOn
typedef NS_ENUM(NSInteger, AVCaptureFocusMode) {
AVCaptureFocusModeLocked = 0, //指示焦点应锁定在透镜的当前位置。
AVCaptureFocusModeAutoFocus = 1, //指示设备应该自动对焦一次,然后将对焦模式更改为AVCaptureFocusModeLocked。
AVCaptureFocusModeContinuousAutoFocus = 2, //指示设备在需要时自动对焦。
} API_AVAILABLE(macos(10.7), ios(4.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
@property(nonatomic) AVCaptureFocusMode focusMode;
指示接收方自动聚焦系统对特定聚焦扫描范围的限制的常数,如果它支持范围限制。
typedef NS_ENUM(NSInteger, AVCaptureAutoFocusRangeRestriction) {
AVCaptureAutoFocusRangeRestrictionNone = 0, //指示自动对焦系统不应限制对焦范围。
AVCaptureAutoFocusRangeRestrictionNear = 1, //指示自动对焦系统应限制离相机较近的主题物的对焦范围。
AVCaptureAutoFocusRangeRestrictionFar = 2, //表示自动对焦系统应该对距离相机较远的拍摄对象限制对焦范围。
} API_AVAILABLE(ios(7.0), macCatalyst(14.0)) API_UNAVAILABLE(macos, tvos) __WATCHOS_PROHIBITED;
@property(nonatomic) CGPoint focusPointOfInterest;
@property(nonatomic) AVCaptureAutoFocusRangeRestriction autoFocusRangeRestriction
如果接收设备有可调曝光量,则指示曝光模式的常数。
typedef NS_ENUM(NSInteger, AVCaptureExposureMode) {
AVCaptureExposureModeLocked = 0, //指示应将敞口锁定在其当前值。
AVCaptureExposureModeAutoExpose = 1, //指示设备应该自动调整曝光一次,然后将曝光模式更改为AVCaptureExposureModeLocked。
AVCaptureExposureModeContinuousAutoExposure = 2, //指示设备应在需要时自动调整曝光。
AVCaptureExposureModeCustom API_AVAILABLE(macos(10.15), ios(8.0), macCatalyst(14.0)) = 3, //指示设备只应根据用户提供的ISO、曝光值来调整曝光量。
} API_AVAILABLE(macos(10.7), ios(4.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
@property(nonatomic) AVCaptureExposureMode exposureMode;
@property(nonatomic) CGPoint exposurePointOfInterest;
如果接收设备有可调白平衡,指示白平衡模式的常数。
typedef NS_ENUM(NSInteger, AVCaptureWhiteBalanceMode) {
AVCaptureWhiteBalanceModeLocked = 0, //指示应将白平衡锁定在其当前值。
AVCaptureWhiteBalanceModeAutoWhiteBalance = 1, //表示设备自动调整白平衡一次,然后将白平衡模式修改为avcapturewhitebalancemodellocked。
AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance = 2, //指示设备在需要时自动调节白平衡。
} API_AVAILABLE(macos(10.7), ios(4.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
- (BOOL)isWhiteBalanceModeSupported:(AVCaptureWhiteBalanceMode)whiteBalanceMode;
@property(nonatomic) AVCaptureWhiteBalanceMode whiteBalanceMode;
指示客户端对支持媒体类型的底层硬件的授权的常量。
typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {
AVAuthorizationStatusNotDetermined = 0, //指示用户尚未决定客户机是否可以访问硬件。
AVAuthorizationStatusRestricted = 1,//未授权客户端访问介质类型的硬件。用户无法更改客户端的状态,可能是由于家长控制等活动限制。
AVAuthorizationStatusDenied = 2, //用户明确地拒绝了对支持客户端媒体类型的硬件的访问。
AVAuthorizationStatusAuthorized = 3, //客户端被授权访问支持某种媒体类型的硬件。
} API_AVAILABLE(macos(10.14), ios(7.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
常量,指示传输控件的当前回放模式(如果有的话)。
typedef NS_ENUM(NSInteger, AVCaptureDeviceTransportControlsPlaybackMode) {
AVCaptureDeviceTransportControlsNotPlayingMode = 0, //指示磁带传输不通过播放头。
AVCaptureDeviceTransportControlsPlayingMode = 1, //指示磁带传输通过播放头进行。
} API_AVAILABLE(macos(10.7)) API_UNAVAILABLE(ios, macCatalyst, watchos, tvOS);
表示活动或支持的视频颜色空间的常量。
typedef NS_ENUM(NSInteger, AVCaptureColorSpace) {
AVCaptureColorSpace_sRGB = 0, //sGRB颜色空间(https://www.w3.org/Graphics/Color/srgb)
AVCaptureColorSpace_P3_D65 = 1,//使用Illuminant D65作为白点的P3 D65宽色空间。
AVCaptureColorSpace_HLG_BT2020 API_AVAILABLE(ios(14.1), macCatalyst(14.1)) API_UNAVAILABLE(macos, tvos) API_UNAVAILABLE(watchos) = 2, //以Illuminant D65为白点,以Hybrid Log-Gamma为传递函数的BT2020宽色空间。
} API_AVAILABLE(macos(10.15), ios(10.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
指示当前中央舞台控制模式的常数。
typedef NS_ENUM(NSInteger, AVCaptureCenterStageControlMode) {
AVCaptureCenterStageControlModeUser = 0, //指示应用程序不知道Center Stage特性。它的启用完全由控制中心的用户控制。
AVCaptureCenterStageControlModeApp = 1, //指示应用程序控制Center Stage特性,不允许用户在Control Center中输入。
AVCaptureCenterStageControlModeCooperative = 2, //表示用户和应用程序共同控制Center Stage特性。
} API_AVAILABLE(ios(14.5), macCatalyst(14.5)) API_UNAVAILABLE(macos, tvos) API_UNAVAILABLE(watchOS);
描述麦克风滤波模式的常数。
typedef NS_ENUM(NSInteger, AVCaptureMicrophoneMode) {
AVCaptureMicrophoneModeStandard = 0, //麦克风音频正在用标准语音DSP处理。
AVCaptureMicrophoneModeWideSpectrum = 1, //表示最小化麦克风音频处理,以捕捉房间内的所有声音。
AVCaptureMicrophoneModeVoiceIsolation = 2, //表示正在处理麦克风音频,以隔离语音,减弱其他信号。
} NS_SWIFT_NAME(AVCaptureDevice.MicrophoneMode) API_AVAILABLE(macos(12.0), ios(15.0), macCatalyst(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchOS);
可用的系统用户界面+showSystemUserInterface:.
typedef NS_ENUM(NSInteger, AVCaptureSystemUserInterface) {
AVCaptureSystemUserInterfaceVideoEffects = 1, //开启/关闭视频效果的系统界面。
AVCaptureSystemUserInterfaceMicrophoneModes = 2, //选择麦克风模式的系统界面。
} NS_SWIFT_NAME(AVCaptureDevice.SystemUserInterface) API_AVAILABLE(macos(12.0), ios(15.0), macCatalyst(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchOS);
表示设备格式支持的视频稳定模式的常量。
typedef NS_ENUM(NSInteger, AVCaptureVideoStabilizationMode) {
AVCaptureVideoStabilizationModeOff = 0, //表示视频不应该稳定。
AVCaptureVideoStabilizationModeStandard = 1, //表示使用iOS 5.0中引入的标准视频稳定算法来稳定视频。标准的视频稳定器具有缩小的视场。启用视频稳定可能会在视频捕获管道中引入额外的延迟。
AVCaptureVideoStabilizationModeCinematic = 2, //表明视频应该稳定使用电影稳定算法更戏剧性的结果。与标准视频稳定器相比,电影视频稳定器具有缩小的视场。与标准视频稳定化相比,启用电影视频稳定化会在视频捕获管道中引入更多的延迟,并且会消耗更多的系统内存。在这种模式下使用窄的或相同的最小和最大帧持续时间。
AVCaptureVideoStabilizationModeCinematicExtended API_AVAILABLE(ios(13.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos) = 3, //表示视频应该使用扩展电影稳定化算法来稳定。与AVCaptureVideoStabilizationModeCinematic相比,启用扩展的电影稳定化会给视频捕捉管道带来更长的延迟,消耗更多内存,但提高了稳定性。在这种模式下,建议使用相同或相似的最小和最大帧长。
AVCaptureVideoStabilizationModeAuto = -1, //表示为设备选择最合适的视频稳定模式和格式。
} API_AVAILABLE(ios(8.0), macCatalyst(14.0)) API_UNAVAILABLE(macos, tvos) __WATCHOS_PROHIBITED;
指示自动对焦系统的常数。
typedef NS_ENUM(NSInteger, AVCaptureAutoFocusSystem) {
AVCaptureAutoFocusSystemNone = 0, //指示无法使用自动对焦。
AVCaptureAutoFocusSystemContrastDetection = 1, //表示通过对比度检测实现自动对焦。对比检测执行焦点扫描,以找到最佳位置。
AVCaptureAutoFocusSystemPhaseDetection = 2, //表示通过相位检测实现自动对焦。相位检测在许多情况下无需聚焦扫描就能实现聚焦。相位检测自动对焦通常比对比度检测自动对焦对视觉的干扰小。
} API_AVAILABLE(macos(10.15), ios(8.0), macCatalyst(14.0)) API_UNAVAILABLE(tvos) __WATCHOS_PROHIBITED;
可用于控制何时允许虚拟设备切换活动的主组成设备。
具有多个组成视频设备的虚拟设备(如Dual Camera、Dual Wide Camera或Triple Camera),由每个具有不同属性的相机组成,如焦距、最大光敏度和最小聚焦距离。选择其中一个组成视频设备作为主要组成设备。对于AVCaptureSession,主要组成设备产生所有输出。对于AVCaptureMultiCamSession,主要组成设备产生连接到虚拟设备本地AVCaptureDeviceInputPort的所有输出(其中它的sourceDeviceType等于虚拟设备的deviceType)。
当请求的变焦系数可以由多个组成摄像机实现时(参见-virtualDeviceSwitchOverVideoZoomFactors),虚拟设备为场景选择最佳摄像机。其主要条件是焦距;具有最长焦距的相机需要最少的数字缩放,因此通常提供最高的图像质量。次要条件是聚焦和曝光;当场景需要聚焦或曝光超出主动主成分设备的限制时,一个较短焦距的相机可能能够提供更好的质量的图像。这样的设备称为后备主组件设备。例如,一个最小焦距为40cm的长焦相机,当场景中的对象接近40cm时,就无法提供清晰的图像。对于这样的场景,虚拟设备将切换到广角相机,通常有一个较小的最小焦距,能够实现对主题的精确聚焦。在这种情况下,广角相机是后备的主要组成设备。
typedef NS_ENUM(NSInteger, AVCapturePrimaryConstituentDeviceSwitchingBehavior) {
AVCapturePrimaryConstituentDeviceSwitchingBehaviorUnsupported = 0, //表示该设备不支持组成设备交换。这对于没有一个以上组成设备的相机是有报告的。
AVCapturePrimaryConstituentDeviceSwitchingBehaviorAuto = 1, //自动选择当前场景的最佳相机。在这种模式下,没有限制,可开关相机。
AVCapturePrimaryConstituentDeviceSwitchingBehaviorRestricted = 2, //限制回缩摄像头的选择到特定的条件(参见avcaptureprimarycontentdevicerestrictedswitchingbehaviorconditions)。相机开关,以满足要求的视频变焦系数仍然允许没有限制。
AVCapturePrimaryConstituentDeviceSwitchingBehaviorLocked = 3, //锁定摄像头切换到主动主成分设备。注意,这将minAvailableVideoZoomFactor限制为activeprimarycontentdevice的切换缩放因子(在AVCaptureDevice.virtualDeviceSwitchOverVideoZoomFactors中报告)。
} NS_SWIFT_NAME(AVCaptureDevice.PrimaryConstituentDeviceSwitchingBehavior) API_AVAILABLE(macos(12.0), ios(15.0), macCatalyst(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchOS);