Salida de video cuadrada en iOS

¿Hay alguna forma de get salida de video cuadrada por AVFoundation en iOS?

Uso OpenGL para procesar cada fotogtwig ( CMSampleBuffer ) de video. Cada marco
se gira, por lo que necesito recortar y rotar CMSampleBuffer . Pero no sé cómo hacerlo, por lo que creo que hay una manera de get frameworks recortados y rotados mediante el establecimiento de properties ( videoSettings ) en AVCaptureVideoDataOutput .

Busqué en Google, busqué en Google y lo busqué, pero no encontré nada. El ejemplo de código en swift sería genial.

Actualizar:

Mi solución final completa en Swift:

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) captureSession = AVCaptureSession() captureSession!.sessionPreset = AVCaptureSessionPreset640x480 let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) var error: NSError? var input: AVCaptureDeviceInput! do { input = try AVCaptureDeviceInput(device: backCamera) } catch let error1 as NSError { error = error1 input = nil } if error == nil && captureSession!.canAddInput(input) { captureSession!.addInput(input) stillImageOutput = AVCaptureStillImageOutput() stillImageOutput!.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG, kCVPixelBufferPixelFormatTypeKey: Int(kCVPixelFormatType_32BGRA)] if captureSession!.canAddOutput(stillImageOutput) { captureSession!.addOutput(stillImageOutput) } } videoOutput = AVCaptureVideoDataOutput() videoOutput!.videoSettings = [kCVPixelBufferPixelFormatTypeKey: Int(kCVPixelFormatType_32BGRA), AVVideoWidthKey : 100, AVVideoHeightKey: 100] videoOutput!.setSampleBufferDelegate(self, queue: dispatch_queue_create("sample buffer delegate", DISPATCH_QUEUE_SERIAL)) if captureSession!.canAddOutput(self.videoOutput) { captureSession!.addOutput(self.videoOutput) } videoOutput!.connectionWithMediaType(AVMediaTypeVideo).videoOrientation = AVCaptureVideoOrientation.PortraitUpsideDown videoOutput!.connectionWithMediaType(AVMediaTypeVideo).videoMirronetworking = true captureSession!.startRunning(); } 

¡Es perfecto para mí el reflection y la rotation de la salida de video! Pero no es cultivo!

Para rotar el CMSampleBuffer, debe atender a esta nota de Apple:

https://developer.apple.com/library/ios/qa/qa1744/_index.html

En particular, si desea girar físicamente el video (en lugar de simplemente establecer un indicador de orientación), puede …

por ejemplo, en la callback:

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

Si haces esto:

  [connection setVideoOrientation:AVCaptureVideoOrientationPortraitUpsideDown]; 

obtendrás un video al revés.

Para recortar el video, debe usar un AVAssetWriterInput, en el que puede configurar el recorte utilizando el dictionary de video de configuration.

Por ejemplo:

 NSDictionary *videoSettings = @{ AVVideoCodecKey : AVVideoCodecH264 , AVVideoWidthKey : @(100) , AVVideoHeightKey : @(100) }; 

utilizado aquí:

  self.assetWriterVideoInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:videoSettings]; 

le dará un video con un tamaño de 100 x 100 px, ancho completo, pero recortado de altura a cuadrado.

Consulte AVVideoSettings.h para ver la list completa de keys

Tema dedicado al recorte y rotation de videos con GPUImage