【发布时间】:2015-06-17 16:06:21
【问题描述】:
我是流媒体应用程序的初学者,我从 AudioBuffer 创建了 NSdata,并将 nsdata 发送到客户端(接收器)。但我不知道如何将 NSdata 转换为 Audio Buffer。
我正在使用以下代码将 AudioBuffer 转换为 NSdata(这很好用)
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
AudioStreamBasicDescription audioFormat;
memset(&audioFormat, 0, sizeof(audioFormat));
audioFormat.mSampleRate = 8000.0;
audioFormat.mFormatID = kAudioFormatiLBC;
audioFormat.mFormatFlags = kAudioFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked | kAudioFormatFlagIsAlignedHigh;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mReserved = 0;
audioFormat.mBytesPerFrame = audioFormat.mBytesPerPacket = audioFormat.mChannelsPerFrame* sizeof(SInt16);
AudioBufferList audioBufferList;
NSMutableData *data=[[NSMutableData alloc] init];
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
for( int y=0; y<audioBufferList.mNumberBuffers; y++ )
{
AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
Float32 *frame = (Float32*)audioBuffer.mData;
[data appendBytes:frame length:audioBuffer.mDataByteSize];
}
}
如果这不是正确的方法,请帮助我....谢谢。
【问题讨论】:
-
嘿,你做到了吗?如果是这样,请发布您的解决方案。谢谢,我正在努力解决同样的问题。
-
@Sojan - 你能以某种方式将数据转换回 CMSampleBufferRef 吗?或者您能否指导一些对您有用的资源/方法?
标签: ios objective-c nsdata audiobuffer