ScreenAudioCapturer
class ScreenAudioCapturer @RequiresPermission(value = "android.permission.RECORD_AUDIO"
A mixer for capturing screen share audio.
Requires a media projection, which can be obtained from the screen share track.
Additionally, for screen capture to work properly while your app is in the background, a foreground service with the type microphone
must be running. Otherwise, audio capture will not return any audio data.
Example usage:
suspend fun startScreenCapture(data: Intent) {
if (ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
return
}
// Publish the screen share video.
room.localParticipant.setScreenShareEnabled(true, data)
// Optionally disable the mic for screenshare audio only
// val javaAudioDeviceModule = (room.lkObjects.audioDeviceModule as? JavaAudioDeviceModule)
// javaAudioDeviceModule?.setAudioRecordEnabled(false)
// Publish the audio track.
room.localParticipant.setMicrophoneEnabled(true)
val screenCaptureTrack = room.localParticipant.getTrackPublication(Track.Source.SCREEN_SHARE)?.track as? LocalVideoTrack ?: return
val audioTrack = room.localParticipant.getTrackPublication(Track.Source.MICROPHONE)?.track as? LocalAudioTrack ?: return
// Start capturing the screen share audio.
val audioCapturer = ScreenAudioCapturer.createFromScreenShareTrack(screenCaptureTrack) ?: return
audioCapturer.gain = 0.1f // Lower the volume so that mic can still be heard clearly.
audioTrack.setAudioBufferCallback(audioCapturer)
}
suspend fun stopScreenCapture() {
(room.localParticipant.getTrackPublication(Track.Source.MICROPHONE)?.track as? LocalAudioTrack)
?.setAudioBufferCallback(null)
room.localParticipant.setMicrophoneEnabled(false)
room.localParticipant.setScreenShareEnabled(false)
// Remember to release when done capturing.
audioCapturer?.releaseAudioResources()
}
Content copied to clipboard
Constructors
Link copied to clipboard
constructor(mediaProjection: MediaProjection, captureConfigurator: AudioPlaybackCaptureConfigurator = DEFAULT_CONFIGURATOR)
Properties
Functions
Link copied to clipboard
Link copied to clipboard
open override fun onBufferRequest( originalBuffer: ByteBuffer, audioFormat: Int, channelCount: Int, sampleRate: Int, bytesRead: Int, captureTimeNs: Long): MixerAudioBufferCallback.BufferResponse?
Link copied to clipboard
Release any audio resources associated with this capturer. This is not managed by LiveKit, so you must call this function when finished to prevent memory leaks.