【问题标题】:Audio CMSampleBuffer format音频 CMSampleBuffer 格式
【发布时间】:2011-12-24 09:36:43
【问题描述】:

使用 AVCaptureAudioDataOutput 时,CMSampleBuffer 中存储的数据是什么?它通过委托方法–captureOutput:didOutputSampleBuffer:fromConnection: 提供CMSampleBuffers,但是CMSampleBuffer 里面有什么? PCM还是压缩?采样率、通道数等是多少?这如何用于从设备流式传输音频? 谷歌搜索了几个小时并没有帮助我。

提前致谢

【问题讨论】:

    标签: ios avfoundation core-audio audio-streaming audio-recording


    【解决方案1】:

    看起来你可以通过这种方式获得 ASBD:

    sampleBuffer->
      CMSampleBufferGetFormatDescription ->
        CMAudioFormatDescriptionGetStreamBasicDescription
    

    然后 ASBD 将详细说明帧大小,如果它被压缩,字节序等。

    为了证明这一点(没有错误检查)并获得采样率:

    CMSampleBufferRef cmSampleBuffer = ...;
    
    CMFormatDescriptionRef formatDescription =
      CMSampleBufferGetFormatDescription(cmSampleBuffer);
    
    const AudioStreamBasicDescription* const asbd =
      CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription);
    
    double sampleRate = asbd->mSampleRate;
    

    【讨论】:

    • 谢谢!我只使用了CMSampleBufferGetFormatDescription,它显示了我想知道的所有信息
    • 是否可以使用我收到的不同参数配置AVAudioOutput
    • @peetonn 不客气。关于您的问题:当您说AVAudioOutput 时,我不确定您是指AudioOutputUnitAVAudioPlayer 还是AVCaptureAudioDataOutput。我是在 Core 和 AU 层长大的;我猜这是他们想要提供的任何东西,以避免转换开销。值得在这里搜索。
    【解决方案2】:

    斯威夫特 5

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2013-06-03
      相关资源
      最近更新 更多