【问题标题】:UIImagePickerController won't record a videoUIImagePickerController 不会录制视频
【发布时间】:2012-05-22 10:04:08
【问题描述】:

我想用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");
}

【问题讨论】:

    标签: objective-c ios cocoa-touch ios5 uiimagepickercontroller


    【解决方案1】:

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

    直接取自苹果文档:

    开始视频捕捉

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

    成功时是,失败时是否。由于各种原因,此方法可能返回 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 停止视频捕捉

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

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

    Available in iOS 4.0 and later.
    

    声明于 UIImagePickerController.h

    【讨论】:

    • 是的,这就是给我的。我想我空间不够了。
    • 奇怪的是它只返回真/假而不是一些错误原因。
    【解决方案2】:

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

    在 UIImagePickerController 出现在屏幕上并且动画停止后,您可能还需要短暂的延迟(

    【讨论】:

      【解决方案3】:

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

      显示选择器后启动计时器
      NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(startRecording) userInfo:nil repeats: NO]; 
      

      然后..

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

      【讨论】:

        【解决方案4】:

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

        picker.cameraCaptureMode = .video
        

        这对我有用,我现在可以拍摄视频了。

        【讨论】:

        • 为什么在 HECK 文档中这不是明亮、粗体、红色的字母?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多