我需要将CMSampleBuffer
转换为Data
。我使用一个第三方框架音频相关的任务。该框架为我提供了CMSampleBuffer
对象中的流(即真实的时间音频)音频。
就像这样:
func didAudioStreaming(audioSample: CMSampleBuffer!) {
//Here I need to conver this to Data format.
//Because I am using GRPC framework for Audio Recognization,
}
请提供我的步骤转换为Data
的CMSampleBuffer
。
FYI
let formatDesc:CMFormatDescription? = CMSampleBufferGetFormatDescription(audioSample)
<CMAudioFormatDescription 0x17010d890 [0x1b453ebb8]> {
mediaType:'soun'
mediaSubType:'lpcm'
mediaSpecific: {
ASBD: {
mSampleRate: 16000.000000
mFormatID: 'lpcm'
mFormatFlags: 0xc
mBytesPerPacket: 2
mFramesPerPacket: 1
mBytesPerFrame: 2
mChannelsPerFrame: 1
mBitsPerChannel: 16 }
cookie: {(null)}
ACL: {(null)}
FormatList Array: {(null)}
}
extensions: {(null)}
}
3条答案
按热度按时间nwlqm0z11#
尝试下面的代码将CMSampleBuffer转换为NSData。
编辑-
对于AudioBuffer使用下面的代码-
wqnecbli2#
使用
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
将需要在某个时候调用CFRelease(blockBuffer)
,因为缓冲区被保留,如果不释放,缓冲区池最终将变为空,并且不会生成新的CMSampleBuffer
。我建议使用以下方法直接获取数据:
n9vozmp43#
@plamkata__的代码转换为Swift: