【发布时间】:2012-05-29 08:52:12
【问题描述】:
我有这段代码试图用来捕获音频数据。但是编译器抱怨CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
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];
}
CFRelease(blockBuffer);
blockBuffer=NULL;
[data release];
}
错误:
架构 armv7 的未定义符号:
“_CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer”,引用 从: -[MicCommunicator captureOutput:didOutputSampleBuffer:fromConnection:] 在 MicCommunicator.old:未找到架构 armv7 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看 调用)
【问题讨论】:
-
是否有理由将帧附加到单个数据中?我问的原因是我使用相同的函数 CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer 来获取数据并通过网络发送它以供 AudioQueue 读取.. 但由于某种原因,它到达的都是乱码和东西.. 我不认为它是一个 ABSD 格式问题,因为我对发送方和接收方都使用标准 lPCM..
-
@www.fossfactory.org 是的。我用于发送的 httpclient 将 NSData/NSMutableData 作为参数。所以我最容易将它用作容器。任何时候我的音频出现乱码都是因为它使用了错误的格式(不是 ulaw)。但我的设置不同。
-
我知道这有点像警察,但我已经花了一个多星期的时间来摆弄格式(以及其他所有内容)但没有结果..查看这个问题中的代码(你看到格式有什么问题吗?)我只是使用 PCM 格式输入和输出:stackoverflow.com/questions/12264799/…
-
@www.fossfactory.org 我有时间会去看看。最终帮助我的一件事(在这个问题上工作了几个月)是 Apple 为开发人员提供支持。您的订阅可免费获得 2 个。我从来不知道开发支持,所以我想也许你也不知道。