话不多说,上 DEMO 这里用的是 SVProressHUD, 由于 iOS10 的权限缘故,需要在 plist 里添加字段,否则会崩溃,具体请看上一篇
//
// ViewController.m
// 录制视频
//
// Created by Amydom on 16/8/25.
// Copyright © 2016年 Amydom. All rights reserved.
//
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import <AVFoundation/AVAsset.h>
#import <AVFoundation/AVAssetImageGenerator.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <CoreMedia/CoreMedia.h>
#import "SVProgressHUD.h"
static NSString *const AssetCollectionName = @"录制视频";
@interface ViewController ()<UIImagePickerControllerDelegate , UINavigationControllerDelegate>
@property (weak, nonatomic) UIImageView *centerFrameImageView;
@property (weak, nonatomic) UILabel *videoDurationLabel;
@property (nonatomic, assign) BOOL shouldAsync;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self createBtn];
#pragma mark - 视频相关
/*
一.保存图片到【Camera Roll】(相机胶卷)
1.使用函数UIImageWriteToSavedPhotosAlbum
2.使用AssetsLibrary.framework(iOS9开始, 已经过期)
3.使用Photos.framework(iOS8开始可以使用, 从iOS9开始完全取代AssetsLibrary.framework)
二.创建新的【自定义Album】(相簿\相册)
1.使用AssetsLibrary.framework(iOS9开始, 已经过期)
2.使用Photos.framework(iOS8开始可以使用, 从iOS9开始完全取代AssetsLibrary.framework)
三.将【Camera Roll】(相机胶卷)的图片 添加到 【自定义Album】(相簿\相册)中
1.使用AssetsLibrary.framework(iOS9开始, 已经过期)
2.使用Photos.framework(iOS8开始可以使用, 从iOS9开始完全取代AssetsLibrary.framework)
四.Photos.framework须知
1.PHAsset : 一个PHAsset对象就代表一张图片或者一段视频
2.PHAssetCollection : 一个PHAssetCollection对象就代表一本相册
五.PHAssetChangeRequest的基本认识
1.可以对相册图片进行【增\删\改】的操作
六.PHPhotoLibrary的基本认识
1.对相册的任何修改都必须放在以下其中一个方法的block中
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:error:];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:completionHandler:];
*/
}
- (void)createBtn{
// 录制视频
UIButton *RecordVideo = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[RecordVideo setTitle:@"开始录制" forState:UIControlStateNormal];
RecordVideo.backgroundColor = [UIColor lightGrayColor];
[RecordVideo addTarget:self action:@selector(videoFromcamera) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:RecordVideo];
// 从选择视频
UIButton *SelectLocalVideo = [[UIButton alloc]initWithFrame:CGRectMake(100, 250, 100, 100)];
[SelectLocalVideo setTitle:@"选择视频" forState:UIControlStateNormal];
SelectLocalVideo.backgroundColor = [UIColor lightGrayColor];
[SelectLocalVideo addTarget:self action:@selector(videoFromPhotos) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:SelectLocalVideo];
}
// 录制视频
- (void)videoFromcamera{
[self getVideoWithsourceType:UIImagePickerControllerSourceTypeCamera shouldAsync:YES];
}
// 从相册中选择视频"
- (void)videoFromPhotos{
//UIImagePickerControllerSourceTypeSavedPhotosAlbum - 这个是自定义库,是由用户截图或保存到里面的
[self getVideoWithsourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum shouldAsync:NO];
}
//调用摄像头
- (void)getVideoWithsourceType:(UIImagePickerControllerSourceType)type shouldAsync:(BOOL)shouldAsync{
//取得授权状态
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
//判断当前状态
if (authStatus == AVAuthorizationStatusRestricted
|| authStatus == AVAuthorizationStatusDenied) {
//拒绝当前 app 访问[phtot]运行
[SVProgressHUD showInfoWithStatus:@"提醒用户打开访问开关 [设置] - [隐私] - [视频] - [App]"];
return;
}
if ([UIImagePickerController isSourceTypeAvailable:type]) {
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
picker.delegate = self;
//可以编辑
picker.allowsEditing = YES;
//设置资源获取类型
picker.sourceType = type;
picker.mediaTypes