如何从REMOTE_SUBMIX中排除STREAM_SYSTEM

问题描述:

我正在编写一个应用程序,使用REMOTE_SUBMIX从设备记录音频。 根据该PAGE,据说如何从REMOTE_SUBMIX中排除STREAM_SYSTEM

某些流从远程次混音,包括STREAM_RING,STREAM_ALARM,和STREAM_NOTIFICATION排除。这些流将继续像往常一样在本地呈现。

现在我想排除STREAM_SYSTEM,但我找不到这个策略/策略是在AOSP源码或任何配置文件中定义的。

有没有人知道它的任何线索?非常感谢。

这是在audiopolicy服务代码中(除非您在使用基于参数框架的路由代码的英特尔设备上,然后它在配置文件中)。

我觉得你感兴趣的代码是在这里:

https://android.googlesource.com/platform/frameworks/av/+/android-8.0.0_r1/services/audiopolicy/enginedefault/src/Engine.cpp#477

audiopolicy以这种方式工作:首先,它发现“策略”使用Engine::getStrategyForStream功能流,然后进入Engine::getDeviceForStrategyInt挑该策略的设备。

似乎都STREAM_SYSTEMSTREAM_MUSIC使用相同的STRATEGY_MEDIA

https://android.googlesource.com/platform/frameworks/av/+/android-8.0.0_r1/services/audiopolicy/enginedefault/src/Engine.cpp#180

所以,你就必须改变的东西,如果你想排除系统的声音,但离开音乐播放远程子混音。

+0

真的很感谢你的回答。这接近我正在寻找的东西。当我发布这个问题时,我注意到了engine.cpp。你能指出我应该修改哪个配置文件吗?我看到RING和ALARM属于STRATEGY_SONIFICATION,而通知属于STRATEGY_SONIFICATION_RESPECTFUL。这两个不会在remote_submix中混合使用。我应该改变这个engine.cpp并将STREAM_SYSTEM移到STRATEGY_SONIFICATION? – Robin

+0

正如我所说的,它不在配置文件中,除非它是由英特尔制造的设备。是的,你可以从这个开始,看看它是否按照你期望的那样工作,以及它是否会破坏别的东西。不幸的是,很难说你的想法在尝试之前是否会起作用。 –

+0

我试图修改engine.cpp来更改策略,并替换目标板上的libaudiopolicyenginedefault.so。我看到了我添加的调试日志,但它仍不能解决问题。任何关于潜在原因的想法? – Robin