首先需要導入AVFoundation庫。
UIImagePickerController
調用攝像頭拍照,攝像的時候需要用到UIImagePickerController。
使用方法:
//實例化一個對象
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;//設置照片源類型
imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];//設置媒體種類
imagePicker.allowsEditing = NO; //允許編輯
imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;//閃光燈模式
imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;//攝像頭前置還是后置
imagePicker.delegate = self;//設置代理
//通過模態視圖推出頁面
[self presentViewController:imagePicker animated:YES completion:nil];
sourceType 的三種類型分別是:
UIImagePickerControllerSourceTypeCamera 照相機
UIImagePickerControllerSourceTypePhotoLibrary 照片庫 (用戶不可刪除)
UIImagePickerControllerSourceTypeSavedPhotosAlbum 通過攝像頭保存的照片(用戶可刪除)
如果需要對拍攝的照片或視頻進行保存,需要給設置代理,然后遵守兩個協議<UIImagePickerControllerDelegate,UINavigationControllerDelegate> ,實現下面的代理方法:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
通常情況下,在didFinish方法里面對照片或視頻進行保存處理;在didCancel方法里dismissViewController。
獲取視頻縮略圖
這里我用的filePath是本地視頻的存儲路徑;網絡視頻URL同理。
/**
* 獲取視頻的縮略圖方法
*
* @param filePath 視頻的本地路徑
*
* @return 視頻截圖
*/
- (UIImage *)getScreenShotImageFromVideoPath:(NSString *)filePath{
UIImage *shotImage;
//視頻路徑URL
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:fileURL options:nil];
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0.0, 600);
NSError *error = nil;
CMTime actualTime;
CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
shotImage = [[UIImage alloc] initWithCGImage:image];
CGImageRelease(image);
return shotImage;
}