IOS:Camera的特性分析与使用2_AVCapture

来源:互联网 发布:软件开发平台有哪些 编辑:程序博客网 时间:2024/05/23 23:43

<1> AVCapture

前面我们已经分析了Camera的UIImageViewController使用,这个部分我们再来看下AVCapture怎么使用的。

(1)输入源设置:相机、照片库

(2)设置前后摄像头

(3)设置视频质量

(4)设置照片、视频模式

(5)设置闪光灯打开方式

(6)视频编辑

(7)自定义摄像界面

(8)视频缩略图、视频关键帧

拍照:我们同样从这几个分部分析下AVCapture的使用:

(1)设备输入源设置:

    AVCaptureDevice *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

    self.videoInput = [AVCaptureDeviceInputdeviceInputWithDevice:deviceerror:&error];

(2)相机预览层设置

    AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayerlayerWithSession:self.captureSession];

    [self.view.layeraddSublayer:previewLayer];

(3)静态图片抓取

利用AVCaptureSession建立媒体流与Image:JPEG的联系。

    self.stillImageOutput = [[AVCaptureStillImageOutputalloc] init];

   NSDictionary *stillImageOutputSettings = [[NSDictionaryalloc] initWithObjectsAndKeys:

                                   AVVideoCodecJPEG, AVVideoCodecKey, nil];

    [self.stillImageOutputsetOutputSettings:stillImageOutputSettings];

    [self.captureSessionaddOutput:self.stillImageOutput];

(4)点击拍照时,调用如下方法:

[[selfstillImageOutput]captureStillImageAsynchronouslyFromConnection:stillImageConnection

                                                        completionHandler:^(CMSampleBufferRef imageDataSampleBuffer,NSError *error)

     {

        if (imageDataSampleBuffer != NULL)

         {

            NSData *imageData = [AVCaptureStillImageOutputjpegStillImageNSDataRepresentation:imageDataSampleBuffer];

            ALAssetsLibrary *library = [[ALAssetsLibraryalloc] init];

            UIImage *image = [[UIImagealloc] initWithData:imageData];

             [library writeImageToSavedPhotosAlbum:[imageCGImage]

                                      orientation:(ALAssetOrientation)[imageimageOrientation]

                                  completionBlock:^(NSURL *assetURL,NSError *error)

                {}];

         }

     }];

录音录像:
(1)录音录像和拍照的使用稍稍不同。首先将音视频源设置正确:

    AVCaptureDevice *videoDevice = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

    AVCaptureDevice *audioDevice = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeAudio];

   self.videoInput = [AVCaptureDeviceInputdeviceInputWithDevice:videoDevice error:nil];

   self.audioInput = [[AVCaptureDeviceInputalloc] initWithDevice:audioDeviceerror:nil];

    self.movieOutput = [[AVCaptureMovieFileOutputalloc] init];

    [self.captureSessionaddInput:self.videoInput];

    [self.captureSessionaddOutput:self.stillImageOutput];

(2)点击录制之后调用方法:

    [self.movieOutputstartRecordingToOutputFileURL:视频文件路径recordingDelegate:self];

视频缩略图、视频关键帧

AVURLAsset *myAsset = [[AVURLAssetalloc] initWithURL:视频文件路径options:[NSDictionarydictionaryWithObject:@"YES"forKey:AVURLAssetPreferPreciseDurationAndTimingKey]];

    AVAssetImageGenerator *imageGenerator = [AVAssetImageGeneratorassetImageGeneratorWithAsset:myAsset];

    imageGenerator.appliesPreferredTrackTransform =YES;

//  获取视频拍摄的关键帧。

    [imageGenerator generateCGImagesAsynchronouslyForTimes:times

                                             completionHandler:^(CMTime requestedTime,CGImageRef image, CMTime actualTime, AVAssetImageGeneratorResult result,NSError *error)

    {

image即为关键帧图片

    }];





0 0
原创粉丝点击