AVCaptureSession 和 AudioQueue
Posted
技术标签:
【中文标题】AVCaptureSession 和 AudioQueue【英文标题】:AVCaptureSession and AudioQueue 【发布时间】:2012-02-29 08:53:26 【问题描述】:我是 Objective-C 和 ios 的新手,我需要你的帮助。我想获取我的麦克风音频输入并将其直接重定向到扬声器输出中(不通过文件)。
我在这里:使用 AVCaptureSession 获取我的麦克风输入并使用 AudioQueue 尝试播放输出缓冲区。但是我在互联网上找不到任何东西,似乎没有人需要这样做。我是不是误会了什么? 我只想知道如何将我的 CMsampleBufferRef 转换为我的 AudioQueue 可以用来播放的良好 pcmbuffer(以及在我的 AudioQueue 中修改什么以将其与我的 AVCaptureSession 链接)。这是好方法吗? 我发现了很多东西可以将输出缓冲区写入文件,但是为了即时执行某些操作,什么也没有,或者只是简短的解释,我还不能使用。
请你给我一个非常详细的示例代码解释,因为我是一个新手。现在我可以使用我的 AVCaptureSession(CMSampleBufferRef 中有一些东西),我可以用我的 AudioQueue 播放一个文件,但是当我想链接这两个时,我不知道该怎么做。
提前致谢
【问题讨论】:
【参考方案1】:请参阅下面我编写的代码(使用我在网上找到的参考资料)。我还没有彻底测试过。
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
AudioBufferList bufList;
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &bufList, sizeof(bufList), NULL, NULL, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer);
NSMutableData *currentSample = nil;
for(int i = 0; i < bufList.mNumberBuffers; i++)
if(i == 0)
currentSample = [NSMutableData dataWithBytes:bufList.mBuffers[i].mData length:bufList.mBuffers[i].mDataByteSize];
else
[currentSample appendBytes:bufList.mBuffers[i].mData length:bufList.mBuffers[i].mDataByteSize];
【讨论】:
以上是关于AVCaptureSession 和 AudioQueue的主要内容,如果未能解决你的问题,请参考以下文章
如何让 AVCaptureSession 和 AVPlayer 尊重 AVAudioSessionCategoryAmbient?
为啥使用 AVCaptureSession、AVAssetWriter 和 AVPlayer 录制和回放视频会卡顿?
如何在 AVCaptureSession 上设置音频采样率?