AVFoundation添加音频输入会使音频播放静音

时间:2018-07-09 09:11:17

标签: ios audio avfoundation avcapturesession

我有一个使用AVFoundation录制音频和视频的应用程序。我希望在我的应用程序中录制音频时继续从其他应用程序(或系统)播放音频,但是当将输入添加到会话中时,另一个应用程序中已经在播放的音频会被神奇地静音。

相应的代码如下:

// set up audio device
if(m_audioenabled) {
  print("Audio enabled")
  if self.m_audioDevice != nil {
    do {
      let audioinput = try AVCaptureDeviceInput(device: self.m_audioDevice!)
      if self.m_session.canAddInput(audioinput) {
        self.m_session.addInput(audioinput)
      }
    } catch _ {
      print("failed adding audio capture device as input to capture session")
    }
  }

  m_audioDataOutput = AVCaptureAudioDataOutput()
  m_audioDataOutput?.setSampleBufferDelegate(self, queue: self.m_captureSessionQueueAudio)
  if self.m_session.canAddOutput(m_audioDataOutput!){
    self.m_session.addOutput(m_audioDataOutput!)
  }
}

如果我注释掉对canAddInput(...)的调用,音频将继续播放,当我调用它时,音频播放将被静音。

如何禁用该行为?

请注意,无法迁移到另一个Audio-API。

1 个答案:

答案 0 :(得分:0)

像您的AVAudioSession之类的声音是无法混合的(我认为是默认值)。在设置AVCaptureSession之前,请尝试激活可混合的音频会话:

let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers])
try! session.setActive(true)