2

AVCaptureSession と AVCaptureMovieFileOutput を使用してビデオを録画しようとしていますが、録画を開始didFinishRecordingToOutputFileAtURLしようとすると、 AVCaptureFileOutputRecordingDelegate メソッドでこのエラーが発生します。

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x15de7c40 {AVErrorRecordingSuccessfullyFinishedKey=false, NSLocalizedDescription=The operation could not be completed, NSLocalizedFailureReason=An unknown error occurred (-12673), NSUnderlyingError=0x15d88aa0 "The operation couldn’t be completed. (OSStatus error -12673.)"}

これは、AVCaptureMovieFileOutput を追加して AVCaptureSession を初期化するために使用しているコードです。

- (AVCaptureSession *)session {
    if (!_session) {
        _session = [[AVCaptureSession alloc] init];


        // ADD CAMERA DEVICE
        NSError *error = nil;
        AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:self.videoDevice error:&error];
        if (!videoInput) {
            NSLog(@"ERROR: trying to open camera: %@", error);
        } else {
            [_session addInput:videoInput];
        }


        // ADD AUDIO DEVICE
        error = nil;
        AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:self.audioDevice error:&error];
        if (!audioInput)
        {
            NSLog(@"ERROR: trying to open mic: %@", error);
        } else {
            [_session addInput:audioInput];
        }


        // ADD OUTPUT FILE
        if ([_session canAddOutput:self.movieFileOutput]) {
            [_session addOutput:self.movieFileOutput];
        }


        [_session startRunning];
    }

    return _session;
}

私の AVCaptureMovieFileOutput は、このように遅延ロードされます

- (AVCaptureMovieFileOutput *)movieFileOutput {
    if (!_movieFileOutput) {
        _movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];

        Float64 TotalSeconds = 60;          //Total seconds
        int32_t preferredTimeScale = 30;    //Frames per second
        CMTime maxDuration = CMTimeMakeWithSeconds(TotalSeconds, preferredTimeScale);
        _movieFileOutput.maxRecordedDuration = maxDuration;
        _movieFileOutput.minFreeDiskSpaceLimit = 1024 * 1024;
    }

    return _movieFileOutput;
}

私が見たチュートリアルのほとんどがこのようにしているので、何が間違っているのかわかりません。

ありがとう

4

1 に答える 1