1

iOS documentation говорит, что вы можете добавлять и удалять входы во время сеанса, например, для переключения между передней и задней камерами.Почему коммутационные камеры останавливают мой AVCaptureSession для MovieFileOutput?

Однако, когда я пытаюсь это сделать, моя сессия останавливается. Я запирая сеанс с beginConfiguration и commitConfiguration вызовов следующим образом:

- (void)switchCamera:(UIButton *)sender { 

    dispatch_async([self sessionQueue], ^{ 

     AVCaptureSession *session = self.captureSession; 
     [session beginConfiguration]; 

     AVCaptureInput *currentInput = self.currentCameraIsBack ? self.videoDeviceInputBack : self.videoDeviceInputFront; 
     AVCaptureInput *newInput = self.currentCameraIsBack ? self.videoDeviceInputFront : self.videoDeviceInputBack; 

     [session removeInput:currentInput]; 
     [session addInput:newInput]; 
     self.currentCameraIsBack = !self.currentCameraIsBack; 

     [session setSessionPreset:AVCaptureSessionPresetMedium]; 
     [self setCameraOutputProperties]; 

     [session commitConfiguration]; 
    }); 
} 

Я вывода на AVCaptureMovieFileOutput. Нужно ли мне что-то делать, чтобы настроить этот сеанс так, чтобы он был включен?

(Обратите внимание, что ОП в this question пытается добавить новый вход, не удаляя старую, которая не является проблемой здесь)

ответ

0

Оказывается, что для этого вам нужно использовать AVAssetWriter и вызов appendSampleBuffer: самостоятельно с полученными CMSampleBuffer примерно так:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    if (self.recording && self.videoWriterInput.isReadyForMoreMediaData) { 

     [self.videoWriterInput appendSampleBuffer:sampleBuffer]; 
    } 
} 
Смежные вопросы