Android audio设置投屏和喇叭双输出
2023-12-13 05:48:59
业务场景:
在 Android13 平台上,使用 USB 投屏工具scrcpy,投屏到电脑端时,声音被截到 电脑端播放,Android设备 端静音,在Android11及之前都是 在Android设备端正常播放。
分析:
scrcpy 支持 Android11以上版本的工具。投屏时有设置设备端AudioSource.REMOTE_SUBMIX属性,音频输出设备是?AUDIO_DEVICE_OUT_REMOTE_SUBMIX?
音频设备输出选择源码中在 Engine.cpp中
frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
case STRATEGY_MEDIA: {
DeviceVector devices2;
if (strategy != STRATEGY_SONIFICATION) {
// no sonification on remote submix (e.g. WFD)
sp<DeviceDescriptor> remoteSubmix;
if ((remoteSubmix = availableOutputDevices.getDevice(
AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0"),
AUDIO_FORMAT_DEFAULT)) != nullptr) {
devices2.add(remoteSubmix);
}
}
若项目需要投屏时喇叭也正常播放,需要修改此处为
case STRATEGY_MEDIA: {
DeviceVector devices2;
if (strategy != STRATEGY_SONIFICATION) {
// no sonification on remote submix (e.g. WFD)
sp<DeviceDescriptor> remoteSubmix;
if ((remoteSubmix = availableOutputDevices.getDevice(
AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0"),
AUDIO_FORMAT_DEFAULT)) != nullptr) {
//需要在这里添加 SPEAKER 输出设备
devices2 = availableOutputDevices.getDevicesFromTypes({
AUDIO_DEVICE_OUT_REMOTE_SUBMIX, AUDIO_DEVICE_OUT_SPEAKER});
}
}
至此,声音即可从电脑播放,Android设备喇叭本身也可正常播放。
注:
Android10 以下版本参考:
修改前:
frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
if(mAvailableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0")) != 0) {
device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
}
修改后:
if (mAvailableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX, String8("0")) != 0) {
device2 = availableOutputDeviceTypes & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
device2 |= (availableOutputDeviceTypes & AUDIO_DEVICE_OUT_WIRED_HEADPHONE);
device2 |= (availableOutputDeviceTypes & AUDIO_DEVICE_OUT_SPEAKER);
}
也就是说 device2的获取方式有点差异。
文章来源:https://blog.csdn.net/sdkdlwk/article/details/134961424
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!