【问题标题】:UIImagepickercontroller: converting to low quality video errorUIImagepickercontroller:转换为低质量视频错误
【发布时间】:2013-02-14 10:42:16
【问题描述】:

我从 UIImagepickercontroller 的 didFinishPickingMediaWithInfo 的方法中获取 inputurl [info objectForKey:UIImagePickerControllerMediaURL]

NSURL *inputURL = [NSURL URLWithString:inputurlstring];

我从这段代码中给出 outputurl

        NSString  *documentsDirectory = [paths objectAtIndex:0];
        NSString *videoPath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"capturedvideo.MOV"];
        NSURL *outputURL = [NSURL fileURLWithPath:videoPath];

我使用以下代码获取低质量视频

 - (void)convertVideoToLowQuailtyWithInputURL:(NSURL*)inputURL 
    outputURL:(NSURL*)outputURL 
    handler:(void (^)(AVAssetExportSession*))handler 
    { 

    [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil]; 
    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil]; 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality]; 
    exportSession.outputURL = outputURL; 
    exportSession.outputFileType = AVFileTypeQuickTimeMovie; 

    [exportSession exportAsynchronouslyWithCompletionHandler:^(void) 
    { 
    if (exportSession.status == AVAssetExportSessionStatusCompleted) 
    { 
    printf("completed\n"); 

    } 
    else 
    { 
    printf("error\n"); 
    NSLog(@"error is %@",exportSession.error); 

    } 

    }]; 
}           

仅使用大文件时出现以下错误。因为当我使用小尺寸视频文件时,我没有收到任何错误。

Error Domain=NSURLErrorDomain Code=-1 "unknown error" UserInfo=0x616d890         
 {NSErrorFailingURLStringKey=/private/var/mobile/Applications/EE1E6701-EED0-4830-BD1D-7366680713C0/tmp//trim.7mL7VS.MOV, NSErrorFailingURLKey=/private/var/mobile/Applications/EE1E6701-EED0-4830-BD1D-7366680713C0/tmp//trim.7mL7VS.MOV, NSLocalizedDescription=unknown error, NSUnderlyingError=0x2d1460 "The operation couldn’t be completed. (OSStatus error -12935.)", NSURL=/private/var/mobile/Applications/EE1E6701-EED0-4830-BD1D-7366680713C0/tmp//trim.7mL7VS.MOV}

【问题讨论】:

  • 您要修剪大视频吗?看起来修剪存储在私人文件夹中。
  • 我正在转换为低质量并存储在文档目录@AlbertRenshaw
  • 为什么不直接跳过转换,将 UIImagePickerController 上的 videoQuality 属性设置为 UIImagePickerControllerQualityTypeLow?
  • 仅使用这种 AVFondation 方法我得到的文件大小更小@KasperWelner
  • 可能您的设备空间不足?

标签: iphone ios objective-c avfoundation


【解决方案1】:

上面的代码是完美的。唯一的变化是 inputURL。

在我将 inputURL 更改为 fileURLWithPath 之后:

 NSURL *inputURL = [NSURL fileURLWithPath:inputurlstring];

现在它可以完美运行了。

【讨论】:

    【解决方案2】:

    而不是这个

    [info objectForKey:UIImagePickerControllerMediaURL];
    

    使用

    NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
    

    AVAssetLibrary 只能通过其reference url 访问您的视频。

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 2021-12-26
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 2017-10-31
      • 2021-11-25
      相关资源
      最近更新 更多