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é
Vous devez vous connecter pour publier un commentaire.
J'ai essayé votre code. Lors de définir un véritable
filePath
, tout va bien. Changer votrefilePath
comme cela et vous obtiendrez le délégué méthodes invoquées: