2014-10-04 9 views
15

Sono riuscito a scrivere del codice che apre la fotocamera e visualizza il video in anteprima. Ora voglio catturare i fotogrammi dal uscita di inviare a un server ideale codificato come H.264Ottieni output da AVCaptureSession in Swift per inviare al server

Ecco quello che ho:

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() 

    } 

} 

Questa aprire la fotocamera con successo e posso vedere in anteprima il filmato .

Ho trovato questo codice Objective C che sembra abbia ottenuto l'output ma non so come convertirlo in rapido. Sta utilizzando AVCaptureVideoDataOutput, AVAssetWriter, AVAssetWriterInput e AVAssetWriterInputPixelBufferAdaptor per scrivere frame su un filmato con codifica H.264.

Can use AVCaptureVideoDataOutput and AVCaptureMovieFileOutput at the same time?

Qualcuno può aiutare a convertirlo o darmi indicazioni su come ottenere i fotogrammi dal mio codice attuale?

+0

La documentazione per questo genere di cose manca per la velocità. È piuttosto frustrante. –

+0

Hai trovato una soluzione? –

+0

stai provando a convertire il codice da [Posso usare AVCaptureVideoDataOutput e AVCaptureMovieFileOutput allo stesso tempo?] (Http://stackoverflow.com/questions/4944083/can-use-avcapturevideodataoutput-and-avcapturemoviefileoutput-at-the-same-time) a rapido? –

risposta

3

Apple ha un progetto di esempio AVCam in ObjectiveC che funziona con queste cose.

Here's un'altra domanda su SO sull'utilizzo di AVCamera in Swift.

Personalmente ho usato questo https://github.com/alex-chan/AVCamSwift, e va bene. Ho solo dovuto convertirlo alla sintassi di Swift più recente in Xcode e ha funzionato bene.

Un altro suggerimento è quello di utilizzare il codice ObjectiveC trovato e importarlo nel codice Swift tramite un'intestazione di collegamento.