davidliu
Committed by GitHub

Don't override client provide ice servers (#193)

... ... @@ -8,7 +8,18 @@ data class ConnectOptions(
/** Auto subscribe to room tracks upon connect, defaults to true */
val autoSubscribe: Boolean = true,
/**
* A user-provided list of ice servers. This will be merged into
* the ice servers in [rtcConfig] if it is also provided.
*/
val iceServers: List<PeerConnection.IceServer>? = null,
/**
* A user-provided RTCConfiguration to override options.
*
* Note: LiveKit requires [PeerConnection.SdpSemantics.UNIFIED_PLAN]
* and a mutable list should be provided for iceServers constructor.
* */
val rtcConfig: PeerConnection.RTCConfiguration? = null,
/**
* capture and publish audio track on connect, defaults to false
... ...
... ... @@ -173,9 +173,7 @@ internal constructor(
}
// update ICE servers before creating PeerConnection
val iceServers = if (connectOptions?.iceServers != null) {
connectOptions.iceServers
} else {
val iceServers = run {
val servers = mutableListOf<PeerConnection.IceServer>()
for (serverInfo in joinResponse.iceServersList) {
val username = serverInfo.username ?: ""
... ... @@ -197,10 +195,21 @@ internal constructor(
// Setup peer connections
val rtcConfig = connectOptions?.rtcConfig?.apply {
val mergedServers = this.iceServers.toMutableList()
iceServers.forEach { server ->
if (!mergedServers.contains(server)) {
mergedServers.add(server)
val mergedServers = this.iceServers
if (connectOptions.iceServers != null) {
connectOptions.iceServers.forEach { server ->
if (!mergedServers.contains(server)) {
mergedServers.add(server)
}
}
}
// Only use server-provided servers if user doesn't provide any.
if (mergedServers.isEmpty()) {
iceServers.forEach { server ->
if (!mergedServers.contains(server)) {
mergedServers.add(server)
}
}
}
}
... ...