首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureSession和AudioQueue

AVCaptureSession和AudioQueue
EN

Stack Overflow用户
提问于 2012-02-29 08:53:26
回答 1查看 705关注 0票数 2

我是目标C和iOS的新手,我需要你的帮助。我想把我的麦克风音频输入和重定向它直接在扬声器输出(不通过一个文件)。

我在这里:使用AVCaptureSession获取麦克风输入,使用AudioQueue尝试播放输出缓冲区。但我在网上找不到任何东西,似乎没人需要这样做。我是不是误解了什么?,我只想知道如何将我的CMsampleBufferRef转换成一个很好的can缓冲区,我的AudioQueue可以使用它来播放(所以,在AudioQueue中修改什么来链接到我的AVCaptureSession)。这是个好办法吗?我发现很多东西可以将输出缓冲区写入文件中,但是对于正在运行的事情,什么都不做,或者只是一些我还不能使用的简短解释。

请你用示例代码给我详细的解释,因为我是新手。现在,我可以使用我的AVCaptureSession (CMSampleBufferRef中有一些东西),我可以用我的AudioQueue播放一个文件,但是当我想链接这两个文件时,我想不出该怎么做。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2013-03-12 02:24:29

参见下面我编写的代码(使用我在网上找到的参考资料)。我还没做过彻底的测试。

代码语言:javascript
复制
-(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];
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9496064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档