Android中可以通过使用MediaRecorder.AudioSource.REMOTE_SUBMIX来实现系统声音的录制,这个属性只有系统应用能够使用,而且这个属性会截掉耳机和扬声器的声音,让我们听不到手机中播放音乐或者视频时的声音,而录制结束后会发现播放录制好的文件是有这些声音的。这显然不是我们想要的效果,这个时候我们可以通过修改底层C++代码来打开。这个方法仅使用于系统定制开发,三方APP就没有办法了。
源码文件路径:
frameworks\av\services\audiopolicy\enginedefault\src\Engine.cpp
在Engine.cpp中找到:
if (strategy != STRATEGY_SONIFICATION) {
// no sonification on remote submix (e.g. WFD)
if (availableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX,
String8("0")) != 0) {
device2 = availableOutputDevices.types() & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
}
}
改为:
if (strategy != STRATEGY_SONIFICATION) {
// no sonification on remote submix (e.g. WFD)
if (availableOutputDevices.getDevice(AUDIO_DEVICE_OUT_REMOTE_SUBMIX,
String8("0")) != 0) {
device2 = availableOutputDevices.types() & AUDIO_DEVICE_OUT_REMOTE_SUBMIX;
device2 |= (availableOutputDevices.types() & AUDIO_DEVICE_OUT_WIRED_HEADPHONE);
device2 |= (availableOutputDevices.types() & AUDIO_DEVICE_OUT_SPEAKER);
}
}
这样,在使用 REMOTE_SUBMIX 这种模式录制音频时我们就能听到手机播放音视频等的声音了。