AVAudioSession模式切换的音量差异

5

我正在尝试将媒体播放与VoIP功能(通过Twilio)结合在iOS 9和8上。

当音频流在后台播放时,我连接或断开语音会议,这会导致音量从值X跳到值Y。可以听到这种跳跃,并通过[AVAudioSession sharedInstance].outputVolume值的变化进行观察。

我想防止这种跳跃,并保持音量恒定,除非用户手动决定更改它。

进一步调查显示,当AVAudioSession的类别设置为AVAudioSessionCategoryPlayAndRecord时,在模式之间切换
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:&error]

[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeVoiceChat error:&error]
会导致应用程序在两个完全独立的音量范围内运行。
即有一个用于“默认”模式的音量,以及一个与之完全无关的用于“语音聊天”模式的音量。

AVAudioSession的文档似乎没有提到与模式/类别切换相关的音量问题,我在互联网上找不到任何相关信息...

感激任何帮助。

2个回答

1

当设置播放和录制类别时,将AVAudioSessionCategoryOptionDefaultToSpeaker作为选项传递:

[[AVAudioSession sharedInstance] AVAudioSessionCategoryPlayAndRecord withOptions: AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];

这将覆盖默认的播放和录制行为,从扬声器切换到更安静的接收器。原因是play-and-record是为电话设计的,您会将电话放在耳朵上,并且可能不希望听到过于响亮的声音而导致听力受损。


这可以解释音量差异,但我能以某种方式强制它保持恒定吗?假设我一开始就处于PlayAndRecord模式,并且在输出始终是耳机的情况下,我从ModeDefault切换到ModeVoiceChat。 - eladr

1

Twilio的Megan在这里。

我对iOS SDK不是很熟悉,但您应该能够从TCDevice参数incomingSoundEnabledoutgoingSoundEnableddisconnectSoundEnabled控制连接音频,文档在此处记录

否则,我建议查看Twilio SDK调用的AVAudioSession的sharedInstance属性,如此帖子中所示

setCategory:error:

setActive:error:

overrideOutputAudioPort:error:

请告诉我这是否有所帮助。


Megan,谢谢你,但这不是我要找的。incomingSoundEnabled/outgoingSoundEnabled只是开关提示音属性。在我的情况下,当Twilio连接时,整个会话的音量会改变,并保持这样直到Twilio断开连接。我认为这种行为并不特定于Twilio。我可以通过调用AVAudioSession上的“setMode”来简单地复制这种双重音量情况。我希望了解背后的原因以及如何在使用“setMode”时保持音量恒定。 - eladr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接