iOS 8.0 相冊使用的新的框架 Photos。
一姥闪、獲取權(quán)限
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusNotDetermined) {
//未授權(quán)
}else if (status == PHAuthorizationStatusDenied){
//授權(quán)
}
}];
二单绑、獲取視屏元數(shù)據(jù)
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil];
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//包含視屏信息的元數(shù)據(jù)
PHAsset *asset = (PHAsset *)obj;
}];
PHFetchResult 為一個管理類,獲取實例所傳入的參數(shù)第一個為枚舉類型蓉驹,有
PHAssetMediaTypeUnknown
PHAssetMediaTypeImage
PHAssetMediaTypeVideo
PHAssetMediaTypeAudio
而第二個參數(shù)則是一些配置,如排序等揪利。遍歷獲取到的 obj 則為 PHAsset 類的實例态兴,包含一個數(shù)據(jù)的信息。
三疟位、壓縮
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil];
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//包含視屏信息的元數(shù)據(jù)
PHAsset *asset = (PHAsset *)obj;
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionCurrent;
[[PHImageManager defaultManager] requestAVAssetForVideo:asset options:options resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset* urlAsset = (AVURLAsset*)asset;
AVAssetExportSession * exportSession = [AVAssetExportSession exportSessionWithAsset:urlAsset presetName:AVAssetExportPresetMediumQuality];
exportSession.outputFileType = AVFileTypeMPEG4;
NSString *outPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"zip.mov"];
exportSession.outputURL = [NSURL fileURLWithPath:outPath];
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch (exportSession.status) {
case AVAssetExportSessionStatusUnknown:
NSLog(@"exportSession.status AVAssetExportSessionStatusUnknown");
break;
case AVAssetExportSessionStatusWaiting:
NSLog(@"exportSession.status AVAssetExportSessionStatusWaiting");
break;
case AVAssetExportSessionStatusExporting:
NSLog(@"exportSession.status AVAssetExportSessionStatusExporting");
break;
case AVAssetExportSessionStatusCompleted:{
NSLog(@"exportSession.status AVAssetExportSessionStatusCompleted");
/*壓縮大小*/
NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:outPath error:nil];
float fileSize = [[fileAttributes objectForKey:NSFileSize] unsignedLongLongValue];
NSLog(@"size : %f",fileSize);
NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:outPath]];
[[NSFileManager defaultManager] removeItemAtPath:outPath error:nil];
break;
}
case AVAssetExportSessionStatusFailed:{
NSLog(@"exportSession.status AVAssetExportSessionStatusFailed");
break;
}
case AVAssetExportSessionStatusCancelled:
NSLog(@"exportSession.status AVAssetExportSessionStatusCancelled");
break;
default:
break;
}
}];
}
}];
}];
PHVideoRequestOptions 的 version 兩個值:
PHVideoRequestOptionsVersionCurrent 當(dāng)前視屏(包括編輯后)
PHVideoRequestOptionsVersionOriginal 原始視屏
關(guān)鍵參數(shù)為 AVAssetExportSession 的 presetName瞻润,設(shè)置壓縮的程度:
AVAssetExportPresetLowQuality 最低壓縮,壓縮后視屏大小最大,但清晰度最高绍撞;
AVAssetExportPresetMediumQuality 中度壓縮正勒,壓縮后是視屏大小中等,清晰度也是中等傻铣;
AVAssetExportPresetHighestQuality 高度壓縮章贞,壓縮后視屏大小最小,清晰度最差非洲。
outputFileType 參數(shù)鸭限,壓縮完視頻格式,列常見的一些:
AVFileTypeQuickTimeMovie .mov 格式两踏;
AVFileTypeMPEG4 mp4格式败京;
AVFileTypeAppleM4V .m4v格式;
AVFileTypeAppleM4A .m4a格式梦染;
AVFileType3GPP .3gp 格式
本例壓縮完視屏后存儲到臨時路徑下赡麦,然后獲取到 data 數(shù)據(jù)后,去做其他操作帕识,然后刪除臨時壓縮數(shù)據(jù)泛粹。