2015-11-22 14 views
10

En son Quickblox sürümünü (Quickblox 2.5, Quickblox-WebRTC 2.0) kullanarak bir görüntülü görüşme uygulamasına sahibim ve bir dosyaya aktarılmakta olan videoyu kaydetmem gerekiyor. SDK'nın eski bir örneğiyle mevcut olana benzeyen eski bir örnek var.Quickblox - Bir QBRTCCameraCapture dosyasını bir dosyaya nasıl kaydederim

Geçerli dokümanlar hakkında hiçbir şey yok ve QuickBlox zaten bir AVCaptureVideoDataOutput kullanıyor olduğundan AVCaptureMovieFileOutout'u başlatamıyorum. Akışı bir dosyaya kaydetmek için zaten var mı?

GÜNCELLEME:

Ben bir dosyaya videoyu yazmayı başardı. Tek eksik olan ses kaydı.

import Foundation 

class VideoManager : NSObject, AVCaptureVideoDataOutputSampleBufferDelegate { 

    static let sharedInstance = VideoManager() 

    var pixelBufferAdaptor: AVAssetWriterInputPixelBufferAdaptor? 
    var assetWriterInput: AVAssetWriterInput? 
    var assetWriter: AVAssetWriter? 
    var frameNumber: Int64 = 0 
    var qbDelegate: AVCaptureVideoDataOutputSampleBufferDelegate? 

    func startSavingCaptureToFileWithURL(url: NSURL, capture: QBRTCCameraCapture) { 
     print("[VideoManager]: startSavingCaptureToFileWithURL") 
     guard let dataOutput = getVideoCaptureDataOutput(capture) else { return } 

     frameNumber = 0 

     qbDelegate = dataOutput.sampleBufferDelegate 
     dataOutput.setSampleBufferDelegate(self, queue: dataOutput.sampleBufferCallbackQueue) 

     let outputSettings: [String : AnyObject] = [ 
      AVVideoWidthKey : 720, 
      AVVideoHeightKey: 1280, 
      AVVideoCodecKey : AVVideoCodecH264 
     ] 

     assetWriterInput = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: outputSettings) 
     pixelBufferAdaptor = AVAssetWriterInputPixelBufferAdaptor(assetWriterInput: assetWriterInput!, sourcePixelBufferAttributes: [kCVPixelBufferPixelFormatTypeKey as String : NSNumber(unsignedInt: kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)]) 

     do { 
      assetWriter = try AVAssetWriter(URL: url, fileType: AVFileTypeMPEG4) 
      assetWriter!.addInput(assetWriterInput!) 
      assetWriterInput!.expectsMediaDataInRealTime = true 

      assetWriter!.startWriting() 
      assetWriter!.startSessionAtSourceTime(kCMTimeZero) 
     } 
     catch { 
      print("[VideoManager]: Error persisting stream!") 
     } 

    } 

    func stopSavingVideo() { 
     assetWriter?.finishWritingWithCompletionHandler { [weak self] in 
      guard let strongSelf = self else { return } 
      strongSelf.frameNumber = 0 
     } 
    } 

    private func getVideoCaptureDataOutput(videoCapture: QBRTCCameraCapture) -> AVCaptureVideoDataOutput? { 
     var output: AVCaptureVideoDataOutput? 
     videoCapture.captureSession.outputs.forEach{ captureOutput in 
      if captureOutput is AVCaptureVideoDataOutput { 
       output = captureOutput as? AVCaptureVideoDataOutput 
      } 
     } 
     return output 
    } 

    func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { 
     qbDelegate?.captureOutput?(captureOutput, didOutputSampleBuffer: sampleBuffer, fromConnection: connection) 

     guard let assetWriterInput = assetWriterInput else { return } 
     guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return } 

     if assetWriterInput.readyForMoreMediaData { 
      pixelBufferAdaptor?.appendPixelBuffer(imageBuffer, withPresentationTime: CMTimeMake(frameNumber, 25)) 
     } 

     frameNumber++ 
    } 

    func getUniqueFileURL() -> NSURL { 
     let guid = NSProcessInfo.processInfo().globallyUniqueString 
     let fileName = "\(guid).mp4" 
     return NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(fileName) 
    } 

} 

QBRTCLocalAudioTrack en temel AVCaptureAudioDataOutput almak konusunda herhangi bir fikir?

cevap

0

Dev QuicbkloxWebRTC ekibinden geliyorum. Bu özellik bir sonraki büyük sürüm için planlandı.

+0

Ses çıkışını almak için bir çözüm yok mu? Müvekkilim videoların ses olmadan kaydedildiğinden korkuyor. – Raphael

+0

WebRTC, sesi ses çerçevelerinde yerel olarak işler, daha sonra WebRTC, sesi tüm rakiplerden karıştırır ve ancak mikserin ses kaydını kaydetme yeteneğimiz vardır. Şimdi ayrı ses kaydını araştırıyoruz. – SevenDays

+0

@SevenDays Bu özellik en son iOS SDK'da uygulandı, lütfen güncelleyin. –

İlgili konular