2015-10-21 27 views
20

Swift'de AVFoundation kullanarak bir videonun nasıl kaydedileceğini anlamaya çalışıyorum. Özel bir kamera oluşturmaya kadar elimden geleni yaptım ama sadece fotoğrafların nasıl çekileceğini anladım ve videonun nasıl kaydedileceğini anlayamıyorum. Anladığım kadarıyla, kayıttan veri almak için AVCaptureVideoDataOutput'u kullanmalısınız, ancak kaydın nasıl başlatılacağını ve temsilci yöntemlerini nasıl uygulayacağımı anlayamıyorum.Swift'de avfoundation ile bir video nasıl kaydedilir?

Tüm AVFoundation Programlama Kılavuzu/Hareketsiz ve Video Medya Yakalama, Objective-C'de ve bunu çözemiyorum. İşte bu görevi başarmak için benim girişimi var:

Önce

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() 
       } 
      } 
     } 
    } 

} 

Sonra beginSession() Ben İşte nerede Canlı yayını

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() 
} 

kurmak denir kez kamera/yakalama oturumu kurmak Kullanıcının bir video kaydetme ve yakalama yaptığı yere kayıt yapmasını engellerim:

Sonra self.videoFileOutput.stopRecording()'u arıyorum. Doğru uygulamadan nasıl bilemiyorum çünkü hayal edebileceğiniz Sonra son olarak

temsilci yöntemleri

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

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

Ve hiçbir şey olmuyor.

+0

kontrol dosyası yolu gerçekten doğru olup olmadığını. Varolan bir dizinde olmalı. – findall

+0

Yine de her şey doğru mu ??? –

+0

Kullanmakta olduğunuz dosya dizini geçerli –

cevap

14

Kodunuzu denedim. Anlamlı bir filePath ayarlandığında, her şey yolunda gider. Bu gibi filePath değiştirin ve çağrılan temsilci yöntemleri alacak:

let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] 
    let filePath = documentsURL.URLByAppendingPathComponent("temp") 

    // Do recording and save the output to the `filePath` 
    videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate) 
+0

denemeye çağırmak için temsilci yöntemlerini hiç almadım. harika teşekkür ederim! –

+0

Kayıtlı videoyu nerede bulabileceğimi biliyor musunuz, telefonumdaki herhangi bir dizini bulamıyorum ya da –

+0

kodunu kullanarak herhangi bir yerde yakalayamıyorum Uygulamanızın belge dizininin altında bulunuyor. Bulmak için [bu yanıt] 'a (http://stackoverflow.com/a/31977276/2638425) başvurabilirsiniz. – liuyaodong