如何使用目标c中的代码保存video?

我已经捕获了使用目标c的video,但是我无法将其保存在iphone照片库中。我不想使用AlAssets库,我只想使用图像select器。我已经看到很多方法在堆栈溢出和其他网站,但他们要么使用存储位置path(这是没有提到它是什么),或者他们不工作。 这是我的一段代码。

-(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]; } 

尝试这个:

 - (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]; } } 

希望它可以帮助你。

尝试这个:

 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]; } }];