在iPhone的库中保存录制的视频时出现问题

Raf*_*ael 5 iphone objective-c

我正在尝试使用UIImagePickerController委托将录制的视频保存到库中.它适用于图片但如果它是视频则无法保存,如果我打开照片应用程序后尝试保存视频,我会收到一条消息"请等待.Update字符串库",以及带有标签的进度条"重建图书馆".我的照片库已恢复,但视频未添加到其中.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {


    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

     if ([mediaType isEqualToString:@"public.image"]){
          UIImage *picture = [info objectForKey:UIImagePickerControllerOriginalImage];
          UIImageWriteToSavedPhotosAlbum(picture, nil, nil, nil);
    } 
     else if ([mediaType isEqualToString:@"public.movie"]){

          NSString* m_objMediaURL= [info objectForKey:UIImagePickerControllerMediaURL];
          NSLog(@"URL is %@", m_objMediaURL);
          UISaveVideoAtPathToSavedPhotosAlbum(m_objMediaURL, nil, nil, nil);
     }

     [self dismissModalViewControllerAnimated:YES];

}
Run Code Online (Sandbox Code Playgroud)

上面的NSLog输出如下:

URL is 
file://localhost/private/var/mobile/Applications/3800A5FB-2A96-4A7A-85DF-B635E8D9A66C/tmp/capture-T0x1061f0.tmp.JMdxHq/capturedvideo.MOV
Run Code Online (Sandbox Code Playgroud)

有没有人实施过这样的方法,能指出正确的方向吗?

谢谢.

Pet*_*ese 6

我想我看到了一个问题.

NSString* m_objMediaURL= [info objectForKey:UIImagePickerControllerMediaURL];

是错误的类型.我正常工作的代码使用:

NSURL *url = [[[info objectForKey:UIImagePickerControllerMediaURL] copy] autorelease];

我复制它而不是保留它,因为在拾取器视图被解除后我在低内存情况下遇到了一些问题.虽然您使用的保存方法可能有效,但我使用的是更新更好(因为回调块):

ALAssetsLibrary* library = [[[ALAssetsLibrary alloc] init] autorelease];
[library writeVideoAtPathToSavedPhotosAlbum:url
                            completionBlock:^(NSURL *assetURL, NSError *error){/*notify of completion*/}];
Run Code Online (Sandbox Code Playgroud)

此外,您应该使用kUTTypeMoviekUTTypeImage不是硬编码@"public.image.