2014-10-04 14 views
15

Udało mi się napisać kod otwierający kamerę i wyświetlający podgląd wideo. Teraz chcę uchwycić ramki z wyjścia wysłać do serwera idealnie zakodowany jako H.264Uzyskaj dane wyjściowe z AVCaptureSession w Swift, aby wysłać je na serwer

Oto co mam:

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

    } 

} 

Ten otwarty aparat pomyślnie i mogę obejrzeć nagranie .

Znalazłem ten kod Celu C, który wygląda tak, jakby otrzymywał wynik, ale nie wiem, jak przekonwertować go na szybki. Używa AVCaptureVideoDataOutput, AVAssetWriter, AVAssetWriterInput i AVAssetWriterInputPixelBufferAdaptor do zapisywania klatek do pliku filmowego zakodowanego w H.264.

Can use AVCaptureVideoDataOutput and AVCaptureMovieFileOutput at the same time?

Czy ktoś może pomóc przekształcić ją lub dać mi wskazówki, jak dostać się do klatki z mojego aktualnego kodu?

+0

Brakuje dokumentacji dla tego typu rzeczy. To dość frustrujące. –

+0

Czy znalazłeś rozwiązanie? –

+0

Czy próbujesz przekonwertować kod z [Można użyć AVCaptureVideoDataOutput i AVCaptureMovieFileOutput w tym samym czasie?] (Http://stackoverflow.com/questions/4944083/can-use-avcapturevideodataoutput-and-avcapturemoviefileoutput-at-the-same-time) na szybkie? –

Odpowiedz

3

Apple ma przykładowy projekt AVCam w ObjectiveC, który działa z tymi rzeczami.

Here's Kolejne pytanie dotyczące SO na temat używania AVCamera w Swift.

Osobiście użyłem tego https://github.com/alex-chan/AVCamSwift i jest w porządku. Musiałem tylko przekonwertować go do najnowszej składni Swift w Xcode i działało dobrze.

Kolejną sugestią jest użycie znalezionego kodu ObjectiveC i zaimportowanie go w tobie Kod Swift poprzez nagłówek pomostowy.

Powiązane problemy