iOS 音視頻錄製之錄製視頻,UIImagePickerController拍照錄視頻選取視頻圖片,AVFoundation


讀《瘋狂iOS講義(下)》筆記

UIImagePickerController拍照錄視頻選取圖片

思路

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
list文件需要添加:

<key>NSCameraUsageDescription</key>
    <string></string>
    <key>NSMicrophoneUsageDescription</key>
    <string></string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string></string>
//
//  ViewController.m
//  ImagePickerDemo
//
//  Created by  on 2020/2/27.
//  Copyright © 2020 Shae. All rights reserved.
//

#import "ViewController.h"
#import <MobileCoreServices/MobileCoreServices.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import <Photos/Photos.h>

@interface ViewController ()<UINavigationControllerDelegate,UIImagePickerControllerDelegate>

@end

@implementation ViewController
UIImagePickerController *picker;
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"%d",testprefix);
    picker=[[UIImagePickerController alloc]init];
    picker.delegate=self;
}
- (IBAction)takePhoto:(UIButton *)sender {
    //如果拍攝的攝像頭可用
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        //將sourceType設置爲UIImagePickerControllerSourceTypeCamera代表拍照或拍視頻
        picker.sourceType=UIImagePickerControllerSourceTypeCamera;
        //設置拍照照片
        picker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModePhoto;
        //設置使用手機的前置攝像頭
        //picker.cameraDevice=UIImagePickerControllerCameraDeviceFront;
        //設置拍攝的照片允許編輯
        picker.allowsEditing=YES;
    }else{
        NSLog(@"無法打開攝像頭");
    }
    //顯示picker視圖控制器
    [self presentViewController:picker animated:YES completion:nil];
    
}
- (IBAction)takeVideo:(UIButton *)sender {
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        // 將sourceType設爲UIImagePickerControllerSourceTypeCamera代表拍照或拍視頻
        picker.sourceType=UIImagePickerControllerSourceTypeCamera;
        //將mediaTypes設置爲所有支持的多媒體類型
        picker.mediaTypes=[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
        //設置拍攝視頻
        picker.cameraCaptureMode=UIImagePickerControllerCameraCaptureModeVideo;
        //設置拍攝高質量的視頻
        picker.videoQuality=UIImagePickerControllerQualityTypeHigh;
    }else{
        NSLog(@"無法打開攝像頭");
    }
    [self presentViewController:picker animated:YES completion:nil];
}
- (IBAction)loadPhoto:(UIButton *)sender {
    //設置選擇加載相冊的圖片或視頻
    picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;//y圖片視頻
    //picker.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum;//僅圖片
    picker.allowsEditing=YES;
    [self presentViewController:picker animated:YES completion:nil];
}
//當得到照片或者視頻j後,調用該委託方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info{
    NSLog(@"成功:%@",info);
    //獲取用戶拍攝的是照片還是視頻
    NSString *mediaType=[info objectForKey:UIImagePickerControllerMediaType];
    //判斷獲取類型:圖片,並且是剛拍攝的圖片
    if ([mediaType isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypeCamera) {
        UIImage *theImage=nil;
        //判斷,圖片是否允許篡改
        if ([picker allowsEditing]) {
            //獲取用戶編輯之後的圖像
            theImage=[info objectForKey:UIImagePickerControllerEditedImage];
        }else{
            //獲取原始的照片
            theImage=[info objectForKey:UIImagePickerControllerOriginalImage];
        }
        //保存圖片到相冊中
        UIImageWriteToSavedPhotosAlbum(theImage, self, nil, nil);
    }else if ([mediaType isEqualToString:(NSString*)kUTTypeMovie]){
        //獲取視頻文件的url
        NSURL *mediaURL=[info objectForKey:UIImagePickerControllerMediaURL];
        //將視頻保存到媒體庫
        UISaveVideoAtPathToSavedPhotosAlbum(mediaURL.path,self,@selector(video:didFinishSavingWithError:contextInfo:),nil);
        NSLog(@"mediaURL.path:%@",mediaURL.path);
    }else if ([mediaType isEqualToString:(NSString*)kUTTypeImage]&&picker.sourceType==UIImagePickerControllerSourceTypePhotoLibrary){
        //呈現選取的照片
        if ([picker allowsEditing]) {
            //獲取用戶編輯之後的圖像
            self.loadImageView.image=[info objectForKey:UIImagePickerControllerEditedImage];
        }else{
            //獲取原始的照片
            self.loadImageView.image=[info objectForKey:UIImagePickerControllerOriginalImage];
        }
    }
    //隱藏UIImagePickerController
    [picker dismissViewControllerAnimated:YES completion:nil];
}
// UISaveVideoAtPathToSavedPhotosAlbum 視頻保存回調
- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo {
    
    NSLog(@"%@",videoPath);
    
    NSLog(@"%@",error);
    
}
//當用戶取消時,調用該代理方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    NSLog(@"用戶取消的拍攝");
    //隱藏UIImagePickerController
    [picker dismissViewControllerAnimated:YES completion:nil];

}
@end

Demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章