【问题标题】:AVAudioPlayer playing sound with very low volume when WebRTC audio call in progressAVAudioPlayer 在进行 WebRTC 音频通话时以非常低的音量播放声音
【发布时间】: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)
}

感谢您的帮助。

【问题讨论】:

  • 嗨,杰克,欢迎来到 Stackoverflow。是否可以发布您的函数调用的代码 sn-p,以便其他人可以帮助找出您的问题是什么?谢谢。
  • 添加代码sn-p
  • 我基本上也看到了这一点。它实际上不是很低的音量(至少对我来说),它通过接收器输出(电话耳机)路由声音播放(来自和 AVAudioPlayer)。我相信这与 webrtc 内部的语音处理 IO 单元有关

标签: ios swift webrtc avaudioplayer avaudiosession


【解决方案1】:

在播放音频之前,将模式更改为默认模式,也会失去对 aec、agc 的支持,

[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:&error];

播放结束后,将模式重置为语音聊天,

[[AVAudioSession sharedInstance] AVAudioSessionModeVoiceChat error:&error];

【讨论】:

  • 这是免提电话的问题,但使用蓝牙耳机时,混音电平正常。现在,如果我将模式设置为default,它可以解决扬声器问题,但在使用耳机时会变得一团糟。 :(
【解决方案2】:

当铃声关闭时,我遇到了类似的问题。可以吗

  1. 确保铃声没有关闭
  2. 确保当前输出端口是扬声器。

    [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
    

【讨论】:

  • 此问题在振铃器打开且输出覆盖端口设置为扬声器时仍然存在。
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多