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?