iOS Swift 2 Enregistrer la video AVCaptureSession

J'ai créé une AVCaptureSession et attaché à la camera frontale

do { try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice)) }catch{print("err")} 

Maintenant, je veux commencer et arrêter l'logging sur les events de touche. Comment puis-je faire cela?

 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { print("touch") //Start Recording } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { print("release"); //End Recording and Save } 

Vous n'avez pas AVCaptureMovieFileOutput si vous utilisiez AVCaptureMovieFileOutput ou AVCaptureVideoDataOutput tant que sortie pour votre session. Le premier est bien adapté pour save une video rapidement et sans plus coder le dernier est utilisé pour un logging plus avancé en obtenant des morceaux de CMSampleBuffer pendant la session d'logging.

Pour la scope de cette réponse, je vais aller avec AVCaptureMovieFileOutput , voici un code de démarrage minimalist:

 import UIKit import AVFoundation import AssetsLibrary class ViewController: UIViewController, AVCaptureFileOutputRecordingDelegate { var captureSession = AVCaptureSession() lazy var frontCameraDevice: AVCaptureDevice? = { let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! [AVCaptureDevice] return devices.filter{$0.position == .Front}.first }() lazy var micDevice: AVCaptureDevice? = { return AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio) }() var movieOutput = AVCaptureMovieFileOutput() private var tempFilePath: NSURL = { let tempPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent("tempMovie").URLByAppendingPathExtension("mp4").absoluteSsortingng if NSFileManager.defaultManager().fileExistsAtPath(tempPath) { do { try NSFileManager.defaultManager().removeItemAtPath(tempPath) } catch { } } return NSURL(ssortingng: tempPath)! }() private var library = ALAssetsLibrary() override func viewDidLoad() { super.viewDidLoad() //start session configuration captureSession.beginConfiguration() captureSession.sessionPreset = AVCaptureSessionPresetHigh // add device inputs (front camera and mic) captureSession.addInput(deviceInputFromDevice(frontCameraDevice)) captureSession.addInput(deviceInputFromDevice(micDevice)) // add output movieFileOutput movieOutput.movieFragmentInterval = kCMTimeInvalid captureSession.addOutput(movieOutput) // start session captureSession.commitConfiguration() captureSession.startRunning() } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { print("touch") // start capture movieOutput.startRecordingToOutputFileURL(tempFilePath, recordingDelegate: self) } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { print("release") //stop capture movieOutput.stopRecording() } private func deviceInputFromDevice(device: AVCaptureDevice?) -> AVCaptureDeviceInput? { guard let validDevice = device else { return nil } do { return try AVCaptureDeviceInput(device: validDevice) } catch let outError { print("Device setup error occured \(outError)") return nil } } func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]!) { } func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) { if (error != nil) { print("Unable to save video to the iPhone \(error.localizedDescription)") } else { // save video to photo album library.writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: { (assetURL: NSURL?, error: NSError?) -> Void in if (error != nil) { print("Unable to save video to the iPhone \(error!.localizedDescription)") } }) } } } 

Pour plus d'informations sur Camera Capture, voir WWDC 2014 – Session 508