iOS基础

AVFoudation进行简单的视频录制

2018-05-04  本文已影响11人  阿洋12138

用AVFoudation进行视频录制相对UIImagePickerController来说复杂,涉及到的相关类也更多,打个比喻,就是我想在要用积木搭房子,但是我现在只有一堆非常零碎的零件来进行组装。如下,要进行视频录制并且保存我总结了一个相关步骤。

至此,设备初始化的工作完成。

代码:

@property (nonatomic,strong) AVCaptureSession *session;
@property (nonatomic,strong) AVCaptureMovieFileOutput *output;
self.session = [[AVCaptureSession alloc]init];

//设置捕获视频的质量
self.session.sessionPreset = AVCaptureSessionPresetHigh;
NSError *error;

//指定媒体类型为 视频 。获得捕获设备AVCaptureDevice对象。
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

//实例化捕获输入AVCaptureDeviceInput(视频)对象,通过对应的device对象实例化。
AVCaptureDeviceInput *camera = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&error];

//指定媒体类型为 音频 。获得捕获设备AVCaptureDevice对象。
AVCaptureDevice *micDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

//实例化捕获输入AVCaptureDeviceInput(音频)对象,通过对应的device对象实例化。
AVCaptureDeviceInput *mic = [AVCaptureDeviceInput deviceInputWithDevice:micDevice error:&error];

/*
 当前获得了两个输入对象,一个是camera设备,一个是mic设备
 */
[self.session addInput:camera];
[self.session addInput:mic];

//创建文件输出对象
self.output = [[AVCaptureMovieFileOutput alloc]init];
if ([self.session canAddOutput:self.output]) {
    [self.session addOutput:self.output];
}

//创建layer层对象,参数是captureSession。并且设置layer的frame。然后天骄到相应的view上
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
previewLayer.frame = CGRectMake(0, 0, 375.0, 375.0*16/9);
[self.view.layer insertSublayer:previewLayer atIndex:0];
[self.session startRunning];

到此为止,当前界面的view上能输出摄像头捕捉到的数据。

-(NSURL *)fileUrl
{
    NSString *outputPath = [NSString stringWithFormat:@"%@%@",NSTemporaryDirectory(),@"myvideo.mov"];
    NSURL *urlPath = [NSURL fileURLWithPath:outputPath];//[NSURL URLWithString:outputPath];
    NSFileManager *manager = [NSFileManager defaultManager];
    if ([manager fileExistsAtPath:outputPath]) {
        NSError *error;
        [manager removeItemAtPath:outputPath error:&error];
    }
    return urlPath;
}
if (error == nil) {
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
    [library writeVideoAtPathToSavedPhotosAlbum:outputFileURL completionBlock:^(NSURL *assetURL, NSError *error) {
        NSLog(@"%@",assetURL.absoluteString);
        if (error) {
            NSLog(@"%@",error.localizedDescription);
        }
    }];
}
上一篇 下一篇

猜你喜欢

热点阅读