4

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

- (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");
}
4

4 回答 4

2

如果我没记错的话,“startVideoCapture”方法是一个布尔值

直接取自苹果文档:

开始视频捕捉

使用 UIImagePickerControllerCameraDevice 属性指定的相机开始视频捕获。- (BOOL)startVideoCapture 返回值

YES 成功或 NO 失败。由于各种原因,此方法可能会返回 NO 值,其中包括:

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 基础框架参考。可用性

Available in iOS 4.0 and later.

在 UIImagePickerController.h 中声明 stopVideoCapture

停止视频捕获。- (void)stopVideoCapture 讨论

调用此方法停止视频采集后,系统会调用图像选择器委托的 imagePickerController:didFinishPickingMediaWithInfo: 方法。可用性

Available in iOS 4.0 and later.

在 UIImagePickerController.h 中声明

于 2012-11-28T21:00:17.297 回答
2

我遇到了同样的问题,Apple 的文档没有帮助。那是因为他们没有提到 startVideoCapture() 如果您没有像这样将捕获模式设置为 .video 可以返回 false:

picker.cameraCaptureMode = .video

这对我有用,我现在可以捕捉视频了。

于 2017-09-10T11:52:05.317 回答
1

认为您需要在调用 presentModalViewController:animated: 之后而不是之前调用 startVideoCapture 方法。

在 UIImagePickerController 出现在屏幕上并且动画停止之后,您可能还需要短暂的延迟(<1s?),然后调用 startVideoCapture,否则有时它不会开始录制。

于 2013-11-28T08:41:32.937 回答
1

我有完全相同的问题。AndyV 说得对,在出现选择器之前不会开始录制。我花了很多时间试图引入睡眠延迟,但最简单的解决方案是在使用显示选择器后启动一个计时器

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

然后 ..

- (void)startRecording
{
    BOOL result = [picker startVideoCapture];
}
于 2014-12-19T10:31:31.343 回答