在上一篇的基础上
UIImagePickerController 视频录制
- 权限描述
Privacy - Microphone Usage Description
- 检查麦克风权限
//
-(BOOL)isAuthorizationAudio
{
BOOL isAuthoriztion;
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
switch (status) {
case AVAuthorizationStatusNotDetermined: // 授权状态未知
isAuthoriztion = NO;
break;
case AVAuthorizationStatusRestricted: // 授权受限
isAuthoriztion = NO;
break;
case AVAuthorizationStatusDenied: // 授权被拒
isAuthoriztion = NO;
break;
case AVAuthorizationStatusAuthorized: //成功授权
isAuthoriztion = YES;
default:
isAuthoriztion = NO;
break;
}
return isAuthoriztion;
}
- 申请麦克风权限
-(void)authorizationForAudio
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {
if (granted) {
NSLog(@"授权成功");
} else {
NSLog(@"授权失败");
}
}];
}
- 录像机配置
UIImagePickerController *imagePickerVC = [[UIImagePickerController alloc] init];
imagePickerVC.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerVC.mediaTypes = @[(__bridge NSString *)kUTTypeMovie];
imagePickerVC.videoQuality = UIImagePickerControllerQualityTypeHigh; //视频质量
imagePickerVC.videoMaximumDuration = 60.0; //最长录制时间60秒, 默认是十分钟
imagePickerVC.delegate = self;
[self presentViewController:imagePickerVC animated:YES completion:NULL];
- UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey, id> *)info
{
NSLog(@"info: -%@",info);
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:@"public.movie"]) { // 视频
NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
}
}
- 保存到相册
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
[PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"保存成功");
} else {
NSLog(@"保存失败 - %@",error.localizedDescription);
}
}];
- 保存到沙盒 开辟一个线程执行
-(void)saveToDocument:(NSURL *)url withComplete:(void(^)(void))complete
{
__weak typeof (self) weakSelf = self;
dispatch_queue_t queue = dispatch_queue_create("com.roy.demo", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *videoDirectoryPath = [documentDirectory stringByAppendingPathComponent:@"/Video"];
BOOL isDirectory;
BOOL isExitDirectory = [[NSFileManager defaultManager] fileExistsAtPath:videoDirectoryPath isDirectory:&isDirectory];
if (isExitDirectory) {
NSLog(@"视频文件目录存在");
} else {
NSLog(@"视频文件目录不存在");
BOOL result = [[NSFileManager defaultManager] createDirectoryAtPath:videoDirectoryPath withIntermediateDirectories:YES attributes:nil error:nil];
if (result) {
NSLog(@"视频文件目录创建成功");
} else {
NSLog(@"视频文件目录创建失败");
}
}
NSString *videoPath = [videoDirectoryPath stringByAppendingPathComponent:@"/test.mov"];
NSData *data = [NSData dataWithContentsOfURL:url];
[data writeToFile:videoPath atomically:NO];
dispatch_async(dispatch_get_main_queue(), ^{
complete();
});
});
}