1。導入庫,實現協議
#import <MobileCoreServices/MobileCoreServices.h>
<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
e.g.
- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{
__block BOOL result = NO;
if ([paramMediaType length] == 0){
NSLog(@"Media type is empty.");
return NO;
}
//獲取本機中符合指定資源的所有媒體類型,以便後續判定是否支持
NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:paramSourceType];
[availableMediaTypes enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSString *mediaType = (NSString *)obj;
if ([mediaType isEqualToString:paramMediaType]){
result = YES;
*stop= YES;
}
}];
return result;
}
//是否支持攝像
- (BOOL) doesCameraSupportTakingVideos{
//KUTTypeMovie : 視頻
return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypeCamera];
}
//是否可用攝像頭
- (BOOL) isCameraAvailable{
return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera];
}
//delegate:完成選擇,注意這裏的視頻數據並未被保存(到機子中)
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"Picker returned successfully.");
NSLog(@"infoOfPickedMedia:%@", info); //info:包含了挑選的媒體信息
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeMovie]){ //挑選的是視頻
NSURL *urlOfVideo = info[UIImagePickerControllerMediaURL];
NSLog(@"Video URL = %@", urlOfVideo);
NSError *dataReadingError = nil;
//獲取到的錄製數據
NSData *videoData = [NSDatadataWithContentsOfURL:urlOfVideo
options:NSDataReadingMapped error:&dataReadingError];
if (videoData != nil){
NSLog(@"Successfully loaded the data.");
} else {
NSLog(@"Failed to load the data with error = %@", dataReadingError);
}
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
//delegate 取消選擇
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"Picker was cancelled");
[picker dismissViewControllerAnimated:YES completion:nil];
}
- (void)actionDisplayPickerController {
if ([self isCameraAvailable] && [self doesCameraSupportTakingVideos]){
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera;
//mediaType:KUTTypeImage / KUTTypeMovie 這裏決定了出現的模式窗口imagePickerController是進行攝像還是進行照相
controller.mediaTypes = @[(__bridge NSString *)kUTTypeMovie];
controller.allowsEditing= YES;
controller.delegate = self;
/* 錄製質量 UIImagePickerControllerQualityTypeHigh / UIImagePickerControllerQualityTypeMedium */
controller.videoQuality = UIImagePickerControllerQualityTypeHigh;
/* 允許攝錄的時間 (秒) */
controller.videoMaximumDuration = 30.0f;
[self presentViewController:controller animated:YES completion:nil];
} else {
NSLog(@"Camera is not available.");
}
}