使用AVFoundation框架来自定义相机之各类超全详细介绍

本文详细介绍了如何使用AVFoundation框架实现自定义相机,包括AVCaptureDevice、AVCaptureDeviceInput、AVCaptureSession、AVCaptureOutput、AVCaptureConnection和AVCaptureVideoPreviewLayer的使用,以及处理中断和错误的方法。通过这些类可以实现对硬件设备的配置,管理数据流,设置输出图像质量和处理媒体输出。
摘要由CSDN通过智能技术生成

 

上一篇文章写了如何使用UIImagePickerController来调用相机,即使该类有一个CameraOverLayView可以自定义控制按钮,但是整体来说可定制性太差,因此我们来使用AVFoundation框架里的一些类实现完全自定义UI的相机。

我们先来看一下整个结构:

 

Block diagram of detailed capture session architecture example: separate AVCaptureDeviceInput objects for camera and microphone connect, through AVCaptureConnection objects managed by AVCaptureSession, to AVCapturePhotoOutput, AVCaptureMovieFileOutput, and AVCaptureVideoPreviewLayer.

 

第一次看可能感觉到这么多类有点蒙。

下面介绍一下用到的类:


1.AVCaptureDevice:   

表示硬件采集设备(摄像头、麦克风)以及与该设备关联的属性。

可以使用硬件采集设备配置底层硬件的属性。可以使用AVCaptureDevice类的方法来列出可用的设备。在设置硬件采集设备的属性(其焦点模式、曝光模式等)之前,必须首先使用lockForConfiguration:方法获取设备上的锁。同时还应该查询设备的功能,以确保打算设置的新模式对该设备有效。然后可以使用unlockforconfiguration方法设置属性并释放锁。

AVFoundation框架提供了两个主要的生成AVCaptureDevice对象的方式:

a.直接返回AVCaptureDevice对象:

AVCaptureDevice类的 defaultDeviceWithDeviceType:mediaType:position: 方法

[AVCaptureDevice defaultDeviceWithDeviceType:<#(nonnull AVCaptureDeviceType)#> 
mediaType:<#(nullable AVMediaType)#> position:<#(AVCaptureDevicePosition)#>]

b.返回设备支持的AVCaptureDevice数组:

1.AVCaptureDeviceDiscoverySession (iOS10之后启用)类的方法

+ (instancetype)discoverySessionWithDeviceTypes:(NSArray<AVCaptureDeviceType> *)deviceTypes 
mediaType:(nullable AVMediaType)mediaType 
position:(AVCaptureDevicePosition)position;

NSArray* devices = [AVCaptureDeviceDiscoverySession 
discoverySessionWithDeviceTypes:<#(nonnull NSArray<AVCaptureDeviceType> *)#>
 mediaType:<#(nullable AVMediaType)#> 
position:<#(AVCaptureDevicePosition)#>].devices];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值