Android 上的系统音频流通过 Webrtc

2023-12-13

我正在尝试使用 Webrtc 在 Android 上构建屏幕共享应用程序。我可以使用 mediaprojection+webrtc 共享屏幕,但无法共享系统音频。 Mediaprojection 在 AudioPlaybackCaptureConfiguration 的帮助下添加了对从 API 29 (Android 10) 捕获系统音频的支持。但是当我将音频记录中的音频源分配给对等连接音轨时,应用程序崩溃了。

   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 = factory.createAudioSource(new MediaConstraints()); 

如何使用 AudioRecord 对象配置 webrtc 音轨?


我通过使用 WebRTC 框架解决了这个问题。让我解释一下它是如何工作的。在WebRTC堆栈中,音频记录运行在WebRTCAudioRecord.java。如果你想使用系统音频,你需要将媒体投影对象传输到WebRTCAudioRecord.java。下面是实现的例子:https://github.com/ant-media/WebRTCAndroidSDK/pull/1你可以检查一下。欢迎任何评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 上的系统音频流通过 Webrtc 的相关文章

随机推荐