Ios 单击开始录制时,如何以相同的时间间隔开始视频录制?

Ios 单击开始录制时,如何以相同的时间间隔开始视频录制?,ios,objective-c,swift,video,avcapturesession,Ios,Objective C,Swift,Video,Avcapturesession,我已经用avcapturesession实现了视频和音频录制。开始录音需要一些时间,通常需要1到2秒 如果需要更多信息,请随意评论。 设置捕获会话执行以下步骤: 添加捕获会话 添加视频输入 添加音频输入 添加视频预览层 添加电影输出 为输出连接设置摄像头配置 启动捕获会话 -(无效)设置捕获会话{ // Set up capture session captureSession = [AVCaptureSession new]; //add video intput AVCapt

我已经用avcapturesession实现了视频和音频录制。开始录音需要一些时间,通常需要1到2秒

如果需要更多信息,请随意评论。 设置捕获会话执行以下步骤:

  • 添加捕获会话
  • 添加视频输入
  • 添加音频输入
  • 添加视频预览层
  • 添加电影输出
  • 为输出连接设置摄像头配置
  • 启动捕获会话

    -(无效)设置捕获会话{

     // Set up capture session
         captureSession = [AVCaptureSession new];
    
    //add video intput
    AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    
       if (videoCaptureDevice) {
        NSError *error;
    
        videoInputDevice =  [AVCaptureDeviceInput deviceInputWithDevice:videoCaptureDevice error:&error];
        if(!error){
            if ([captureSession canAddInput:videoInputDevice]) {
                [captureSession addInput:videoInputDevice];
            }else{
                NSLog(@"Failed to add video input");
            }
        }else{
            NSLog(@"Failed to create video device");
        }
    }else{
        NSLog(@"Failed to create video capture device");
    }
    
    // add audio input
    AVCaptureDevice *audioCaptureDevie = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
    
    NSError *error = nil;
    
    AVCaptureDeviceInput *audioInputDevice = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevie error:&error];
    if (audioInputDevice) {
        [captureSession addInput:audioInputDevice];
    }
    
    // add outputs
    
    // add video preview layer
    NSLog(@"Adding video preview layer");
    
    [self setPreviewLayer:[[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession]];
    
    [[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    
    //add movie ouput
    movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
    movieFileOutput.minFreeDiskSpaceLimit = 1024 * 1024;
    
    if ([captureSession canAddOutput:movieFileOutput])
        [captureSession addOutput:movieFileOutput];
    
    // set up camera configuration for output connection
    [self setUpCameraConfiguration];
    
    [captureSession setSessionPreset:AVCaptureSessionPresetMedium];
    if ([captureSession canSetSessionPreset:AVCaptureSessionPreset640x480])
        [captureSession setSessionPreset:AVCaptureSessionPreset640x480];
    
    
    
    //----- DISPLAY THE PREVIEW LAYER -----
    //Display it full screen under out view controller existing controls
    NSLog(@"Display the preview layer");
    CGRect layerRect = [[[self view] layer] bounds];
    [_previewLayer setBounds:layerRect];
    [_previewLayer setPosition:CGPointMake(CGRectGetMidX(layerRect),
                                           CGRectGetMidY(layerRect))];
    //[[[self view] layer] addSublayer:[[self CaptureManager] previewLayer]];
    //We use this instead so it goes on a layer behind our UI controls (avoids us having to manually bring each control to the front):
    UIView *cameraView = [[UIView alloc] init];
    [[self view] addSubview:cameraView];
    [self.view sendSubviewToBack:cameraView];
    
    [[cameraView layer] addSublayer:_previewLayer];
    
    
    //----- START THE CAPTURE SESSION RUNNING -----
    [captureSession startRunning];
    
    }


1。添加会话配置代码。2.添加开始录制的代码。3.您是否创建了一个单独的DispatchGroup来处理AVCaptureSession?我想说,这可能与不在后台做事情有关,但我们首先需要更多信息。你能分享代码吗?请参考此链接,它可能会对你有所帮助。