介绍
本篇文章为大家展示了原生AVCapture怎么在iOS中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>概述:强>
可用于音频、二维码,拍的照,录制视频(均可自定义界面)
<强>常见的输出信号:强>
- <李>
AVCaptureAudioDataOutput音频输出
李> <李>AVCaptureFileOutput文本输出
李> <李>AVCaptureMetadataOutput二维码条形码…
李> <李>AVCaptureStillImageOutput拍照
李> <李>AVCaptureMovieFileOutput录制视频(不能实现暂停录制和定义视频文件类型)
李> <李>AVCaptureVideoDataOutput + AVCaptureAudioDataOutput录制视频的灵活性更强(能实现暂停录制和定义视频文件类型)
李><强> AVCaptureMovieFileOutput输出流实现视频录制强>
初始化会话层
- (void) sessionConfiguration {//才能初始化一个会话 session 才能=,[[AVCaptureSession alloc], init); (才能session setSessionPreset AVCaptureSessionPresetMedium):;//才能创建视频设备 AVCaptureDevice 才能;* videoDevice =, [AVCaptureDevice defaultDeviceWithMediaType AVMediaTypeVideo):;//根才能据设备创建输入信号 deviceInput 才能=,[AVCaptureDeviceInput deviceInputWithDevice: videoDevice 错误:nil);//才能添加,输出设备,movieFile self.deviceMovieFileOutput 才能=,[[AVCaptureMovieFileOutput alloc], init); (才能session beginConfiguration);//会话才能添加设备输入信号 if 才能;([session canAddInput: deviceInput]), { ,,,(session addInput deviceInput):; ,,}//会话才能添加设备输出信号 if 才能;([session canAddOutput: self.deviceMovieFileOutput]), { ,,,(session addOutput self.deviceMovieFileOutput):; ,,} (才能session commitConfiguration); }
创建预览图层
- - - - - - (void) embedLayerWithView:视图(UIView *) { if 才能;(session ==, nil), { ,,,返回; ,,} videoPreviewLayer 才能=,(AVCaptureVideoPreviewLayer layerWithSession:会话);//才能设置图层的大小 时间=videoPreviewLayer.frame 才能;view.bounds; 时间=videoPreviewLayer.videoGravity 才能;AVLayerVideoGravityResizeAspectFill; (才能view.layer addSublayer videoPreviewLayer):; (才能session startRunning); }
录制视频
- - - - - - (void) takePhoto: (NSURL *) fileURL { (才能self.deviceMovieFileOutput startRecordingToOutputFileURL: fileURL recordingDelegate:自我); }
结束录制
- (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,,是的),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 错误:错误(NSError *) { NSLog才能(@"完成录制“); NSLog才能(@" outputFileURL =, % @", outputFileURL);//* *才能重新录制* *//if 才能;(isAnewRecording), { ,,,//* *删除视频文件* *//,,,NSFileManager * manager =, [NSFileManager defaultManager]; ,,,(manager removeItemAtPath: outputFileURL.absoluteString 错误:nil); ,,}//* *才能不取消录制* *//其他{才能 ,,,//* *获取视频时长* *//,,,AVURLAsset * avUrl =, (AVURLAsset URLAssetWithURL: outputFileURL 选择:nil); ,,,CMTime time =, (avUrl 持续时间); ,,,int seconds =,装天花板(time.value/time.timescale); ,,,NSLog (@" seconds =, % d",秒); ,,,if ([self.delegate respondstoselectorismemberofclass: @ selector (videoDuration:))), { ,,,,,(self.delegate videoDuration:秒); ,,,} ,,,if ([self.delegate respondstoselectorismemberofclass: @ selector (playerVideo:))), { null null null null原生AVCapture怎么在iOS中使用