2014-10-07 3 views
4

Я занимаюсь разработкой приложения потокового видео, в котором мне нужно, чтобы захватить переднюю камеру видеокадра и кодировать затем передать в другой конец, типичный поток, как этоAVCaptureSession вращается | ориентация в то время как видео передачи

AVCaptureSession -> AVCaptureDeviceInput -> AVCaptureVideoDataOutput -> захват кадр -> закодировать кадр -> отправить кадр на другой конец,

он работает отлично, я настроил kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange в качестве формата кадра.

также предварительный слой используется для предварительного просмотра,

проблема возникает, когда ориентация устройства получает изменения, если устройство перемещается с вертикальной на горизонтальную, а затем на других конечных кадров получает вращение 90, я ожидал, так ориентация поддерживается в слое предварительного просмотра, поэтому я автоматически получаю повернутый буфер в обратном вызове Capture, но, похоже, слой предварительного просмотра просто показывает мне предварительный просмотр захваченного буфера и пользовательский интерфейс создает буфер, а на другом конце я получаю rared buffer,

Так что я хочу знать, есть ли какая-либо конфигурация, чтобы изменить ее или мне нужно вращать/преобразовывать буфер в буфере Capture c все обратно.

+0

Как вы захватить кадр? – gabbler

+0

Я имею в виду функцию обратного вызова - (void) captureOutput: (AVCaptureOutput *) captureOutput didOutputSampleBuffer: (CMSampleBufferRef) sampleBuffer fromConnection: (AVCaptureConnection *) connection – Amitg2k12

ответ

8

Благодарим за внимание, в основном это решение, ориентация соединения должна быть установлена, и я играл с предварительным слоем, поэтому его влияние на слой предварительного просмотра, но не на ориентацию.

здесь идет фрагмент кода

-(void) orientationChanged 
{ 
    // get the new orientation from device 
    AVCaptureVideoOrientation newOrientation = [self videoOrientationFromDeviceOrientation]; 

    // set the orientation of preview layer :(which will be displayed in the device) 
    [previewLayer.connection setVideoOrientation:newOrientation]; 

    // set the orientation of the connection: which will take care of capture 
    [pCaptureConnection setVideoOrientation:newOrientation]; 

} 
+0

Это полезно знать. – gabbler

+1

@ amitg2k12 что такое pCaptureConnection ??? – OXXY

+1

что такое pCaptureConnection ?? – Daniel

Смежные вопросы