如何在没有压缩的情况下从iPhone相册复制视频?

时间:2015-07-29 09:50:49

标签: ios uiimagepickercontroller

当我尝试使用UIImagePickerController将视频从相册复制到应用时,视频会被压缩。

当通过Mac上的照片应用导入视频时,十秒长的视频是:

 1920x1280   ~22MB

将视频导入应用程序后,通过iTunes Sharing复制,压缩视频为:

 1280x720   ~6.3MB

如何以原始分辨率和质量将视频导入应用程序?

代码:

- (void)importVideo:(id)sender {
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];
    imagePickerController.allowsEditing = YES;
    imagePickerController.delegate = self;
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    [self dismissViewControllerAnimated:YES completion:nil];
    if (CFStringCompare((__bridge_retained CFStringRef)mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) {
        NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
        NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *folder = [paths firstObject];
        NSString *filename = [folder stringByAppendingPathComponent:self.uniqueFilename];
        BOOL success = [videoData writeToFile:filename atomically:NO];
        NSLog(@"Write to file %@", success ? @"OK" : @"Error");
    }
}

1 个答案:

答案 0 :(得分:0)

通过GMImagePicker获得PHAsset后,可以通过以下方式保存:

for (PHAsset *asset in assetArray) {
    PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
    options.version = PHVideoRequestOptionsVersionOriginal;
    [[PHImageManager defaultManager] requestAVAssetForVideo:asset
                                                    options:options
                                              resultHandler:^(AVAsset *avAsset, AVAudioMix *audioMix, NSDictionary *info) {
        if ([avAsset isKindOfClass:[AVURLAsset class]]) {
            NSURL *videoURL = [(AVURLAsset *) avAsset URL];
            NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *folder = [paths firstObject];
            NSString *filename = [folder stringByAppendingPathComponent:@"foo.mp4"];
            [videoData writeToFile:filename atomically:NO];
        }
    }];
}
相关问题