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-01-10 22:17:22 -0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2022-01-10 22:17:22 -0800
Commit
cf3e243dc7a00a800691b3d3d2ab915a6ab97143
cf3e243d
1 parent
a094bb8b
Data channel check (#38)
显示空白字符变更
内嵌
并排对比
正在显示
1 个修改的文件
包含
25 行增加
和
11 行删除
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
查看文件 @
cf3e243
...
...
@@ -312,38 +312,45 @@ internal constructor(
}
internal suspend fun sendData(dataPacket: LivekitModels.DataPacket) {
ensurePublisherConnected()
ensurePublisherConnected(
dataPacket.kind
)
val buf = DataChannel.Buffer(
ByteBuffer.wrap(dataPacket.toByteArray()),
true,
)
val channel = when (dataPacket.kind) {
LivekitModels.DataPacket.Kind.RELIABLE -> reliableDataChannel
LivekitModels.DataPacket.Kind.LOSSY -> lossyDataChannel
else -> null
} ?: throw TrackException.PublishException("channel not established for ${dataPacket.kind.name}")
val channel = dataChannelForKind(dataPacket.kind)
?: throw TrackException.PublishException("channel not established for ${dataPacket.kind.name}")
channel.send(buf)
}
private suspend fun ensurePublisherConnected() {
private suspend fun ensurePublisherConnected(
kind: LivekitModels.DataPacket.Kind
) {
if (!isSubscriberPrimary) {
return
}
if (this.publisher.peerConnection.isConnected()) {
return
if (!this::publisher.isInitialized) {
throw RoomException.ConnectException("Publisher is not connected!")
}
if (!publisher.peerConnection.isConnected() &&
publisher.peerConnection.iceConnectionState() != PeerConnection.IceConnectionState.CHECKING
) {
// start negotiation
this.negotiate()
this.negotiate();
}
val targetChannel = dataChannelForKind(kind) ?: throw IllegalArgumentException("Unknown data packet kind!")
if (targetChannel.state() == DataChannel.State.OPEN) {
return
}
// wait until publisher ICE connected
val endTime = SystemClock.elapsedRealtime() + MAX_ICE_CONNECT_TIMEOUT_MS;
while (SystemClock.elapsedRealtime() < endTime) {
if (this.publisher.peerConnection.isConnected()) {
if (this.publisher.peerConnection.isConnected()
&& targetChannel.state() == DataChannel.State.OPEN
) {
return
}
delay(50)
...
...
@@ -352,6 +359,13 @@ internal constructor(
throw ConnectException("could not establish publisher connection")
}
private fun dataChannelForKind(kind: LivekitModels.DataPacket.Kind) =
when (kind) {
LivekitModels.DataPacket.Kind.RELIABLE -> reliableDataChannel
LivekitModels.DataPacket.Kind.LOSSY -> lossyDataChannel
else -> null
}
private fun getPublisherOfferConstraints(): MediaConstraints {
return MediaConstraints().apply {
with(mandatory) {
...
...
请
注册
或
登录
后发表评论