我一直在尝试播放在 didOutputSampleBuffer
委托(delegate)中作为原始数据接收的音频。处理原始数据的正确方法应该是什么?
最佳答案
查看以下来自 Apple 的示例代码:AVCaptureTtoAudioUnitOSX
在那里您可以看到如何正确处理原始音频数据并将其传递给 AudioUnit
。
基本原理如下:
获取
SampleBuffer
的AudioStreamBasicDescription
以获取有关格式的信息首先使用
CMSampleBufferGetFormatDescription
获取CMFormatDescriptionRef
然后使用CMAudioFormatDescriptionGetStreamBasicDescription
获取AudioStreamBasicDescription
现在您可以获得有关采样率、每 channel 位数、每帧 channel 数和每数据包帧数的信息获取带有实际音频数据的
AudioBufferList
要么使用 CoreAudio 的公共(public)实用程序,要么检查这个 mailing list输入正确的方法
该函数称为CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
。第三个参数是bufferListOut
,它是您想要的AudioBufferList
并将传递给例如AudioUnit 或您需要的任何东西。获取实际的原始数据
AudioBufferList
包含AudioBuffers
,每个包含数据struct AudioBuffer { UInt32 mNumberChannels; UInt32 mDataByteSize; void *mData; };
这应该让你继续。查看来自 Apple 的示例代码以获取更多信息。
关于ios - 如何使用 `AVCapturesession` 中的 `didOutputSampleBuffer` 播放音频缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13814943/