音频CMSampleBuffer格式

7
当使用AVCaptureAudioDataOutput时,CMSampleBuffer中存储的数据是什么?它通过委托方法 -captureOutput:didOutputSampleBuffer:fromConnection:传递CMSampleBuffers,但是CMSampleBuffer内部有什么呢?是PCM还是压缩的?采样率、通道数量等是多少?这如何用于从设备流式传输音频? 谷歌搜索数小时也没有帮助我。 提前致谢。
2个回答

8
看起来你可以通过以下方式获取ASBD:
sampleBuffer->
  CMSampleBufferGetFormatDescription ->
    CMAudioFormatDescriptionGetStreamBasicDescription

然后ASBD将详细说明帧大小、是否压缩、字节序等。为了演示这一点(没有错误检查),并获取采样率:
CMSampleBufferRef cmSampleBuffer = ...;

CMFormatDescriptionRef formatDescription =
  CMSampleBufferGetFormatDescription(cmSampleBuffer);

const AudioStreamBasicDescription* const asbd =
  CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription);

double sampleRate = asbd->mSampleRate;

谢谢!我只使用了CMSampleBufferGetFormatDescription,它显示了我想知道的所有信息。 - peetonn
是否可以配置AVAudioOutput以不同于接收到的参数? - peetonn
1
@peetonn 不客气。关于你的问题:当你说“AVAudioOutput”时,我不确定你是指AudioOutputUnitAVAudioPlayer还是AVCaptureAudioDataOutput。我在Core和AU层长大,我猜它可能是他们想提供的任何东西,以避免转换开销。在这里值得搜索一下。 - justin

2

Swift 5

let formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer)
let asbd = CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription!)
let sampleRate = asbd?.pointee.mSampleRate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接