[iOS] AVCaptureDevice の列挙と使用

iOS で写真を撮ったり撮影したりするには、前後切り替え、フォーカス、ズーム、露出、ホワイトバランス、赤目補正などのカメラ関連機能の操作が必要です。ネチズンによって整理された部分の助けを借りて、いくつかの手順と使用法が追加されました。同時に、API レベルの増加に伴い、いくつかのインターフェイスが変更されたり、新しいインターフェイスが追加されたりしました。実際の <AVFCapture/AVCaptureDevice を参照してください。 h> 呼び出すヘッダー ファイル

カメラ前面/背面

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);

//设置闪光灯模式,<code>10以上用AVCapturePhotoSettings.flashMode</code>
@property(nonatomic) AVCaptureFlashMode flashMode API_DEPRECATED("Use AVCapturePhotoSettings.flashMode instead.", ios(4.0, 10.0)) API_UNAVAILABLE(tvOS);

フラッシュモードを設定し、10以上用AVCapturePhotoSettings.flashMode

LEDモード

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);

システムUI

利用可能なシステム ユーザー インターフェイス +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;

仮想デバイス

仮想デバイスがアクティブなメイン コンポーネント デバイスの切り替えをいつ許可されるかを制御するために使用できます。
複数の構成ビデオ デバイス (デュアル カメラ、デュアル ワイド カメラ、トリプル カメラなど) を備えた仮想デバイス。焦点距離、最大光感度、最小焦点距離など、それぞれ異なるプロパティを持つカメラで構成されます。コンポーネント ビデオ デバイスの 1 つをプライマリ コンポーネント デバイスとして選択します。AVCaptureSession の場合、メイン コンポーネント デバイスがすべての出力を生成します。AVCaptureMultiCamSession の場合、メイン コンポーネント デバイスは、仮想デバイスのローカル AVCaptureDeviceInputPort (sourceDeviceType が仮想デバイスの deviceType と等しい) に接続されたすべての出力を生成します。
要求されたズーム係数が複数の構成カメラで達成できる場合 ( -virtualDeviceSwitchOverVideoZoomFactors を参照)、仮想デバイスはシーンに最適なカメラを選択します。このための主な基準は焦点距離です。焦点距離が最も長いカメラでは必要なデジタル ズームが最小限に抑えられるため、一般に最高の画質が得られます。二次条件はフォーカスと露出です。シーンでアクティブな主コンポーネント デバイスの制限を超えたフォーカスまたは露出が必要な場合、焦点距離が短いカメラの方が高品質の画像を提供できる可能性があります。このような装置をバックアップマスタ装置と呼びます。たとえば、最小焦点距離が 40 cm の望遠カメラは、シーン内のオブジェクトが 40 cm に近づくと鮮明な画像を提供できません。このようなシーンでは、仮想デバイスは通常最短焦点距離が短い広角カメラに切り替わり、被写体に正確に焦点を合わせることができます。この場合、広角カメラがバックアップ機器の主要なコンポーネントとなります。

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);

おすすめ

転載: blog.csdn.net/lanlangaogao/article/details/131282486