首页 文章

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

提问于
浏览
1

我有一个使用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

    听起来你的 AVAudioSession 是不可混合的(默认情况下,我认为) . 在设置 AVCaptureSession 之前尝试激活可混合音频会话:

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

相关问题