Ios 如何在'didOutputSampleBuffer'中使用'AVCapturesession'播放音频缓冲区`

Ios 如何在'didOutputSampleBuffer'中使用'AVCapturesession'播放音频缓冲区`,ios,avfoundation,playback,avcapturesession,Ios,Avfoundation,Playback,Avcapturesession,我一直在尝试播放在didOutputSampleBufferdelegate中作为原始数据接收的音频。处理原始数据的正确方法应该是什么?查看以下来自Apple的示例代码: 在这里,您可以看到如何正确处理原始音频数据并将其传递到音频单元 基本原则如下: 获取SampleBuffer的AudioStreamBasicDescription了解格式信息 首先使用CMSampleBufferGetFormatDescription 然后使用cAudioFormatDescriptionGetStrea

我一直在尝试播放在
didOutputSampleBuffer
delegate中作为原始数据接收的音频。处理原始数据的正确方法应该是什么?

查看以下来自Apple的示例代码:

在这里,您可以看到如何正确处理原始音频数据并将其传递到
音频单元

基本原则如下:

  • 获取
    SampleBuffer
    AudioStreamBasicDescription
    了解格式信息

    首先使用
    CMSampleBufferGetFormatDescription

    然后使用
    cAudioFormatDescriptionGetStreamBasicDescription获取
    AudioStreamBasicDescription

    现在,您可以获得有关采样率、每通道比特数、每帧通道数和每包帧数的信息

  • 获取带有实际音频数据的
    AudioBufferList

    使用CoreAudio的公用事业或检查此条目以了解正确的操作方法
    该函数称为
    CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
    。第三个参数是
    bufferListOut
    ,它是您想要的
    AudioBufferList
    ,将传递给您使用,例如AudioUnit或您需要的任何东西

  • 获取实际原始数据

    AudioBufferList
    包含
    AudioBuffers
    ,每个都包含数据

    struct AudioBuffer {
     UInt32 mNumberChannels;
     UInt32 mDataByteSize;
     void   *mData;
    };
    
  • 这会让你走的。有关更多信息,请查看苹果的示例代码