iOS框架AVFoundation实现相机拍照、录制视频

2020-01-21 05:31:47丽君

本文实例为大家分享了使用AVFoundation框架实现相机拍照、录制视频的具体代码,供大家参考,具体内容如下

这里是Demo

首先声明以下对象:


#import "CustomeCameraViewController.h" 
#import <AVFoundation/AVFoundation.h> 
#import <AssetsLibrary/AssetsLibrary.h> 
 
@interface CustomeCameraViewController ()<AVCaptureFileOutputRecordingDelegate> 
 
{ 
 // AVCaptureSession对象来执行输入设备和输出设备之间的数据传递 
 AVCaptureSession *iSession; 
 //当前设备 
 AVCaptureDevice *iDevice; 
 //输入设备 
 AVCaptureDeviceInput *iDeviceInput; 
 //照片输出流 
 AVCaptureStillImageOutput *iStillImageOutput; 
 //预览图层 
 AVCaptureVideoPreviewLayer *iPreviewLayer; 
  
} 

初始化各对象:

 


-(void)viewDidLoad { 
 [super viewDidLoad]; 
  
 //点击屏幕对焦 
 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(focusTap:)]; 
 [self.view addGestureRecognizer:tap]; 
  
  
 iSession = [[AVCaptureSession alloc]init]; 
  
 NSArray *deviceArray = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
 for (AVCaptureDevice *device in deviceArray) { 
   
  //AVCaptureDevicePositionBack 后置摄像头 
  //AVCaptureDevicePositionFront 前置摄像头 
  if (device.position == AVCaptureDevicePositionBack) { 
   iDevice = device; 
  } 
 } 
  
  
 iSession.sessionPreset = [self getSessionPresetForDevice:iDevice]; 
  
 iDeviceInput = [[AVCaptureDeviceInput alloc]initWithDevice:iDevice error:nil]; 
  
  
 ////输出设置。AVVideoCodecJPEG 输出jpeg格式图片 
 iStillImageOutput = [[AVCaptureStillImageOutput alloc]init]; 
 NSDictionary *outputDic = [NSDictionary dictionaryWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey, nil nil]; 
 [iStillImageOutput setOutputSettings:outputDic]; 
  
  
 //更改这个设备设置的时候必须先锁定设备,修改完后再解锁,否则崩溃 
 [iDevice lockForConfiguration:nil]; 
 if ([iDevice isFlashModeSupported:AVCaptureFlashModeOff]) { 
  [iDevice setFlashMode:AVCaptureFlashModeOff]; 
 } 
 if ([iDevice isFocusModeSupported:AVCaptureFocusModeAutoFocus]) { 
  [iDevice setFocusMode:AVCaptureFocusModeAutoFocus]; 
 } 
 if ([iDevice isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeAutoWhiteBalance]) { 
  [iDevice setWhiteBalanceMode:AVCaptureWhiteBalanceModeAutoWhiteBalance]; 
 } 
 [iDevice unlockForConfiguration]; 
  
 if ([iSession canAddInput:iDeviceInput]) { 
  [iSession addInput:iDeviceInput]; 
 } 
 if ([iSession canAddOutput:iStillImageOutput]) { 
  [iSession addOutput:iStillImageOutput]; 
 } 
 if ([iSession canAddOutput:iVideoOutput]) { 
  [iSession addOutput:iVideoOutput]; 
 } 
  
 //初始化预览图层 
 iPreviewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:iSession]; 
 [iPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill]; 
 iPreviewLayer.frame = CGRectMake(0, 60, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height-160); 
 [self.iCameraView.layer addSublayer:iPreviewLayer]; 
  
 [iSession startRunning];  
  
}