AVAudioPlayer 在进行 WebRTC 音频通话时以非常低的音量播放声音
Posted
技术标签:
【中文标题】AVAudioPlayer 在进行 WebRTC 音频通话时以非常低的音量播放声音【英文标题】:AVAudioPlayer playing sound with very low volume when WebRTC audio call in progress 【发布时间】:2019-03-22 01:06:17 【问题描述】:我正在尝试使用 AVAudioPlayer
播放声音剪辑,同时使用适用于 ios 的 GoogleWebRTC
Obj-C 库拥有活动的 PeerConnection
。
当我播放声音时,我可以通过扬声器听到它,但与 WebRTC 音频输出相比,它以极低(几乎听不见)的音量播放。
我已将 AVAudioSession 设置为 active = true
并具有以下内容; AVAudioSession.Category = .playAndRecord
, AVAudioSession.CategoryOptions = [.defaultToSpeaker, .allowBluetooth, .mixWithOthers]
, AVAudioSession.Mode = .voiceChat
.
当没有主动配置的 WebRTC 音频连接时,我可以轻松播放和听到声音。
有没有办法让声音从AVAudioPlayer
播放而不会通过 WebRTC 降低音量?
do
try setActiveAudio()
let player = try AVAudioPlayer(data: asset.data, fileTypeHint: AVFileType.mp3.rawValue)
activePlayers.append(player)
player.delegate = self
player.prepareToPlay()
player.play()
catch let error
print(error.localizedDescription)
感谢您的帮助。
【问题讨论】:
嗨,杰克,欢迎来到 ***。是否可以发布您的函数调用的代码 sn-p,以便其他人可以帮助找出您的问题是什么?谢谢。 添加代码sn-p 我基本上也看到了这一点。它实际上不是很低的音量(至少对我来说),它通过接收器输出(电话耳机)路由声音播放(来自和 AVAudioPlayer)。我相信这与 webrtc 内部的语音处理 IO 单元有关 【参考方案1】:在播放音频之前,将模式更改为默认模式,也会失去对 aec、agc 的支持,
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:&error];
播放结束后,将模式重置为语音聊天,
[[AVAudioSession sharedInstance] AVAudioSessionModeVoiceChat error:&error];
【讨论】:
这是免提电话的问题,但使用蓝牙耳机时,混音电平正常。现在,如果我将模式设置为default
,它可以解决扬声器问题,但在使用耳机时会变得一团糟。 :(【参考方案2】:
当铃声关闭时,我遇到了类似的问题。可以吗
-
确保铃声没有关闭
确保当前输出端口是扬声器。
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
【讨论】:
此问题在振铃器打开且输出覆盖端口设置为扬声器时仍然存在。以上是关于AVAudioPlayer 在进行 WebRTC 音频通话时以非常低的音量播放声音的主要内容,如果未能解决你的问题,请参考以下文章