Получите вывод из AVCaptureSession в Swift для отправки на сервер

Мне удалось написать код, который открывает камеру и просматривает видео. Теперь я хочу захватить кадры с выхода для отправки на сервер, идеально кодируемый как H.264

Вот что у меня есть:

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

    }

}

Откроется камера, и я могу просмотреть кадры.

Я нашел этот код Objective C, который выглядит так, как будто он выводит результат, но я не знаю, как его преобразовать в swift. Он использует AVCaptureVideoDataOutput, AVAssetWriter, AVAssetWriterInput и AVAssetWriterInputPixelBufferAdaptor для записи кадров в файл с кодировкой H.264.

Можно одновременно использовать AVCaptureVideoDataOutput и AVCaptureMovieFileOutput?

Может кто-то помочь преобразовать его или дать мне указания относительно того, как получить фреймы из моего текущего кода?

Ответы

Ответ 1

У Apple есть образец проекта AVCam в ObjectiveC, который работает с этим.

Вот еще один вопрос о SO об использовании AVCamera в Swift.

Я лично использовал этот https://github.com/alex-chan/AVCamSwift, и это нормально. Мне нужно было преобразовать его в синтаксис Last Swift в Xcode, и он работал нормально.

Другое предложение - использовать найденный вами код ObjectiveC и импортировать его в код Swift через заголовок моста.