2

我使用objective c捕获了一个视频,但是我无法将其保存在iphone照片库中。我不想使用AlAssets库,我只想使用图像选择器。我在堆栈上看到了很多方法溢出和其他站点,但它们要么使用存储位置路径(未提及它是什么),要么它们不起作用。这是我的一段代码。

-(IBAction)Onclick:(id)sender
{
    UIImagePickerController *imagePicker = [[UIImagePickerController

                                             alloc] init];
    imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;
    imagePicker.mediaTypes =  [NSArray arrayWithObject:(NSString *)

                               kUTTypeMovie];
    imagePicker.delegate = self;
    //UISaveVideoAtPath
    imagePicker.allowsImageEditing = NO;
    [self.view addSubview:imagePicker.view];
    [imagePicker viewWillAppear:YES];

    CGRect overlayFrame = CGRectMake(0, 380, 320, 44);
    //UILabel *lbl=[[UILabel alloc]init];
    UIView *baseView = [[[UIView alloc] init] autorelease];
    baseView.backgroundColor =[UIColor greenColor];
    //lbl.text=@"dfgfdgfd";
    baseView.frame=overlayFrame;
    //view.delegate = self;
    //view.picker = picker;
    //[view customize];
    imagePicker.cameraOverlayView = baseView;


    [self presentModalViewController:imagePicker animated:YES]; 


}


- (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"]){

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

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

    [self dismissModalViewControllerAnimated:YES];

}
4

2 回答 2

7

尝试这个:

- (void) imagePickerController: (UIImagePickerController *) picker
 didFinishPickingMediaWithInfo: (NSDictionary *) info
{
        NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];

         [self dismissViewControllerAnimated:YES completion:nil];

        // Handle a movie capture
        if (CFStringCompare (( CFStringRef) mediaType, kUTTypeMovie, 0)
            == kCFCompareEqualTo)
        {

            NSString *moviePath = [[info objectForKey:
                                    UIImagePickerControllerMediaURL] path];
            if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath))
            {
                UISaveVideoAtPathToSavedPhotosAlbum (moviePath,self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
            }


        }
    }
}
- (void)video:(NSString*)videoPath didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo
{
    if (error)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Photo/Video Saving Failed"  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil, nil];
        [alert show];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Photo/Video Saved" message:@"Saved To Photo Album"  delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
    }
}

希望它可以帮助你。

于 2012-12-12T06:12:51.967 回答
1

尝试这个:

NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:videoURL completionBlock:^(NSURL *assetURL, NSError *error){
       /*notify of completion*/
       NSLog(@"AssetURL: %@",assetURL);
       NSLog(@"Error: %@",error);
       if (!error) {
            //video saved

       }else{
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:error.domain delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                [alert show];
                [alert release];
       }

}];
于 2012-12-12T06:30:05.377 回答