调用相机 实现:视频录制,拍照 保存 上传服务器 UIImagePickerController AVPlayer
2016-07-01 17:45
781 查看
//
// ViewController.m
// PickUp
//
// Created by 刘海艳 on 16/6/29.
// Copyright © 2016年 qust. All rights reserved.
//
#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>
@interface
ViewController ()<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (weak,
nonatomic) IBOutlet
UIImageView *imageView;
@property(nonatomic,
strong) UIImagePickerController *imagePick;
@property (assign,nonatomic)
int isVideo;//是否录制视频,如果为1表示录制视频,0代表拍照
@property (strong,nonatomic)
UIImagePickerController *imagePicker;
@property (strong ,nonatomic)
AVPlayer *player;//播放器,用于录制完视频后播放视频
@end
@implementation ViewController
- (IBAction)buttonAction:(id)sender {
if ([UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
NSArray *availableMediaTypes = [UIImagePickerController
availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
if ([availableMediaTypes
containsObject:(NSString *)kUTTypeMovie]) {
// 支持视频录制
_imagePicker=[[UIImagePickerController
alloc]init];
_imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置image
picker的来源,这里设置为摄像头
_imagePicker.cameraDevice=UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头
if (self.isVideo) {
_imagePicker.mediaTypes=@[(NSString
*)kUTTypeMovie];
_imagePicker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;
_imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)
}
else{
_imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;
}
_imagePicker.allowsEditing=YES;//允许编辑
_imagePicker.delegate=self;//设置代理,检测操作
}
}
[self
presentViewController:self.imagePicker
animated:YES
completion:nil];
}
#pragma mark - UIImagePickerController代理方法
//完成
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info{
NSString *mediaType=[info
objectForKey:UIImagePickerControllerMediaType];
if ([mediaType
isEqualToString:(NSString *)kUTTypeImage]) {//如果是拍照
UIImage *image;
//如果允许编辑则获得编辑后的照片,否则获取原始照片
if (self.imagePicker.allowsEditing)
{
image=[info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片
}else{
image=[info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片
}
[self.imageView
setImage:image];//显示照片
UIImageWriteToSavedPhotosAlbum(image,
nil,
nil, nil);//保存到相簿
}else
if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是录制视频
NSLog(@"video...");
NSURL *url=[info
objectForKey:UIImagePickerControllerMediaURL];//视频路径
NSString *urlStr=[url
path];
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {
//保存视频到相簿,注意也可以使用ALAssetsLibrary来保存
UISaveVideoAtPathToSavedPhotosAlbum(urlStr,
self, @selector(video:didFinishSavingWithError:contextInfo:),
nil);//保存视频到相簿
}
}
[self
dismissViewControllerAnimated:YES
completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"取消");
[self
dismissViewControllerAnimated:YES
completion:nil];
}
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error
contextInfo:(void *)contextInfo{
if (error) {
NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);
}else{
NSLog(@"视频保存成功.");
//录制完之后自动播放
NSURL *url=[NSURL
fileURLWithPath:videoPath];
NSLog(@"%@",url);
_player=[AVPlayer
playerWithURL:url];
AVPlayerLayer *playerLayer=[AVPlayerLayer
playerLayerWithPlayer:_player];
playerLayer.frame=self.imageView.frame;
[self.imageView.layer
addSublayer:playerLayer];
[_player
play];
}
}
- (void)viewDidLoad {
[super
viewDidLoad];
_isVideo=YES;//拍照,反之为YES,为录制视频,顺带保存;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
9.0模拟器,xcode7.3 运行实现。最近的工作中涉及到音视频的东西,就查看了资料写了一些demo,仅供参考,上传服务器近期会实现
// ViewController.m
// PickUp
//
// Created by 刘海艳 on 16/6/29.
// Copyright © 2016年 qust. All rights reserved.
//
#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>
@interface
ViewController ()<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (weak,
nonatomic) IBOutlet
UIImageView *imageView;
@property(nonatomic,
strong) UIImagePickerController *imagePick;
@property (assign,nonatomic)
int isVideo;//是否录制视频,如果为1表示录制视频,0代表拍照
@property (strong,nonatomic)
UIImagePickerController *imagePicker;
@property (strong ,nonatomic)
AVPlayer *player;//播放器,用于录制完视频后播放视频
@end
@implementation ViewController
- (IBAction)buttonAction:(id)sender {
if ([UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
NSArray *availableMediaTypes = [UIImagePickerController
availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
if ([availableMediaTypes
containsObject:(NSString *)kUTTypeMovie]) {
// 支持视频录制
_imagePicker=[[UIImagePickerController
alloc]init];
_imagePicker.sourceType=UIImagePickerControllerSourceTypeCamera;//设置image
picker的来源,这里设置为摄像头
_imagePicker.cameraDevice=UIImagePickerControllerCameraDeviceRear;//设置使用哪个摄像头,这里设置为后置摄像头
if (self.isVideo) {
_imagePicker.mediaTypes=@[(NSString
*)kUTTypeMovie];
_imagePicker.videoQuality=UIImagePickerControllerQualityTypeIFrame1280x720;
_imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;//设置摄像头模式(拍照,录制视频)
}
else{
_imagePicker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;
}
_imagePicker.allowsEditing=YES;//允许编辑
_imagePicker.delegate=self;//设置代理,检测操作
}
}
[self
presentViewController:self.imagePicker
animated:YES
completion:nil];
}
#pragma mark - UIImagePickerController代理方法
//完成
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary
*)info{
NSString *mediaType=[info
objectForKey:UIImagePickerControllerMediaType];
if ([mediaType
isEqualToString:(NSString *)kUTTypeImage]) {//如果是拍照
UIImage *image;
//如果允许编辑则获得编辑后的照片,否则获取原始照片
if (self.imagePicker.allowsEditing)
{
image=[info objectForKey:UIImagePickerControllerEditedImage];//获取编辑后的照片
}else{
image=[info objectForKey:UIImagePickerControllerOriginalImage];//获取原始照片
}
[self.imageView
setImage:image];//显示照片
UIImageWriteToSavedPhotosAlbum(image,
nil,
nil, nil);//保存到相簿
}else
if([mediaType isEqualToString:(NSString *)kUTTypeMovie]){//如果是录制视频
NSLog(@"video...");
NSURL *url=[info
objectForKey:UIImagePickerControllerMediaURL];//视频路径
NSString *urlStr=[url
path];
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(urlStr)) {
//保存视频到相簿,注意也可以使用ALAssetsLibrary来保存
UISaveVideoAtPathToSavedPhotosAlbum(urlStr,
self, @selector(video:didFinishSavingWithError:contextInfo:),
nil);//保存视频到相簿
}
}
[self
dismissViewControllerAnimated:YES
completion:nil];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"取消");
[self
dismissViewControllerAnimated:YES
completion:nil];
}
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error
contextInfo:(void *)contextInfo{
if (error) {
NSLog(@"保存视频过程中发生错误,错误信息:%@",error.localizedDescription);
}else{
NSLog(@"视频保存成功.");
//录制完之后自动播放
NSURL *url=[NSURL
fileURLWithPath:videoPath];
NSLog(@"%@",url);
_player=[AVPlayer
playerWithURL:url];
AVPlayerLayer *playerLayer=[AVPlayerLayer
playerLayerWithPlayer:_player];
playerLayer.frame=self.imageView.frame;
[self.imageView.layer
addSublayer:playerLayer];
[_player
play];
}
}
- (void)viewDidLoad {
[super
viewDidLoad];
_isVideo=YES;//拍照,反之为YES,为录制视频,顺带保存;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
9.0模拟器,xcode7.3 运行实现。最近的工作中涉及到音视频的东西,就查看了资料写了一些demo,仅供参考,上传服务器近期会实现
相关文章推荐
- Arduino那些事儿
- Commons Configuration2 - Quick start guide
- DelayQueue 学习和应用
- kafka connector commit 失败
- clone和clone(true)的差别
- easyui 执行添加操作,不使用弹窗而使用跳转新页面的方法
- 改变UIButton 图片和文字的位置
- umeditor、ueditor的使用
- title获得该标签的value
- 成长记-获取当前UIView所在的控制器
- UILabel宽高的计算
- 【POJ】2061 - Subsequence(STL & 二分)
- php中include_once,require_once,和include,require的使用场景和区别。
- json格式数据转化成map中key和values的样式
- String与StringBuffer、StringBuilder的区别
- AlertDialog.Builder--转载
- 1007. Maximum Subsequence Sum (25)
- 为UIImage添加滤镜效果
- java.lang.IllegalArgumentException: Illegal character in query at index xxx:
- UISearchBar背景色及边框修改