使用UIImagePickerController拍照和视频录制

一 UIImagePickerController简介和属性介绍。

UIImagePickerController继承于UINavigationController。UIImagePickerController可以用来选择照片,它还可以用来拍照和录制视频。首先看一下这个类常用的属性和方法:

属性 说明
@property(nonatomic)           UIImagePickerControllerSourceType     sourceType 拾取源类型,sourceType是枚举类型:

UIImagePickerControllerSourceTypePhotoLibrary:照片库

,默认值

UIImagePickerControllerSourceTypeCamera:摄像头

UIImagePickerControllerSourceTypeSavedPhotosAlbum:相簿

@property(nonatomic,copy)      NSArray                              *mediaTypes 媒体类型,默认情况下此数组包含kUTTypeImage,所以拍照时可以不用设置;但是当要录像的时候必须设置,可以设置为kUTTypeVideo(视频,但不带声音)或者kUTTypeMovie(视频并带有声音)
@property(nonatomic)           NSTimeInterval                        videoMaximumDuration 视频最大录制时长,默认为10 s
@property(nonatomic)           UIImagePickerControllerQualityType    videoQuality 视频质量,枚举类型:

UIImagePickerControllerQualityTypeHigh:高清质量

UIImagePickerControllerQualityTypeMedium:中等质量,适合WiFi传输

UIImagePickerControllerQualityTypeLow:低质量,适合蜂窝网传输

UIImagePickerControllerQualityType640x480:640*480

UIImagePickerControllerQualityTypeIFrame1280x720:1280*720

UIImagePickerControllerQualityTypeIFrame960x540:960*540

@property(nonatomic)           BOOL                                  showsCameraControls 是否显示摄像头控制面板,默认为YES
@property(nonatomic,retain)    UIView                                *cameraOverlayView  摄像头上覆盖的视图,可用通过这个视频来自定义拍照或录像界面
@property(nonatomic)           CGAffineTransform                     cameraViewTransform 摄像头形变
@property(nonatomic) UIImagePickerControllerCameraCaptureMode cameraCaptureMode 摄像头捕获模式,捕获模式是枚举类型:

UIImagePickerControllerCameraCaptureModePhoto:拍照模式

UIImagePickerControllerCameraCaptureModeVideo:视频录制模式

@property(nonatomic) UIImagePickerControllerCameraDevice      cameraDevice 摄像头设备,cameraDevice是枚举类型:

UIImagePickerControllerCameraDeviceRear:前置摄像头

UIImagePickerControllerCameraDeviceFront:后置摄像头

@property(nonatomic) UIImagePickerControllerCameraFlashMode   cameraFlashMode  闪光灯模式,枚举类型:

UIImagePickerControllerCameraFlashModeOff:关闭闪光灯

UIImagePickerControllerCameraFlashModeAuto:闪光灯自动

UIImagePickerControllerCameraFlashModeOn:打开闪光灯

类方法 说明
+ (BOOL)isSourceTypeAvailable:(UIImagePickerControllerSourceType)sourceType 指定的源类型是否可用,sourceType是枚举类型:

UIImagePickerControllerSourceTypePhotoLibrary:照片库

UIImagePickerControllerSourceTypeCamera:摄像头

UIImagePickerControllerSourceTypeSavedPhotosAlbum:相簿

+ (NSArray *)availableMediaTypesForSourceType:(UIImagePickerControllerSourceType)sourceType 指定的源设备上可用的媒体类型,一般就是图片和视频
+ (BOOL)isCameraDeviceAvailable:(UIImagePickerControllerCameraDevice)cameraDevice 指定的摄像头是否可用,cameraDevice是枚举类型:

UIImagePickerControllerCameraDeviceRear:前置摄像头

UIImagePickerControllerCameraDeviceFront:后置摄像头

+ (BOOL)isFlashAvailableForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice 指定摄像头的闪光灯是否可用
+ (NSArray *)availableCaptureModesForCameraDevice:(UIImagePickerControllerCameraDevice)cameraDevice 获得指定摄像头上的可用捕获模式,捕获模式是枚举类型:

UIImagePickerControllerCameraCaptureModePhoto:拍照模式

UIImagePickerControllerCameraCaptureModeVideo:视频录制模式

对象方法 说明
- (void)takePicture  编程方式拍照
- (BOOL)startVideoCapture  编程方式录制视频
- (void)stopVideoCapture 编程方式停止录制视频
代理方法 说明
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 媒体拾取完成
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 取消拾取
扩展方法(主要用于保存照片、视频到相簿) 说明
UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo) 保存照片到相簿
UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(NSString *videoPath) 能否将视频保存到相簿
void UISaveVideoAtPathToSavedPhotosAlbum(NSString *videoPath, id completionTarget, SEL completionSelector, void *contextInfo) 保存视频到相簿

二 使用UIImagePickerController拍照和视频录制

#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>

@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>

@property (weak, nonatomic) IBOutlet UIImageView *mImageview;

@property (nonatomic,assign) BOOL isTakeVedio;

@property (nonatomic,strong) UIImagePickerController *imagePicker;
@property (nonatomic,strong) AVPlayer *player;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)takePic:(id)sender {
    _isTakeVedio = NO;
    [self showPicker];
}

- (IBAction)takeVedio:(id)sender {
    _isTakeVedio = YES;
    [self showPicker];
}

- (UIImagePickerController *)imagePicker
{
    if (_imagePicker == nil) {
        _imagePicker = [[UIImagePickerController alloc] init];
        _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;    //设置来源为摄像头
        _imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceRear; //设置使用的摄像头为:后置摄像头
        if (self.isTakeVedio) {
            _imagePicker.mediaTypes = @[(NSString *)kUTTypeVideo];    //设置为视频模式-<span style="color: rgb(51, 51, 51); font-family: Georgia, 'Times New Roman', Times, sans-serif; font-size: 14px; line-height: 25px;">注意媒体类型定义在MobileCoreServices.framework中</span>
            _imagePicker.videoQuality = UIImagePickerControllerQualityTypeIFrame1280x720;   //设置视频质量
            _imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;  //设置摄像头模式为录制视频
        }
        else{
            _imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; //设置摄像头模式为拍照
        }
    }
    return _imagePicker;
}

- (void)showPicker
{
    [self presentViewController:self.imagePicker animated:YES completion:nil];
}

#pragma mark-
#pragma mark - UIImagePickerControllerDelegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
    if ([type isEqualToString:(NSString *)kUTTypeImage]) {
        //图片保存和展示
        UIImage *image;
        if (picker.allowsEditing) {
            image = [info objectForKey:UIImagePickerControllerEditedImage]; //允许编辑,获取编辑过的图片
        }
        else{
            image = [info objectForKey:UIImagePickerControllerOriginalImage]; //不允许编辑,获取原图片
        }
        self.mImageview.image = image;
        UIImageWriteToSavedPhotosAlbum(image,nil,nil, nil);
    }
    else if([type isEqualToString:(NSString *)kUTTypeVideo]){
        //视频保存后 播放视频
        NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
        NSString *urlPath = [url path];
        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlPath)) {
            UISaveVideoAtPathToSavedPhotosAlbum(urlPath, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
        }
    }

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{

}

#pragma mark-
#pragma mark - share method

//视频保存后的回调
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{
    if (error) {
        NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);
    }else{
        NSLog(@"视频保存成功.");
        //录制完之后自动播放
        NSURL *url=[NSURL fileURLWithPath:videoPath];
        _player=[AVPlayer playerWithURL:url];
        AVPlayerLayer *playerLayer=[AVPlayerLayer playerLayerWithPlayer:_player];
        playerLayer.frame = self.mImageview.frame;
        [self.mImageview.layer addSublayer:playerLayer];
        [_player play];
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-01 14:28:25

使用UIImagePickerController拍照和视频录制的相关文章

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

iOS开发系列--音频播放.录音.视频播放.拍照.视频录制 转载:http://www.cnblogs.com/kenshincui/p/4186022.html#avFoundationCamera --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音

音频播放、录音、视频播放、拍照、视频录制-b

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照

iOS开发–音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制

音频播放、录音、视频播放、拍照、视频录制

--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePicker

iOS音频播放、录音、视频播放、拍照、视频录制

随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音效 音乐 音频会话 录音 音频队列服务 视频 MPMoviePlayerController MPMoviePlayerViewController AVPlayer 摄像头 UIImagePickerController拍照

【Android】20.3 拍照和视频录制

分类:C#.Android.VS2015: 创建日期:2016-03-13 一.简介 Android提供的Camera有两个典型的版本,一个是在Android 5.0以前提供的,称为Camera:另一个是从Android 5.0开始提供的,称为Camera2. 这里仅演示使用系统Camera程序实现拍照的基本用法. 二.Camera基本概念 用Camera实现拍照和摄像功能时,有以下两种实现办法: 一是直接利用Intent启动系统自带的Camera App打开相机实现拍照和摄像功能,然后通过An

【铜】第131篇 融合一对一canvas视频录制到备份上(二)简版做成及追加图片过程周四

关键词:一对一canvas视频录制, 简版做成,追加图片过程 一.一对一视频录制 1.1 往备份上布录制-----------------bug处理 现在不知道,网页录制都依赖哪些文件,现在需要一个一个的去除.现在去除差不多了,如下: 经过整理发现,仅仅需要两个文件,就能实现录制.如下: 简版访问地址如下: http://localhost:9001/record-canvas-drawings.html#no-back-button 二.追加图片过程 2.1 学生端追加拍照 <li><

iOS UIImagePickerController拍照与摄像

UIImagePickerController拍照与摄像 该类继承自UINavigationController类 步骤: 检查媒体来源模式是否可用 检查该来源模式下所支持的媒体类型 创建图像选取控制器,设置其属性并显示 在委托协议方法中处理 1.检查媒体来源 调用UIImagePickerController类的静态方法isSourceTypeAvailable来检查 sourceType是一个UIImagePickerControllerSourceType类型的枚举值,它表示图像选取控制器

github视频录制播放相关功能-参考

lookingstars/JZVideoDemo  视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo  iOS video cut ,also can add blackgroundmusic iOS 视频剪辑,视频添加背景音乐 Updated on 13 Jun 2014 Objective-C 139 50 835239104/KrVideoPlayerPlus  根据36Kr开源的KRVideoPlayer