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

Posted

技术标签:

【中文标题】AVFoundation 添加音频输入使音频播放静音【英文标题】:AVFoundation adding audio input mutes audio playback 【发布时间】:2018-07-09 09:11:17 【问题描述】:

我有一个使用 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(...) 的调用,音频会继续播放,当我调用它时,音频播放会静音。

如何禁用该行为?

请注意,不能迁移到另一个音频 API。

【问题讨论】:

【参考方案1】:

听起来你的AVAudiosession 是不可混合的(我认为是默认值)。在设置 AVCaptureSession 之前尝试激活可混合音频会话:

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

【讨论】:

感谢您的提示,但它并没有解决问题。我在会话配置之前和之后尝试过。我也尝试过“AVAudioSessionCategoryRecord”(无播放),但也没有成功。 您可以尝试在AVCaptureSession 上设置automaticallyConfiguresApplicationAudioSession = false 吗?由于这个答案,我才刚刚发现这个标志:***.com/a/51673774/22147

以上是关于AVFoundation 添加音频输入使音频播放静音的主要内容,如果未能解决你的问题,请参考以下文章

用于音频测量的 Swift AVFoundation 计时信息

AVFoundation 如何循环播放一段特定时间的音频?

如何防止使用 AVFoundation 录制视频中断当前正在播放的任何全局音频(Swift)?

IOS开发中AVFoundation中AVAudioPlayer的使用

如何使用 AVFoundation 以正确的音高播放不同采样率的音频文件?

iOS 8 和 AVFoundation:如何调暗背景音频?