2012-05-14 107 views
4

我想用UIImagePickerController录制视频。我的问题是,方法[imagePickerController startVideoCapture];总是返回0.我正在测试运行iOS 5.1的iPhone 4S的应用程序。可能有人请帮我这个:UIImagePickerController不会录制视频

- (IBAction)playButtonPushed:(id)sender 
{ 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
    { 
     UIView *videoView = self.videoViewController.view; 
     UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] >init]; 
     imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects: (NSString >*)kUTTypeMovie, nil]; 
     imagePickerController.showsCameraControls = NO; 
     imagePickerController.toolbarHidden = NO; 
     imagePickerController.wantsFullScreenLayout = YES; 
     imagePickerController.allowsEditing = YES; 
     imagePickerController.videoQuality = UIImagePickerControllerQualityTypeMedium; 
     imagePickerController.videoMaximumDuration = 30; 
     [imagePickerController startVideoCapture]; 
     imagePickerController.cameraViewTransform = > CGAffineTransformScale(self.imagePickerViewController.cameraViewTransform, CAMERA_TRANSFORM, CAMERA_TRANSFORM); 
     imagePickerController.delegate = self; 

     [self.imagePickerViewController setCameraOverlayView:videoView]; 
     NSLog(@"%s videoCapture: %d", __PRETTY_FUNCTION__, [imagePickerController > startVideoCapture] 
      ); 
     [self presentModalViewController:imagePickerViewController animated:YES]; 
    } 
} 


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    NSLog(@"didFinishPickingMediaWithInfo"); 
    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; 
    NSData *videoData = [NSData dataWithContentsOfURL:videoURL]; 
} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker 
{ 
    NSLog(@"Cancel"); 
} 

回答

2

如果我不是错,将“startVideoCapture”的方法是一个布尔

直接从苹果的文档摘自:

startVideoCapture

启动视频拍摄使用由UIImagePickerControllerCameraDevice属性指定的相机。 (BOOL)startVideoCapture 返回值

是成功,否则失败。结合

Movie capture is already in progress 

The device does not support movie capture 

The device is out of disk space 

讨论

使用此方法与自定义重叠视图启动电影的拍摄计划:这种方法可能会返回任何值因各种原因,其中包括以下。您可以在不离开界面的情况下拍摄多部电影,但要这样做需要隐藏默认图像选取器控件。

拍摄动画时调用此方法不起作用。您必须调用stopVideoCapture方法,然后等待直到关联的委托对象接收到imagePickerController:didFinishPickingMediaWithInfo:消息,然后才能捕获其他影片。

当图像选择器的源类型设置为UIImagePickerControllerSourceTypeCamera以外的值时,调用此方法将导致引发NSInvalidArgumentException异常。

如果您需要其他选项或更多控制动画捕捉,请使用AV Foundation框架中的动画捕捉方法。请参阅AV Foundation Framework Reference。 可用性

Available in iOS 4.0 and later. 

宣布 UIImagePickerController.h stopVideoCapture

停止视频拍摄。 - (无效)stopVideoCapture 讨论

在调用此方法停止视频采集,系统调用图像拾取委托的imagePickerController:didFinishPickingMediaWithInfo:方法。 可用性

Available in iOS 4.0 and later. 

宣布 UIImagePickerController.h

+0

不错的复制和粘贴从文档...... – nsij22

+0

是的,这是它对我来说。我认为我的空间不足。 – sudo

+0

奇怪的是,它只是返回true/false而不是一些错误原因。 – sudo

1

认为你需要调用presentModalViewController后致电startVideoCapture方法:动画:而不是之前。

在屏幕上显示UIImagePickerController并且动画已停止后,您可能还需要很短的延迟(< 1秒?),然后调用startVideoCapture,否则有时候它不会开始记录。

1

我有完全相同的问题。 AndyV没有错,直到选择器出现后才开始录制。我花了很多时间试图引进睡眠延迟,但最简单的解决方法是使用显示

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(startRecording) userInfo:nil repeats: NO]; 

然后选择器后,启动一个定时器..

- (void)startRecording 
{ 
    BOOL result = [picker startVideoCapture]; 
} 
1

我有同样的问题而苹果的文档没有帮助。这是因为他们错过一提的是startVideoCapture()可以返回false,如果您还没有设置拍摄模式。视频是这样的:

picker.cameraCaptureMode = .video 

这为我工作,我现在能够捕获视频。

相关问题