Что я делаю неправильно при записи видео с помощью Swift?

Я записываю видео с помощью AVFoundation в Swift, но не вижу файл .mp4. Я не знаю, записываю ли я, и я сохраняю плохо или я не записываю. Поскольку я могу показать предварительный просмотр сеанса, все компоненты правильно выполнили свою работу. Мой код:

 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

  }

Есть какие-то замечательные ошибки, которые я не вижу??

Спасибо!!


person user3745888    schedule 25.06.2014    source источник
comment
Вы решили свою проблему, если да, можете поделиться ею со мной. Благодарю.   -  person Koray Birand    schedule 10.06.2015
comment
ты решил свою проблему?   -  person Vatsal Shukla    schedule 15.02.2017


Ответы (2)


AVCaptureFileOutput -startRecordingToOutputFileURL берет NSURL. В опубликованном коде переданный параметр filePath является String. Попробуйте вместо этого использовать NSURL(string: filePath).

person mattt    schedule 13.11.2014

Я думаю, вы должны проверить функции внизу. AVCaptureFileOutputRecordingDelegate требует

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

быть реализованы правильно.

person Sungur    schedule 23.03.2015