ios video swift stream avcapturesession

ios - Obtenga la salida de AVCaptureSession en Swift para enviar al servidor



video stream (1)

Apple tiene un proyecto de muestra AVCam en ObjectiveC que funciona con estas cosas.

Here''s otra pregunta sobre SO sobre el uso de AVCamera en Swift.

Personalmente usé este https://github.com/alex-chan/AVCamSwift , y está bien. Solo tuve que convertirlo a la última sintaxis Swift en Xcode y funcionó bien.

Otra sugerencia es utilizar el código de ObjectiveC que encontraste e importarlo en tu código Swift a través de un encabezado puente.

Me las arreglé para escribir algunos códigos que abren la cámara y previsualizan el video. Ahora quiero capturar los marcos de la salida para enviarlos a un servidor codificado idealmente como H.264

Esto es lo que tengo:

import UIKit import AVFoundation class ViewController: UIViewController { let captureSession = AVCaptureSession() var previewLayer : AVCaptureVideoPreviewLayer? // If we find a device we''ll store it here for later use var captureDevice : AVCaptureDevice? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. captureSession.sessionPreset = AVCaptureSessionPresetHigh let devices = AVCaptureDevice.devices() // Loop through all the capture devices on this phone for device in devices { // Make sure this particular device supports video if (device.hasMediaType(AVMediaTypeVideo)) { // Finally check the position and confirm we''ve got the back camera if(device.position == AVCaptureDevicePosition.Back) { captureDevice = device as? AVCaptureDevice if captureDevice != nil { println("Capture device found") beginSession() } } } } } func beginSession() { var err : NSError? = nil captureSession.addInput(AVCaptureDeviceInput(device: captureDevice, error: &err)) if err != nil { println("error: /(err?.localizedDescription)") } previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) self.view.layer.addSublayer(previewLayer) previewLayer?.frame = self.view.layer.frame captureSession.startRunning() } }

Esto abre la cámara con éxito y puedo previsualizar las imágenes.

He encontrado este código de Objective C que parece que obtiene la salida, pero no sé cómo convertirlo a Swift. Está utilizando AVCaptureVideoDataOutput, AVAssetWriter, AVAssetWriterInput y AVAssetWriterInputPixelBufferAdaptor para escribir fotogramas en un archivo de película codificado H.264.

¿Se pueden usar AVCaptureVideoDataOutput y AVCaptureMovieFileOutput al mismo tiempo?

¿Puede alguien ayudarme a convertirlo o darme consejos sobre cómo sacar los marcos de mi código actual?