Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
livekitAndroidXuningTest
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
davidliu
2022-04-27 01:13:44 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2022-04-27 01:13:44 +0900
Commit
0711b10ff93cd130386f32999d29880cc5c2cf9b
0711b10f
1 parent
1a053234
reconnect upon publisher failure (#77)
显示空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
52 行增加
和
14 行删除
livekit-android-sdk/src/main/java/io/livekit/android/room/PublisherTransportObserver.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/SubscriberTransportObserver.kt
livekit-android-sdk/src/test/java/io/livekit/android/mock/MockPeerConnection.kt
livekit-android-sdk/src/test/java/io/livekit/android/room/RTCEngineMockE2ETest.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/PublisherTransportObserver.kt
查看文件 @
0711b10
...
...
@@ -12,7 +12,7 @@ class PublisherTransportObserver(
private val client: SignalClient,
) : PeerConnection.Observer, PeerConnectionTransport.Listener {
var connectionChangeListener: ((newState: PeerConnection.PeerConnectionState
?
) -> Unit)? = null
var connectionChangeListener: ((newState: PeerConnection.PeerConnectionState) -> Unit)? = null
override fun onIceCandidate(iceCandidate: IceCandidate?) {
val candidate = iceCandidate ?: return
...
...
@@ -35,7 +35,7 @@ class PublisherTransportObserver(
override fun onStandardizedIceConnectionChange(newState: PeerConnection.IceConnectionState?) {
}
override fun onConnectionChange(newState: PeerConnection.PeerConnectionState
?
) {
override fun onConnectionChange(newState: PeerConnection.PeerConnectionState) {
LKLog.v { "onConnection new state: $newState" }
connectionChangeListener?.invoke(newState)
}
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
查看文件 @
0711b10
...
...
@@ -210,13 +210,11 @@ internal constructor(
null,
)
val connectionStateListener: (PeerConnection.PeerConnectionState?) -> Unit = { newState ->
val state =
newState ?: throw NullPointerException("unexpected null new state, what do?")
val connectionStateListener: (PeerConnection.PeerConnectionState) -> Unit = { newState ->
LKLog.v { "onIceConnection new state: $newState" }
if (
s
tate.isConnected()) {
if (
newS
tate.isConnected()) {
connectionState = ConnectionState.CONNECTED
} else if (
s
tate.isDisconnected()) {
} else if (
newS
tate.isDisconnected()) {
connectionState = ConnectionState.DISCONNECTED
}
}
...
...
@@ -233,6 +231,12 @@ internal constructor(
}
subscriberObserver.connectionChangeListener = connectionStateListener
// Also reconnect on publisher disconnect
publisherObserver.connectionChangeListener = { newState ->
if (newState.isDisconnected()) {
reconnect()
}
}
} else {
publisherObserver.connectionChangeListener = connectionStateListener
}
...
...
@@ -387,6 +391,16 @@ internal constructor(
}
// wait until ICE connected
val endTime = SystemClock.elapsedRealtime() + MAX_ICE_CONNECT_TIMEOUT_MS
if (hasPublished) {
while (SystemClock.elapsedRealtime() < endTime) {
if (publisher.peerConnection.connectionState().isConnected()) {
LKLog.v { "publisher reconnected to ICE" }
break
}
delay(100)
}
}
while (SystemClock.elapsedRealtime() < endTime) {
if (connectionState == ConnectionState.CONNECTED) {
LKLog.v { "reconnected to ICE" }
...
...
@@ -395,7 +409,9 @@ internal constructor(
delay(100)
}
if (connectionState == ConnectionState.CONNECTED) {
if (connectionState == ConnectionState.CONNECTED &&
(!hasPublished || publisher.peerConnection.connectionState().isConnected())
) {
client.onPCConnected()
listener?.onPostReconnect(isFullReconnect)
return@launch
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/SubscriberTransportObserver.kt
查看文件 @
0711b10
...
...
@@ -13,7 +13,7 @@ class SubscriberTransportObserver(
) : PeerConnection.Observer {
var dataChannelListener: ((DataChannel) -> Unit)? = null
var connectionChangeListener: ((PeerConnection.PeerConnectionState
?
) -> Unit)? = null
var connectionChangeListener: ((PeerConnection.PeerConnectionState) -> Unit)? = null
override fun onIceCandidate(candidate: IceCandidate) {
LKLog.v { "onIceCandidate: $candidate" }
...
...
@@ -41,7 +41,7 @@ class SubscriberTransportObserver(
override fun onStandardizedIceConnectionChange(newState: PeerConnection.IceConnectionState?) {
}
override fun onConnectionChange(newState: PeerConnection.PeerConnectionState
?
) {
override fun onConnectionChange(newState: PeerConnection.PeerConnectionState) {
LKLog.v { "onConnectionChange new state: $newState" }
connectionChangeListener?.invoke(newState)
}
...
...
livekit-android-sdk/src/test/java/io/livekit/android/mock/MockPeerConnection.kt
查看文件 @
0711b10
...
...
@@ -223,9 +223,7 @@ class MockPeerConnection(
}
}
override fun connectionState(): PeerConnectionState {
return super.connectionState()
}
override fun connectionState(): PeerConnectionState = connectionState
override fun iceGatheringState(): IceGatheringState {
return super.iceGatheringState()
...
...
livekit-android-sdk/src/test/java/io/livekit/android/room/RTCEngineMockE2ETest.kt
查看文件 @
0711b10
...
...
@@ -2,7 +2,6 @@ package io.livekit.android.room
import io.livekit.android.MockE2ETest
import io.livekit.android.mock.MockPeerConnection
import io.livekit.android.mock.MockWebSocket
import io.livekit.android.util.toOkioByteString
import io.livekit.android.util.toPBByteString
import kotlinx.coroutines.ExperimentalCoroutinesApi
...
...
@@ -12,6 +11,7 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.webrtc.PeerConnection
@ExperimentalCoroutinesApi
...
...
@@ -57,6 +57,30 @@ class RTCEngineMockE2ETest : MockE2ETest() {
}
@Test
fun reconnectOnSubscriberFailure() = runTest {
connect()
val oldWs = wsFactory.ws
val subPeerConnection = rtcEngine.subscriber.peerConnection as MockPeerConnection
subPeerConnection.moveToIceConnectionState(PeerConnection.IceConnectionState.FAILED)
val newWs = wsFactory.ws
Assert.assertNotEquals(oldWs, newWs)
}
@Test
fun reconnectOnPublisherFailure() = runTest {
connect()
val oldWs = wsFactory.ws
val pubPeerConnection = rtcEngine.publisher.peerConnection as MockPeerConnection
pubPeerConnection.moveToIceConnectionState(PeerConnection.IceConnectionState.FAILED)
val newWs = wsFactory.ws
Assert.assertNotEquals(oldWs, newWs)
}
@Test
fun refreshToken() = runTest {
connect()
...
...
请
注册
或
登录
后发表评论