美文网首页
iOS调用摄像功能

iOS调用摄像功能

作者: 杨闯 | 来源:发表于2020-03-28 14:43 被阅读0次
  • 在plist中设置相关权限
NSMicrophoneUsageDescription   “需要调用麦克风权限才能够进行视频录制”  
NSCameraUsageDescription “需要调用摄像头权限才能进行视频录制“
  • 添加库
    需要添加库 MobileCoreServices ,并且 #import <MobileCoreServices/MobileCoreServices.h>
  • 设置代理
<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
  • 判断是否有对应的权限

  • 调用

UIImagePickerController *pickerController = [[UIImagePickerController alloc]init];
pickerController.sourceType =  UIImagePickerControllerSourceTypeCamera;
pickerController.mediaTypes = @[(NSString *)kUTTypeMovie];
pickerController.cameraCaptureMode =  UIImagePickerControllerCameraCaptureModeVideo;
pickerController.delegate = self;
[self presentViewController:pickerController animated:YES completion:nil];

如果是从手机相册中获取

UIImagePickerController *pickerController = [[UIImagePickerController alloc]init];
pickerController.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;
pickerController.mediaTypes = @[(NSString *)kUTTypeMovie];
pickerController.delegate = self;
[self presentViewController:pickerController animated:YES completion:nil];
  • 代理回调
//获得媒体资源信息并保存到相册
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    //保存成功后退出页面
    [picker dismissViewControllerAnimated:YES completion:nil];
}
//当用户取消时,调用该方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    [picker dismissViewControllerAnimated:YES completion:nil];
}

这样,就能够进行视频录制或者选取视频了。
在选取视频过程中,如果想要保存视频到沙盒中,并截取到第一帧:

#import <AVFoundation/AVFoundation.h>  //需要导入AVFoundation.framework库

//获得媒体资源信息并保存到相册
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    //保存成功后退出页面
    [picker dismissViewControllerAnimated:YES completion:nil];
    
    NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
    NSData *video = [NSData dataWithContentsOfURL:url];
    if (video.length/1024/1024 >100) { // video size is more than 100 M
        // code goes here
        return;
    }
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, true) lastObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%ld_compressedVideo.mp4",time(NULL)]];
    NSLog(@"compressedVideoSavePath : %@",path);
    
    AVAsset *asset = [AVAsset assetWithURL:url];
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
    exportSession.canPerformMultiplePassesOverSourceMediaData = YES;
    exportSession.outputURL =  [NSURL fileURLWithPath:path];//videoSaveURL;
    exportSession.outputFileType = AVFileTypeMPEG4; // mp4
    [exportSession exportAsynchronouslyWithCompletionHandler:^{
        switch (exportSession.status) {
            case AVAssetExportSessionStatusFailed: // export failed
                // code goes here
                break;
            case AVAssetExportSessionStatusCompleted: // finish
            {
                AVAssetImageGenerator *imgeGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
                imgeGenerator.appliesPreferredTrackTransform = YES;
                //获取每秒多少帧
                float fps = [[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] nominalFrameRate];
                CMTime time = CMTimeMakeWithSeconds(0.0, fps);
                NSValue* timeValue = [NSValue valueWithCMTime:time];
                [imgeGenerator generateCGImagesAsynchronouslyForTimes:@[timeValue] completionHandler:^(CMTime requestedTime, CGImageRef  _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) {
                    // image
                    UIImage *newImage = [UIImage imageWithCGImage:image];
                    NSLog(@"111");
                }];
                break;
            }
            default:
                break;
        }
    }];
}

相关文章

  • iOS调用摄像功能

    在plist中设置相关权限 添加库需要添加库 MobileCoreServices ,并且 #import

  • 使用js调用摄像头拍照

    使用js调用摄像头拍照 在一些浏览器里已经可以使用web api调用摄像头功能了。基于此可以经行拍照摄像功能,网上...

  • 【总结】2017.01.10

    2017.01.10 - 计划 调用摄像头拍照取景 完善打卡功能 外包项目开发文档 - 实际完成 调用摄像头拍照取...

  • iOS-AVCapture,自定义实现照相功能

    关于iOS调用摄像机来获取照片,通常我们都会调用UIImagePickerController来调用系统提供的相机...

  • H5前端调用Android拍照功能

    JS调用Android摄像头拍照 产品经理要求H5要实现直接调用原生摄像头完成拍照功能: 一开始也是糊涂,我们前端...

  • ReactNative调用ios原生

    1.RN调用ios原生功能 2.RN调用ios原生UI组件 参考另一篇文章《RN调用原生UI》 3.ios调用RN...

  • 用input实现文件上传和拍照上传

    使用input:file标签, 去调用系统默认相机,摄像,录音功能,有个capture属性,直接说明需要调用什么功...

  • iOS相册管理

    iOS相册访问 相关框架 相册权限管理 摄像头权限管理 获取权限后调用UIImagePickerControlle...

  • Camera (拍照)

    1、调用系统Camera App实现拍照和摄像功能 准备工作 上面调用系统Camera App,我们压根不需要任何...

  • iOS

    iOS调用系统功能 [1] 相册、相机 [2] WiFi、BlueTooth

网友评论

      本文标题:iOS调用摄像功能

      本文链接:https://www.haomeiwen.com/subject/yanjuhtx.html