如何将WebRTC远程参与者音频路由为安卓直播应用可识别的内部音频?
如何将WebRTC通话中远程参与者的音频路由为Streamlabs或同类直播应用可识别的内部音频?
我开发的一款基于Google WebRTC库实现音视频聊天功能的游戏,希望引导玩家直接通过安卓设备将投屏内容推流至YouTube和Twitch,测试后发现Streamlabs应用适配效果较好。
玩家可通过Streamlabs应用观看游戏并将应用画面及声音推流至Twitch/YouTube。Streamlabs支持从内部音频和麦克风两个通道拾取音频,且可分别调节音量。游戏内的点击音效、背景音乐等环境音可被识别为内部音频,效果良好。但通过安卓AudioManager路由的远程参与者WebRTC音频会被导向扬声器,再由手机麦克风拾取后传入Streamlabs,虽能实现功能,但体验不佳。
该方案存在诸多问题:
- 主播需始终开启麦克风(即便不说话)
- 必须处于安静环境
- 音频音质会明显损耗
是否存在方法可将WebRTC音频路由为Streamlabs可识别的内部音频?
注:此问题在安卓平台所有WebRTC/VOIP通话/会议类应用中普遍存在,可通过WhatsApp通话、Facebook Messenger通话等应用复现,使用YouTube或Twitch应用替代Streamlabs也会得到类似结果。
我尝试过调整安卓AudioManager的不同设置(如使用USAGE_MEDIA替代USAGE_VOICE_COMMUNICATION,将音频模式设置为NORMAL替代MODE_IN_COMMUNICATION等),但均无效。推测直播应用(如Streamlabs)在音频到达AudioManager之前就已获取内部音频,可能是在安卓MediaPlayer层级进行抓取。
若能将远程WebRTC参与者的音频路由为可被Streamlabs识别为内部音频的形式,即可避免音频从扬声器到麦克风的空气传播路径,减少音质损耗及环境音干扰,这将是理想的解决方案。
必要时我可自行修改Google WebRTC源码(我本身就是自行构建该库的)。
内容的提问来源于stack exchange,提问作者Mike Keskinov

