# Camera 组件讲解
IOS相机
## UIImagePickerController
1.IOS中扑捉照片和视频最简单的方法是使用UIImagePickerController,一个封装了完整视频捕获管线和相机 UI 的 view controller。
2.UIImagePickerController通过cameraOverlayView自定义UI(需要绑定事件)
#import <UIKit/UIKit.h>
#import <MobileCoreServices/MobileCoreServices.h>
-(void)setupCameraViewController {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
NSArray *availableMediaTypes = [UIImagePickerController
availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
NSLog(@"availableMediaTypes = %@",availableMediaTypes);
if ([availableMediaTypes containsObject:(NSString *)kUTTypeMovie]) {
// 支持视频录制
UIImagePickerController *cameraViewController = [[UIImagePickerController alloc] init];
cameraViewController.sourceType = UIImagePickerControllerSourceTypeCamera;
cameraViewController.mediaTypes = @[(NSString *)kUTTypeMovie]; // 设置相机的媒体类型 (图片 视频 livephoto)
cameraViewController.delegate = self;
cameraViewController.videoQuality = UIImagePickerControllerQualityTypeHigh; // 设置录制视频的质量
UIView *cameraOverlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 68)];
cameraOverlay.backgroundColor = [UIColor redColor];
cameraViewController.showsCameraControls = NO;
cameraViewController.cameraOverlayView = cameraOverlay;
[self presentViewController:cameraViewController animated:YES completion:nil];
}
}
}
## AVFoundation
AVFoundation提供了比UIImagePickerController更多的关于处理捕获视频、图片的方法。
### AVFoundation相关类
AVFoundation 框架基于以下几个类实现图像、视频的捕捉 ,通过这些类可以访问来自相机设备的原始数据并控制它的组件。
***AVCaptureDevice*** 是关于相机硬件的接口。它被用于控制硬件特性,诸如镜头的位置、曝光、闪光灯等。
***AVCaptureDeviceInput*** 提供来自设备的数据。
***AVCaptureOutput*** 是一个抽象类,描述 capture session 的结果。以下是三种关于静态图片捕捉的具体子类:
AVCaptureStillImageOutput 用于捕捉静态图片
AVCaptureMetadataOutput 启用检测人脸和二维码
AVCaptureVideoOutput 为实时预览图提供原始帧
***AVCaptureSession*** 管理输入与输出之间的数据流,以及在出现问题时生成运行时错误。
***AVCapt