安卓中多个应用程序间的麦克风音频输入共享
我在使用当前的应用程序时遇到了这个问题,在这个应用程序中,我希望同时在两个(可以是多个)应用程序之间共享麦克风音频。
我尝试通过AudioRecord类记录音频数据。
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC
, 44100, AudioFormat.CHANNEL_IN_STEREO
, AudioFormat.ENCODING_PCM_16BIT
,pcmBufferSize);
//for reading data
private ByteBuffer buffer = ByteBuffer.allocateDirect(BUFFER_SIZE); //define at class level
.
.
.
buffer.rewind();
audioRecord.read(buffer, buffer.remaining());问题是,当任何其他应用程序开始使用麦克风时,我们就会得到无声的数据包。
根据正式文件
Android 10 (API级别29)及更高级别的应用程序在运行过程中可以切换输入音频流。在大多数情况下,如果一个新的应用程序获得音频输入,以前的捕捉应用继续运行,但收到沉默。在某些情况下,系统可以继续向这两个应用程序提供音频。下面将解释各种共享场景。
但我已经看到许多应用程序共享音频输入没有任何问题。例如,对于缩放,当一个变焦呼叫正在进行时,我启动一个音频记录器,然后两个应用程序都会获得音频。
另一个例子是欧姆莱特拱廊,他们能够记录麦克风音频,即使麦克风访问其他应用程序。例如:假设我正在通过Omlet Arcade播放一些战斗王牌游戏,那么我的音频就可以被我的队友(在游戏中)听到,也可以被观看我的视频流的人听到。
因此,如果堆栈溢出社区能够引导我找到解决方案,这将是非常有帮助的。
发布于 2020-09-19 09:35:20
不确定您是否查看了您引用的文档的下面部分,但它在下一节中详细说明了为什么某些应用程序可以共享音频输入:
有四种主要的共享方案:
语音呼叫+普通应用程序: 如果
AudioManager.getMode()返回的音频模式是MODE_IN_CALL或MODE_IN_COMMUNICATION,则语音呼叫是活动的。 Android根据以下规则共享输入音频:
要捕获语音呼叫的上行链路(TX)、下行链路(RX)或两者,应用程序必须指定音频源MediaRecorder.AudioSource.VOICE_UPLINK或MediaRecorder.AudioSource.VOICE_DOWNLINK和/或设备AudioDeviceInfo.TYPE_TELEPHONY。
此外,它还指定了如何在Android 11中为录制的音频设置隐私敏感级别,例如将其设置为“不敏感”,允许将音频与其他应用程序共享。希望这有助于理解从哪里开始
https://stackoverflow.com/questions/63859616
复制相似问题