捕获摄像头和音频输入时出错

iHo*_*rse 5 iphone video video-capture video-streaming ios4

使用iOS4中的一些漂亮的新API,我试图从iPhone的摄像头和麦克风捕获输入并将其保存到文件中.下面是我正在使用的代码.

AVCaptureSession* captureSession = [[AVCaptureSession alloc] init];
AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];
AVCaptureDeviceInput* videoInput = [[AVCaptureDeviceInput alloc] initWithDevice:captDevice error:&error];
AVCaptureMovieFileOutput * videoOutput = [[AVCaptureMovieFileOutput alloc] init];

if (videoInput && videoOutput && audioInput) 
{
    [captureSession addInput:audioInput];
    [captureSession addInput:videoInput];
    [captureSession addOutput:videoOutput];
    if([captDevice lockForConfiguration:&error])
    {
        if ([captDevice hasTorch]) 
            captDevice.torchMode = AVCaptureTorchModeOn;

        [captDevice unlockForConfiguration];
    }
    else 
    {
        NSLog(@"Could not lock device for config error: %@", error);
    }

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSURL* saveLocationURL = [[NSURL alloc] initFileURLWithPath:[NSString stringWithFormat:@"%@/movie.mov", documentsDirectory]];

    [videoOutput startRecordingToOutputFileURL:saveLocationURL recordingDelegate:self];
    [captureSession startRunning];

    [saveLocationURL release];
}
else 
{
    NSLog(@"Video Error: %@", error);
}   
Run Code Online (Sandbox Code Playgroud)

当didFinishRecordingToOutputFileAtURL返回时,我得到一个神秘的错误响应.

Error Domain=AVFoundationErrorDomain Code=-11803 "Cannot Record" UserInfo=0x152f70 {NSLocalizedRecoverySuggestion=Try recording again., AVErrorRecordingSuccessfullyFinishedKey=false, NSLocalizedDescription=Cannot Record}
Run Code Online (Sandbox Code Playgroud)

错误代码-11803表示"AVErrorSessionNotRunning".我能说的就是告诉我一些我不知道的事情.任何人都知道为什么会话没有运行?

tc.*_*tc. 16

[captureSession startRunning];之前打电话[videoOutput startRecordingToOutputFileURL:saveLocationURL recordingDelegate:self];.

  • @Meekohi:我也遇到了-12673错误,这是因为尝试将文件写入不可写的位置引起的.一旦写入我知道可写的目录,使用NSTemporaryDirectory(),捕获工作.我构建了文件URL,如[NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/video.mov",NSTemporaryDirectory()]]. (2认同)