Android 9.0实现系统内录(只录制系统声音)

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 这种模式录制音频时我们就能听到手机播放音视频等的声音了。

你可能感兴趣的:(Android)