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 录制视频中断当前正在播放的任何全局音频(Swift)?
IOS开发中AVFoundation中AVAudioPlayer的使用