正在显示
3 个修改的文件
包含
16 行增加
和
16 行删除
| @@ -3,7 +3,12 @@ package io.livekit.android.room | @@ -3,7 +3,12 @@ package io.livekit.android.room | ||
| 3 | import dagger.assisted.Assisted | 3 | import dagger.assisted.Assisted |
| 4 | import dagger.assisted.AssistedFactory | 4 | import dagger.assisted.AssistedFactory |
| 5 | import dagger.assisted.AssistedInject | 5 | import dagger.assisted.AssistedInject |
| 6 | -import org.webrtc.* | 6 | +import io.livekit.android.room.util.CoroutineSdpObserver |
| 7 | +import io.livekit.android.util.Either | ||
| 8 | +import org.webrtc.IceCandidate | ||
| 9 | +import org.webrtc.PeerConnection | ||
| 10 | +import org.webrtc.PeerConnectionFactory | ||
| 11 | +import org.webrtc.SessionDescription | ||
| 7 | 12 | ||
| 8 | /** | 13 | /** |
| 9 | * @suppress | 14 | * @suppress |
| @@ -30,25 +35,20 @@ constructor( | @@ -30,25 +35,20 @@ constructor( | ||
| 30 | } | 35 | } |
| 31 | } | 36 | } |
| 32 | 37 | ||
| 33 | - fun setRemoteDescription(sd: SessionDescription) { | ||
| 34 | - peerConnection.setRemoteDescription(object : SdpObserver { | ||
| 35 | - override fun onCreateSuccess(p0: SessionDescription?) { | ||
| 36 | - } | 38 | + suspend fun setRemoteDescription(sd: SessionDescription): Either<Unit, String?> { |
| 37 | 39 | ||
| 40 | + val observer = object : CoroutineSdpObserver() { | ||
| 38 | override fun onSetSuccess() { | 41 | override fun onSetSuccess() { |
| 39 | pendingCandidates.forEach { pending -> | 42 | pendingCandidates.forEach { pending -> |
| 40 | peerConnection.addIceCandidate(pending) | 43 | peerConnection.addIceCandidate(pending) |
| 41 | } | 44 | } |
| 42 | pendingCandidates.clear() | 45 | pendingCandidates.clear() |
| 46 | + super.onSetSuccess() | ||
| 43 | } | 47 | } |
| 44 | - | ||
| 45 | - override fun onCreateFailure(p0: String?) { | ||
| 46 | - } | ||
| 47 | - | ||
| 48 | - override fun onSetFailure(p0: String?) { | ||
| 49 | - } | ||
| 50 | - | ||
| 51 | - }, sd) | 48 | + } |
| 49 | + | ||
| 50 | + peerConnection.setRemoteDescription(observer, sd) | ||
| 51 | + return observer.awaitSet() | ||
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | fun close() { | 54 | fun close() { |
| @@ -190,7 +190,7 @@ constructor( | @@ -190,7 +190,7 @@ constructor( | ||
| 190 | Timber.v { "received server answer: ${sessionDescription.type}, ${publisher.peerConnection.signalingState()}" } | 190 | Timber.v { "received server answer: ${sessionDescription.type}, ${publisher.peerConnection.signalingState()}" } |
| 191 | coroutineScope.launch { | 191 | coroutineScope.launch { |
| 192 | Timber.i { sessionDescription.toString() } | 192 | Timber.i { sessionDescription.toString() } |
| 193 | - when (val outcome = publisher.peerConnection.setRemoteDescription(sessionDescription)) { | 193 | + when (val outcome = publisher.setRemoteDescription(sessionDescription)) { |
| 194 | is Either.Left -> { | 194 | is Either.Left -> { |
| 195 | if (!rtcConnected) { | 195 | if (!rtcConnected) { |
| 196 | onRTCConnected() | 196 | onRTCConnected() |
| @@ -208,7 +208,7 @@ constructor( | @@ -208,7 +208,7 @@ constructor( | ||
| 208 | coroutineScope.launch { | 208 | coroutineScope.launch { |
| 209 | run<Unit> { | 209 | run<Unit> { |
| 210 | when (val outcome = | 210 | when (val outcome = |
| 211 | - subscriber.peerConnection.setRemoteDescription(sessionDescription)) { | 211 | + subscriber.setRemoteDescription(sessionDescription)) { |
| 212 | is Either.Right -> { | 212 | is Either.Right -> { |
| 213 | Timber.e { "error setting remote description for answer: ${outcome.value} " } | 213 | Timber.e { "error setting remote description for answer: ${outcome.value} " } |
| 214 | return@launch | 214 | return@launch |
| @@ -9,7 +9,7 @@ import kotlin.coroutines.Continuation | @@ -9,7 +9,7 @@ import kotlin.coroutines.Continuation | ||
| 9 | import kotlin.coroutines.resume | 9 | import kotlin.coroutines.resume |
| 10 | import kotlin.coroutines.suspendCoroutine | 10 | import kotlin.coroutines.suspendCoroutine |
| 11 | 11 | ||
| 12 | -class CoroutineSdpObserver : SdpObserver { | 12 | +open class CoroutineSdpObserver : SdpObserver { |
| 13 | private var createOutcome: Either<SessionDescription, String?>? = null | 13 | private var createOutcome: Either<SessionDescription, String?>? = null |
| 14 | set(value) { | 14 | set(value) { |
| 15 | field = value | 15 | field = value |
-
请 注册 或 登录 后发表评论