davidliu
Committed by GitHub

Allow injection of PeerConnectionFactory.Options (#382)

* Allow injection of PeerConnectionFactory.Options

* Spotless
... ... @@ -24,6 +24,7 @@ import io.livekit.android.audio.AudioSwitchHandler
import io.livekit.android.audio.NoAudioHandler
import io.livekit.android.room.Room
import livekit.org.webrtc.EglBase
import livekit.org.webrtc.PeerConnectionFactory
import livekit.org.webrtc.VideoDecoderFactory
import livekit.org.webrtc.VideoEncoderFactory
import livekit.org.webrtc.audio.AudioDeviceModule
... ... @@ -63,6 +64,11 @@ data class LiveKitOverrides(
* with it to prevent memory leaks.
*/
val eglBase: EglBase? = null,
/**
* Override the options passed into the PeerConnectionFactory when building it.
*/
val peerConnectionFactoryOptions: PeerConnectionFactory.Options? = null,
)
/**
... ...
... ... @@ -54,4 +54,5 @@ internal object InjectionNames {
internal const val OVERRIDE_AUDIO_OUTPUT_TYPE = "override_audio_output_type"
internal const val OVERRIDE_DISABLE_COMMUNICATION_WORKAROUND = "override_disable_communication_workaround"
internal const val OVERRIDE_EGL_BASE = "override_egl_base"
internal const val OVERRIDE_PEER_CONNECTION_FACTORY_OPTIONS = "override_peer_connection_factory_options"
}
... ...
... ... @@ -62,6 +62,10 @@ internal class OverridesModule(private val overrides: LiveKitOverrides) {
fun audioOutputType() = overrides.audioOptions?.audioOutputType
@Provides
@Named(InjectionNames.OVERRIDE_PEER_CONNECTION_FACTORY_OPTIONS)
fun peerConnectionFactoryOptions() = overrides.peerConnectionFactoryOptions
@Provides
@Named(InjectionNames.OVERRIDE_DISABLE_COMMUNICATION_WORKAROUND)
fun disableCommunicationWorkAround() = overrides.audioOptions?.disableCommunicationModeWorkaround ?: false
... ...
... ... @@ -243,12 +243,19 @@ internal object RTCModule {
audioDeviceModule: AudioDeviceModule,
videoEncoderFactory: VideoEncoderFactory,
videoDecoderFactory: VideoDecoderFactory,
@Named(InjectionNames.OVERRIDE_PEER_CONNECTION_FACTORY_OPTIONS)
peerConnectionFactoryOptions: PeerConnectionFactory.Options?,
memoryManager: CloseableManager,
): PeerConnectionFactory {
return PeerConnectionFactory.builder()
.setAudioDeviceModule(audioDeviceModule)
.setVideoEncoderFactory(videoEncoderFactory)
.setVideoDecoderFactory(videoDecoderFactory)
.apply {
if (peerConnectionFactoryOptions != null) {
setOptions(peerConnectionFactoryOptions)
}
}
.createPeerConnectionFactory()
.apply { memoryManager.registerClosable { dispose() } }
}
... ...