2015-11-22 9 views
10

最新のQuickbloxバージョン(Quickblox 2.5、Quickblox-WebRTC 2.0)を使用しているビデオコールアプリがあり、ファイルを呼び出すときにビデオをストリーミングして保存する必要があります。 SDKの古いバージョンの古い例がありますが、現在のSDKのようには見えません。Quickblox - QBRTCCameraCaptureをファイルに保存する方法

現在のドキュメントには何もありません。また、AVCaptureVideoDataOutputを既に使用しているため、AVCaptureMovieFileOutoutを開始できません。ストリームをファイルに保存する方法はありますか?

UPDATE

私は、ファイルにビデオを書き込むことができました。不足しているのはオーディオトラックだけです。

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の基礎となるAVCaptureAudioDataOutputの入手方法に関するアイデアはありますか?

答えて

0

私はdevのQuicbkloxWebRTCチームからです。この機能は、次の大きなリリースのために計画されています。

+0

オーディオ出力を取得するための回避策はありませんか?私のクライアントは、ビデオがサウンドなしで保存されていることに驚いています。 – Raphael

+0

WebRTCは音声をネイティブにオーディオフレームで処理し、WebRTCはすべての相手からの音声をミックスし、ミキサーからオーディオトラックを録音することができます。今度は別のオーディオレコードを調べます。 – SevenDays

+0

@SevenDaysこの機能は最新のiOS SDKに実装されていますか?更新してください。 –

関連する問題