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 播放声音剪辑,同时使用适用于 iosGoogleWebRTC 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 音频通话时以非常低的音量播放声音的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 使用数组对音频文件进行排队 - Swift

使用 AVAudioplayer 进行流式传输

将媒体源扩展 (MSE) 与 WebRTC 进行比较

为啥 AVAudioPlayer 没有响应?

AVPlayer 与 AVAudioPlayer

IOS技术分享| 在iOS WebRTC 中添加美颜滤镜