iOS使用原生AVCapture系列
更新時間:2018年10月16日 11:44:02 作者:jadyn_JT
這篇文章主要為大家詳細介紹了iOS使用原生AVCapture系列的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
概述:
可用于音頻、二維碼、拍照、錄制視頻 (均可自定義界面)
常見的輸出信號:
- AVCaptureAudioDataOutput 音頻輸出
- AVCaptureFileOutput 文本輸出
- AVCaptureMetadataOutput 二維碼 條形碼…
- AVCaptureStillImageOutput 拍照
- AVCaptureMovieFileOutput 錄制視頻(不能實現(xiàn)暫停錄制和定義視頻文件類型)
- AVCaptureVideoDataOutput + AVCaptureAudioDataOutput 錄制視頻的靈活性更強(能實現(xiàn)暫停錄制和定義視頻文件類型)
AVCaptureMovieFileOutput輸出流實現(xiàn)視頻錄制
初始化會話層
-(void)sessionConfiguration{ //初始化一個會話 session = [[AVCaptureSession alloc] init]; [session setSessionPreset:AVCaptureSessionPresetMedium]; //創(chuàng)建視頻設備 AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; //根據(jù)設備創(chuàng)建輸入信號 deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil]; //添加 輸出設備 movieFile self.deviceMovieFileOutput = [[AVCaptureMovieFileOutput alloc] init]; [session beginConfiguration]; //session添加設備輸入信號 if ([session canAddInput:deviceInput]) { [session addInput:deviceInput]; } //session添加設備輸出信號 if ([session canAddOutput:self.deviceMovieFileOutput]) { [session addOutput:self.deviceMovieFileOutput]; } [session commitConfiguration]; }
創(chuàng)建預覽圖層
-(void)embedLayerWithView:(UIView *)view{ if (session == nil) { return; } videoPreviewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session]; //設置圖層的大小 videoPreviewLayer.frame = view.bounds; videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; [view.layer addSublayer:videoPreviewLayer]; [session startRunning]; }
錄制視頻
-(void)takePhoto:(NSURL *)fileURL{ [self.deviceMovieFileOutput startRecordingToOutputFileURL:fileURL recordingDelegate:self]; }
結束錄制
-(UIImageView *)finishRecord:(UIView *)view isAnewRecording:(BOOL)anewRecording{ gifImageView = [[UIImageView alloc] initWithFrame:view.bounds]; [view addSubview:gifImageView]; isAnewRecording = anewRecording; //存儲是否重新錄制 //停止錄制(停止錄制后做代理方法) [self.deviceMovieFileOutput stopRecording]; return gifImageView; }
拍攝視頻保存路徑
+(NSString *)getVideoSaveFilePath{ NSString*documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *filePath = [documentPath stringByAppendingPathComponent:@"video.mp4"]; return filePath; }
會話層啟動和關閉
-(void)startCamera{ [session startRunning]; } -(void)stopCamera{ [session stopRunning]; }
代理方法
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error{ NSLog(@"完成錄制"); NSLog(@"outputFileURL = %@",outputFileURL); //**重新錄制**// if (isAnewRecording) { //**刪除視頻文件**// NSFileManager *manager = [NSFileManager defaultManager]; [manager removeItemAtPath:outputFileURL.absoluteString error:nil]; } //**不取消錄制**// else{ //**獲取視頻時長**// AVURLAsset *avUrl = [AVURLAsset URLAssetWithURL:outputFileURL options:nil]; CMTime time = [avUrl duration]; int seconds = ceil(time.value/time.timescale); NSLog(@"seconds = %d",seconds); if ([self.delegate respondsToSelector:@selector(videoDuration:)]) { [self.delegate videoDuration:seconds]; } if ([self.delegate respondsToSelector:@selector(playerVideo:)]) { [self.delegate playerVideo:outputFileURL.absoluteString]; } } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關文章
手把手教你實現(xiàn)微信小視頻iOS代碼實現(xiàn)
這篇文章主要手把手教你實現(xiàn)微信小視頻,iOS代碼實現(xiàn)微信小視頻功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08關于iOS GangSDK的使用 為App快速集成社群公會模塊
這篇文章主要介紹了iOS GangSDK的使用為App快速集成社群公會模塊功能的實現(xiàn)過程。2017-11-11詳解iOS App中UISwitch開關組件的基本創(chuàng)建及使用方法
UISwitch組件就是我們平時在iOS設置菜單中開到的那種左右滑動的開關按鈕,當然我們在開發(fā)時可以進行更多的自定義,這里我們就來詳解iOS App中UISwitch開關組件的基本創(chuàng)建及使用方法2016-05-05iOS中使用JSPatch框架使Objective-C與JavaScript代碼交互
有了JSPatch,我們便可以在iOS App開發(fā)中令JavaScript代碼調用原生的Objective-C屬性和方法等,下面就來詳細看一下如何在iOS中使用JSPatch框架使Objective-C與JavaScript代碼交互2016-06-06