David Liu

Use PeerConnectionTransport setRemoteDescription

... ... @@ -3,7 +3,12 @@ package io.livekit.android.room
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import org.webrtc.*
import io.livekit.android.room.util.CoroutineSdpObserver
import io.livekit.android.util.Either
import org.webrtc.IceCandidate
import org.webrtc.PeerConnection
import org.webrtc.PeerConnectionFactory
import org.webrtc.SessionDescription
/**
* @suppress
... ... @@ -30,25 +35,20 @@ constructor(
}
}
fun setRemoteDescription(sd: SessionDescription) {
peerConnection.setRemoteDescription(object : SdpObserver {
override fun onCreateSuccess(p0: SessionDescription?) {
}
suspend fun setRemoteDescription(sd: SessionDescription): Either<Unit, String?> {
val observer = object : CoroutineSdpObserver() {
override fun onSetSuccess() {
pendingCandidates.forEach { pending ->
peerConnection.addIceCandidate(pending)
}
pendingCandidates.clear()
super.onSetSuccess()
}
override fun onCreateFailure(p0: String?) {
}
override fun onSetFailure(p0: String?) {
}
}, sd)
peerConnection.setRemoteDescription(observer, sd)
return observer.awaitSet()
}
fun close() {
... ...
... ... @@ -190,7 +190,7 @@ constructor(
Timber.v { "received server answer: ${sessionDescription.type}, ${publisher.peerConnection.signalingState()}" }
coroutineScope.launch {
Timber.i { sessionDescription.toString() }
when (val outcome = publisher.peerConnection.setRemoteDescription(sessionDescription)) {
when (val outcome = publisher.setRemoteDescription(sessionDescription)) {
is Either.Left -> {
if (!rtcConnected) {
onRTCConnected()
... ... @@ -208,7 +208,7 @@ constructor(
coroutineScope.launch {
run<Unit> {
when (val outcome =
subscriber.peerConnection.setRemoteDescription(sessionDescription)) {
subscriber.setRemoteDescription(sessionDescription)) {
is Either.Right -> {
Timber.e { "error setting remote description for answer: ${outcome.value} " }
return@launch
... ...
... ... @@ -9,7 +9,7 @@ import kotlin.coroutines.Continuation
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
class CoroutineSdpObserver : SdpObserver {
open class CoroutineSdpObserver : SdpObserver {
private var createOutcome: Either<SessionDescription, String?>? = null
set(value) {
field = value
... ...