【问题标题】:How to play audio received in didOutputSampleBuffer:?如何播放在 didOutputSampleBuffer: 中接收到的音频?
【发布时间】:2012-11-06 12:39:52
【问题描述】:

我正在开发与会议相关的应用程序,我首先使用 CaptureSession 捕获音频,现在我想动态播放音频数据而不保存到文件中。我试过AVQueue 似乎CaptureSessionAVQueue 在我开始排队时不会一起工作它会停止捕获,所以我现在该怎么做才能播放通过CaptureSession 捕获的音频?

感谢您的帮助

【问题讨论】:

    标签: iphone ios cocoa-touch avcapturesession avqueueplayer


    【解决方案1】:

    您需要将convert 您的audioData 转换为NSData

    - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer: (CMSampleBufferRef)sampleBuffer
       fromConnection:(AVCaptureConnection *)connection {
    
      NSData *audioData = yourFunction here to convert//[self audioFromSampleBuffer:sampleBuffer];
      dispatch_async(dispatch_get_main_queue(), ^{
        NSError *e;
        AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:data error:&e];
        NSLog(@"%@",[e description]);
        [player setDelegate:self];
        [player play];
      }
    }
    

    编辑:参考Recording_Audio_on_an_iPhone_with_AVAudioRecorder链接。

    【讨论】:

    • 嗨王子,你试过这个方法吗?工作了吗?您能告诉我您将 sampleBuffer 转换为 NSData 的方式吗?
    • 他们正在使用文件播放的链接,但我想在收到原始数据时播放它。
    【解决方案2】:

    我已经使用 AudioUnit 方法解决了这个问题,注意:当我们使用 AudioUnit 处理在 AVCapturesession 中捕获的音频数据时,我们需要确保 AudioUnit 没有尝试访问捕获设备(在我的例子中是麦克风),这就是它停止的原因捕获回调。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2012-03-14
      相关资源
      最近更新 更多