iOS AVCaptureDevice介绍

本文介绍了iOS中AVCaptureDevice的使用,包括权限申请、初始化方法、相关通知和设备配置,如闪光灯、手电筒、自动对焦、曝光及白平衡的设置。
摘要由CSDN通过智能技术生成

简介

AVCaptureDevice 一种为捕获会话提供输入(例如音频或视频)并提供针对特定于硬件的捕获功能的控件的设备。是关于硬件的接口,用于配置底层硬件的属性(如对焦,闪光灯,曝光等)。这些底层硬件包括前置摄像头、后置摄像头、麦克风、闪光灯等。使用AVCaptureDeviceAVCaptureSession对象提供输入数据(如音频或视频)。

1. 权限申请

iOS 权限申请字段

首先应该在Info.plist中添加相应的权限字段 如:申请相机权限

<key>NSCameraUsageDescription</key>
<string>使用相机</string>

申请权限通过调用AVCaptureDevice 的 requestAccess方法

 @available(iOS 7.0, *)
    open class func requestAccess(for mediaType: AVMediaType, completionHandler handler: @escaping (Bool) -> Void)

判断是否具有权限通过调用AVCaptureDevice 的 authorizationStatus方法

@available(iOS 7.0, *)
    open class func authorizationStatus(for mediaType: AVMediaType) -> AVAuthorizationStatus
public enum AVAuthorizationStatus : Int {
   
    //用户尚未授予或拒绝该权限,
    case notDetermined = 0
    //不允许用户访问媒体捕获设备。这个状态通常是看不到的:用于发现设备的`AVCaptureDevice`类方法不会返回用户被限制访问的设备。
    case restricted = 1
    //用户已经明确拒绝了应用访问捕获设备
    case denied = 2
    //用户授予应用访问捕获设备的权限
    case authorized = 3
}

AVMediaType

public struct AVMediaType : Hashable, Equatable, RawRepresentable {
   
    public init(_ rawValue: String)
    public init(rawValue: String)
}
extension AVMediaType {
   
    @available(iOS 4.0, *)
    public static let video: AVMediaType

    @available(iOS 4.0, *)
    public static let audio: AVMediaType

    @available(iOS 4.0, *)
    public static let text: AVMediaType

    @available(iOS 4.0, *)
    public static let closedCaption: AVMediaType

    @available(iOS 4.0, *)
    public static let subtitle: AVMediaType

    @available(iOS 4.0, *)
    public static let timecode: AVMediaType

    @available(iOS 6.0, *)
    public static let metadata: AVMediaType

    @available(iOS 4.0, *)
    public static let muxed: AVMediaType

    @available(iOS 9.0, *)
    public static let metadataObject: AVMediaType
    
    @available(iOS 11.0, *)
    public static let depthData: AVMediaType
}

2.初始化方法

//这两个方法在iOS 10.0 之后就不推荐使用了
 @available(iOS, introduced: 4.0, deprecated: 10.0, message: "Use AVCaptureDeviceDiscoverySession instead.")
    open class func devices() -> [AVCaptureDevice]

 @available(iOS, introduced: 4.0, deprecated: 10.0, message: "Use AVCaptureDeviceDiscoverySession instead.")
    open class func devices(for mediaType: AVMediaType) -> [AVCaptureDevice]

推荐使用的方法

// 此方法返回系统上当前可用的给定媒体类型的默认设备。
open class func `default`(for mediaType: AVMediaType) -> AVCaptureDevice?
/*
根据uniqueID 初始化 (可以通过实例的uniqueID属性获取)
每台可用的捕获设备都有一个唯一的ID,该ID会在设备连接和断开连接,应用程序重新启动以及系统本身重新启动后一直存在于一个系统上。 此方法可用于调用或跟踪先前已保存唯一ID的特定设备的状态。
*/ 
public /*not inherited*/ init?(uniqueID deviceUniqueID: String)

使用 AVCaptureDeviceDiscoverySession 获取AVCaptureDevice

public convenience init(deviceTypes: [AVCaptureDevice.DeviceType], mediaType: AVMediaType?, position: AVCaptureDevice.Position)

//通过这个参数获取可用device
var devices: [AVCaptureDevice]]
extension AVCaptureDevice.DeviceType {
   
    @available(iOS 10.0, *)
    public static let builtInMicrophone: AVCaptureDevice.DeviceType
    
    @available(iOS 10.0, *)
    public static let builtInWideAngleCamera: AVCaptureDevice.DeviceType

    @available(iOS 10.0, *)
    public static let builtInTelephotoCamera: AVCaptureDevice.DeviceType

    @available(iOS 13.0, *)
    public static let builtInUltraWideCamera: AVCaptureDevice.DeviceType

    @available(iOS 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值