赞
踩
在 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的获取方式有点差异。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。