【典型问题】音频路由问题

此贴总结了一些常见的音频路由问题,欢迎各位开发者们在本帖中讨论和补充。

3个回复
H 回复于 2019-11-18 09:01

观众上麦后,语音路由从扬声器变为听筒

问题具体现象:直播模式,单主播场景下,调用了 SetDefaultAudioRouteToSpeakerPhone(true) 设置语音路由为扬声器,此时观众听主播的声音是正常从扬声器出来的。但是观众上麦后,主播和连麦观众听到彼此的声音都很小,调试发现音频路由变成了听筒,声音从听筒出来了。

原因分析:一般是因为用户未添加相关权限导致的,需要添加权限:

android.permission.MODIFY_AUDIO_SETTINGS
回复·0
H 回复于 2019-11-27 11:04

为什么蓝牙连不上?或者连上了没有走到蓝牙?

Android

有些蓝牙音箱只支持 A2DP, 如果不支持 SCO 的话,那么是无法用来进行 SDK 通话的。App 开发者可以通过 Android API AudioManmager.isBluetoothScoAvailableOffCall() 判断该机型是否支持 btsco,如果机型不支持,则 audio route 蓝牙切换会失败。

另外,请检查 App 是否有添加以下权限:

 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />

iOS

iOS 系统会自动为系统电话和 VoIP 通话选择音频路由,即使蓝牙设备已经连接,也不一定会走蓝牙:

系统电话(包括CallKit)

如果系统来电的时候,用户是在 iPhone 设备上按了接听键:来电默认走 iPhone 听筒;如果系统来电的时候,用户是在蓝牙设备上按了接听键:来电默认走蓝牙。

系统的默认行为可以设置,在 iPhone 的 “设置-通用-辅助功能-音频通话方式”,上述行为是默认的“自动”。如果设为“蓝牙耳机”,则来电的时候即使在手机接听,也默认走蓝牙耳机。

在系统电话过程中,用户可以通过通话界面的外放按钮自行切换 蓝牙/听筒/外放;

VoIP通话

在发起 VoIP 通话的时候,系统会自动选择音频路由为当前蓝牙设备连接后的最后一次系统电话或 VoIP 通话所使用的音频路由。如果蓝牙设备连接后没有进行过系统通话则使用蓝牙。

在 VoIP 通话过程中,用户可以通过系统控制中心(屏幕下方上滑)自主切换音频路由。程序则可以通过 setPreferredInput 接口切换路由。

其他设定

用户指定或者程序指定了蓝牙设备为输入或输出时,系统会自动把输出或输入也切到蓝牙。不支持输入输出在两个不同设备上。

无线蓝牙音箱的录音功能只有系统电话级的才可以使用 (系统电话/FaceTime/CallKit)。

回复·0
H 回复于 2020-01-03 03:02

接通电话电话,SDK会把电话音传走 ?

解决方案: SDK收到电话的时候 disableAudio(),电话结束时 enableAudio()

  • Android SDK 本身已经监听了电话事件,在 CALL_STATE_RINGINGCALL_STATE_OFFHOOK的时会自动 disableAudio()
  • 收到 TelephonyManager.CALL_STATE_IDLE 后, enableAudio().
  • iOS SDK 也有类似处理。

如果按照上述方法操作,没有起作用,请检查 App 是否截获了 PhoneStateListener 等电话事件。

回复·0
推荐阅读
作者信息
相关专栏
SDK 教程
167 文章
本专栏仅用于分享音视频相关的技术文章,与其他开发者和声网 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。