【问题标题】:AVCaptureSession and AudioQueueAVCaptureSession 和 AudioQueue
【发布时间】:2012-02-29 08:53:26
【问题描述】:

我是 Objective-C 和 iOS 的新手,我需要你的帮助。我想获取我的麦克风音频输入并将其直接重定向到扬声器输出中(不通过文件)。

我在这里:使用 AVCaptureSession 获取我的麦克风输入并使用 AudioQueue 尝试播放输出缓冲区。但是我在互联网上找不到任何东西,似乎没有人需要这样做。我是不是误会了什么? 我只想知道如何将我的 CMsampleBufferRef 转换为我的 AudioQueue 可以用来播放的良好 pcmbuffer(以及在我的 AudioQueue 中修改什么以将其与我的 AVCaptureSession 链接)。这是好方法吗? 我发现了很多东西可以将输出缓冲区写入文件,但是为了即时执行某些操作,什么也没有,或者只是简短的解释,我还不能使用。

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

提前致谢

【问题讨论】:

    标签: objective-c audio avcapturesession audioqueue on-the-fly


    【解决方案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];
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2017-06-16
      • 2012-06-09
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      相关资源
      最近更新 更多