Comment faire pour enregistrer une vidéo avec avfoundation dans Swift?

Je suis à essayer de comprendre comment faire pour enregistrer une vidéo à l'aide de AVFoundation en Swift. J'ai eu aussi loin que la création d'un appareil personnalisé mais je n'ai compris comment prendre des photos avec elle et je ne peux pas savoir comment enregistrer de la vidéo. Ce que je comprends, vous devez utiliser AVCaptureVideoDataOutput pour obtenir les données à partir de l'enregistrement, mais je ne peux pas comprendre comment faire pour démarrer l'enregistrement et de mettre en œuvre le délégué méthodes.

L'ensemble de la AVFoundation Guide de Programmation ou de Supports Vidéo et de Capture est en Objective-C et je n'arrive pas à déchiffrer l'extérieur. Voici ma tentative pour accomplir cette tâche:

J'ai d'abord configurer la caméra/session de capture

override func viewDidLoad() {
    super.viewDidLoad()

    captureSession.sessionPreset = AVCaptureSessionPresetHigh
    let devices = AVCaptureDevice.devices()
    for device in devices {
        if (device.hasMediaType(AVMediaTypeVideo)) {
            if(device.position == AVCaptureDevicePosition.Back) {
                captureDevice = device as? AVCaptureDevice
                if captureDevice != nil {
                    beginSession()
                }
            }
        }
    }

}

Puis une fois beginSession() est appelée, j'ai constitué le flux en direct

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.cameraView.layer.addSublayer(previewLayer)
    self.cameraView.bringSubviewToFront(takePhotoButton)
    self.cameraView.bringSubviewToFront(self.snappedPicture)
    self.cameraView.bringSubviewToFront(self.backButton)
    previewLayer?.frame = self.cameraView.layer.frame
    captureSession.startRunning()
}

Voici où j'ai coincé lorsque l'utilisateur appuie sur enregistrer pour enregistrer et capturer une vidéo:

@IBAction func takeVideoAction(sender: AnyObject) {

    var recordingDelegate:AVCaptureFileOutputRecordingDelegate? = self

    var videoFileOutput = AVCaptureMovieFileOutput()
    self.captureSession.addOutput(videoFileOutput)

    let filePath = NSURL(fileURLWithPath: "filePath")

    videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)

}

Puis-je appeler self.videoFileOutput.stopRecording().

Puis enfin le délégué des méthodes

func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) {
    return
}

func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]!) {
    return
}

Et rien ne se passe comme vous pouvez l'imaginer, parce que je peux pas comprendre comment le mettre en œuvre correctement.

  • Vérifier si le chemin d'accès au fichier est vraiment correct. Il doit être dans un répertoire existant.
  • Tout le reste est correct mais???
  • Le répertoire du fichier que j'utilise est valide
  • Que voulez-vous faire à l'intérieur du délégué méthodes?
  • pas tout à fait sûr, peut-être juste de dire à l'utilisateur lorsque l'appareil est en cours d'enregistrement et quand c'est fini l'enregistrement, cependant je ne peux même pas comprendre comment enregistrer et donc, je n'ai jamais réellement avoir obtenu le délégué des méthodes pour avoir appelé
InformationsquelleAutor Garret Kaye | 2015-10-21