What am I doing wrong while recording videos using Swift?

I am recording a video from AVFoundation in swift, but I do not see file.mp4. I don’t know if I am recording, and I feel bad or I am not recording. Because I can show a preview of the session, all components made its function correctly. My code is:

import UIKit import AVFoundation class ViewController: UIViewController, AVCaptureFileOutputRecordingDelegate { var delegate : AVCaptureFileOutputRecordingDelegate? @IBOutlet var imageView : UIImageView @IBOutlet var imagePreview : UIView var session : AVCaptureSession! var fileOutput : AVCaptureMovieFileOutput! var previewLayer : AVCaptureVideoPreviewLayer! func initCamera() -> Bool { var cameraBack : AVCaptureDevice? var videoIn : AVCaptureDeviceInput var devices : NSArray = AVCaptureDevice.devices() for device: AnyObject in devices{ if device.position == AVCaptureDevicePosition.Back{ cameraBack = device as? AVCaptureDevice } } delegate=self var error : NSErrorPointer! var deviceInput : AVCaptureInput = AVCaptureDeviceInput.deviceInputWithDevice(cameraBack, error: error) as AVCaptureInput self.session=AVCaptureSession() self.session.addInput(deviceInput as AVCaptureInput) self.fileOutput = AVCaptureMovieFileOutput() self.session.addOutput(self.fileOutput) var previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.layerWithSession(self.session) as AVCaptureVideoPreviewLayer previewLayer.frame = self.imagePreview.bounds self.imagePreview.layer.addSublayer(previewLayer) self.session.startRunning() return true } @IBAction func stop(sender : UIButton) { println("Stop") self.fileOutput.stopRecording() } @IBAction func record(sender : UIButton) { var formatter: NSDateFormatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd-HH-mm-ss" let dateTimePrefix: String = formatter.stringFromDate(NSDate()) let paths = NSSearchPathForDirectoriesInDomains( .DocumentDirectory, .UserDomainMask, true) let documentsDirectory = paths[0] as String var filePath:String? = nil var fileNamePostfix = 0 do { filePath = "\(documentsDirectory)/\(dateTimePrefix)-\(fileNamePostfix++).mp4" } while (NSFileManager.defaultManager().fileExistsAtPath(filePath)) self.fileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: delegate) override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.initCamera() } func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: AnyObject[]!, error: NSError!){ recording=true } func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: AnyObject[]!) { recording=false } 

Is there some wonderful mistake that I don't see?

Thanks!!

+5
source share
2 answers

AVCaptureFileOutput -startRecordingToOutputFileURL is set to NSURL . In the submitted code, the passed parameter filePath is String . Use NSURL(string: filePath) .

+4
source

I think you should check the functions below. AVCaptureFileOutputRecordingDelegate requires

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

for proper implementation.

+1
source

Source: https://habr.com/ru/post/1014024/


All Articles