我正在尝试使用Webrtc在Android上构建一个屏幕共享应用程序。我能够使用mediaprojection+webrtc共享屏幕,但无法共享系统音频。Mediaprojection在AudioPlaybackCaptureConfiguration的帮助下增加了从API 29 (Android 10)捕获系统音频的支持。但是当我将音频源从音频记录分配到peerconnection audiotrack时,应用程序崩溃了。
MediaProjectionManager mediaProjectionManager =
(MediaProjectionManager) mContext.getApplicationContext().getSystemService(
Context.MEDIA_PROJECTION_SERVICE);
MediaProjection sMediaProjection =
mediaProjectionManager.getMediaProjection(
MPResultCode,
MPData
);
AudioPlaybackCaptureConfiguration config = new AudioPlaybackCaptureConfiguration.Builder(sMediaProjection)
.addMatchingUsage(AudioAttributes.USAGE_MEDIA)
.build();
AudioFormat audioFormat = new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(8000)
.setChannelMask(AudioFormat.CHANNEL_IN_MONO)
.build();
AudioRecord audioRecord = new AudioRecord.Builder()
.setAudioFormat(audioFormat)
.setBufferSizeInBytes(BUFFER_SIZE_IN_BYTES)
.setAudioPlaybackCaptureConfig(config)
.build();
AudioSource audioSource = new AudioSource(audioRecord.getAudioSource());
AudioTrack localAudioTrack = factory.createAudioTrack("AudioTrack", audioSource1);
localAudioTrack.setEnabled(true);
mLocalMediaStream.addTrack(localAudioTrack);
流式麦克风音频工作正常,如果我配置audiosource如下
AudioSource audioSource = factory.createAudioSource(new MediaConstraints());
如何配置使用AudioRecord对象的webrtc音轨?
我通过使用WebRTC框架解决了这个问题。让我来解释一下它是如何工作的。在WebRTC堆栈中,在WebRTCAudioRecord.java
上运行的音频记录。如果您想使用系统音频,您需要将媒体投影对象传输到WebRTCAudioRecord.java
。下面是实现的示例:https://github.com/ant-media/WebRTCAndroidSDK/pull/1您可以查看它。欢迎发表任何意见。