2

我正在使用 VideoToolbox 框架从 AVCaptureSession 检索数据并将其编码为 h264 和 acc。

我正处于这样的地步:

  1. 使用委托方法获取数据func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
  2. 将视频转换CMSampleBuffer为h264 并将其编码CVImageBuffer为 h264,使用VTCompressionSession它传递编码的帧VTCompressionOutputCallback
  3. 将音频编码CMSampleBuffer为 acc 并将其作为UnsafeMutableAudioBufferListPointer.

我现在被阻止了,我想将这些流正确转换为字节Data以通过FileHandle. 我该怎么办?

我需要在实际文件最终确定之前访问编码流,因此我不能使用(我认为)AVAssetWriter将未编码的流保存到 mp4 文件,因为据我所知,我需要将未编码的样本传递AVAssetWriter给它才能正常工作. 还是我弄错了?

4

1 回答 1

0

原来你可以保存编码CMSampleBuffer使用AVAssetWriter但你需要nil作为 outputSettings 传入AVAssetWriterInput以防止重新编码数据:

let input AVAssetWriterInput(mediaType: mediaType, outputSettings: nil, sourceFormatHint: sourceFormatHint)
于 2019-12-18T23:10:22.973 回答