原生AVCapture怎么在iOS中使用

  介绍

本篇文章为大家展示了原生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中使用