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
David Liu
2021-09-29 11:02:12 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
4bab75591543ca2e732e5a3c9971c87c5764778c
4bab7559
1 parent
a995402a
Protocol 3 speaker changes
显示空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
63 行增加
和
12 行删除
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/Room.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/SignalClient.kt
livekit-android-sdk/src/main/java/io/livekit/android/room/RTCEngine.kt
查看文件 @
4bab755
...
...
@@ -176,7 +176,8 @@ constructor(
fun onIceReconnected()
fun onAddTrack(track: MediaStreamTrack, streams: Array<out MediaStream>)
fun onUpdateParticipants(updates: List<LivekitModels.ParticipantInfo>)
fun onUpdateSpeakers(speakers: List<LivekitModels.SpeakerInfo>)
fun onActiveSpeakersUpdate(speakers: List<LivekitModels.SpeakerInfo>)
fun onSpeakersChanged(speakers: List<LivekitModels.SpeakerInfo>)
fun onDisconnect(reason: String)
fun onFailToConnect(error: Exception)
fun onUserPacket(packet: LivekitModels.UserPacket, kind: LivekitModels.DataPacket.Kind)
...
...
@@ -195,7 +196,7 @@ constructor(
}
}
//----------------------------------
RTC
Client.Listener --------------------------------------//
//----------------------------------
Signal
Client.Listener --------------------------------------//
override fun onJoin(info: LivekitRtc.JoinResponse) {
val iceServers = mutableListOf<PeerConnection.IceServer>()
...
...
@@ -369,8 +370,8 @@ constructor(
listener?.onUpdateParticipants(updates)
}
override fun onActiveSpeakersChanged(speakers: List<LivekitModels.SpeakerInfo>) {
listener?.onUpdateSpeakers(speakers)
override fun onSpeakersChanged(speakers: List<LivekitModels.SpeakerInfo>) {
listener?.onSpeakersChanged(speakers)
}
override fun onClose(reason: String, code: Int) {
...
...
@@ -403,7 +404,7 @@ constructor(
val dp = LivekitModels.DataPacket.parseFrom(buffer.data)
when (dp.valueCase) {
LivekitModels.DataPacket.ValueCase.SPEAKER -> {
listener?.on
UpdateSpeakers
(dp.speaker.speakersList)
listener?.on
ActiveSpeakersUpdate
(dp.speaker.speakersList)
}
LivekitModels.DataPacket.ValueCase.USER -> {
listener?.onUserPacket(dp.user, dp.kind)
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/Room.kt
查看文件 @
4bab755
...
...
@@ -110,7 +110,7 @@ constructor(
return participant
}
private fun handle
Speaker
Update(speakerInfos: List<LivekitModels.SpeakerInfo>) {
private fun handle
ActiveSpeakers
Update(speakerInfos: List<LivekitModels.SpeakerInfo>) {
val speakers = mutableListOf<Participant>()
val seenSids = mutableSetOf<String>()
val localParticipant = localParticipant
...
...
@@ -148,6 +148,37 @@ constructor(
listener?.onActiveSpeakersChanged(speakers, this)
}
private fun handleSpeakersChanged(speakerInfos: List<LivekitModels.SpeakerInfo>) {
val updatedSpeakers = mutableMapOf<String, Participant>()
activeSpeakers.forEach {
updatedSpeakers[it.sid] = it
}
speakerInfos.forEach { speaker ->
val participant = if(speaker.sid == localParticipant.sid) {
localParticipant
} else {
remoteParticipants[speaker.sid]
} ?: return@forEach
participant.audioLevel = speaker.level
participant.isSpeaking = speaker.active
if(speaker.active) {
updatedSpeakers[speaker.sid] = participant
} else {
updatedSpeakers.remove(speaker.sid)
}
}
val updatedSpeakersList = updatedSpeakers.values.toList()
.sortedBy { it.audioLevel }
mutableActiveSpeakers.clear()
mutableActiveSpeakers.addAll(updatedSpeakersList)
listener?.onActiveSpeakersChanged(updatedSpeakersList, this)
}
private fun reconnect() {
if (state == State.RECONNECTING) {
return
...
...
@@ -290,8 +321,15 @@ constructor(
/**
* @suppress
*/
override fun onUpdateSpeakers(speakers: List<LivekitModels.SpeakerInfo>) {
handleSpeakerUpdate(speakers)
override fun onActiveSpeakersUpdate(speakers: List<LivekitModels.SpeakerInfo>) {
handleActiveSpeakersUpdate(speakers)
}
/**
* @suppress
*/
override fun onSpeakersChanged(speakers: List<LivekitModels.SpeakerInfo>) {
handleSpeakersChanged(speakers)
}
/**
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/SignalClient.kt
查看文件 @
4bab755
...
...
@@ -3,6 +3,7 @@ package io.livekit.android.room
import com.github.ajalt.timberkt.Timber
import com.google.protobuf.util.JsonFormat
import io.livekit.android.ConnectOptions
import io.livekit.android.Version
import io.livekit.android.dagger.InjectionNames
import io.livekit.android.room.track.Track
import io.livekit.android.util.safe
...
...
@@ -46,7 +47,11 @@ constructor(
token: String,
options: ConnectOptions?,
) {
var wsUrlString = "$url/rtc?protocol=$PROTOCOL_VERSION&access_token=$token"
var wsUrlString = "$url/rtc" +
"?protocol=$PROTOCOL_VERSION" +
"&access_token=$token" +
"&sdk=$SDK_TYPE" +
"&version=${Version.CLIENT_VERSION}"
isReconnecting = false
if (options != null) {
wsUrlString += "&auto_subscribe="
...
...
@@ -318,8 +323,8 @@ constructor(
LivekitRtc.SignalResponse.MessageCase.TRACK_PUBLISHED -> {
listener?.onLocalTrackPublished(response.trackPublished)
}
LivekitRtc.SignalResponse.MessageCase.SPEAKER -> {
listener?.onActiveSpeakersChanged(response.speaker.speakersList)
LivekitRtc.SignalResponse.MessageCase.SPEAKERS_CHANGED -> {
listener?.onSpeakersChanged(response.speakersChanged.speakersList)
}
LivekitRtc.SignalResponse.MessageCase.JOIN -> {
Timber.d { "received unexpected extra join message?" }
...
...
@@ -327,6 +332,12 @@ constructor(
LivekitRtc.SignalResponse.MessageCase.LEAVE -> {
listener?.onLeave()
}
LivekitRtc.SignalResponse.MessageCase.MUTE -> {
//TODO
}
LivekitRtc.SignalResponse.MessageCase.ROOM_UPDATE -> {
//TODO
}
LivekitRtc.SignalResponse.MessageCase.MESSAGE_NOT_SET,
null -> {
Timber.v { "empty messageCase!" }
...
...
@@ -347,7 +358,7 @@ constructor(
fun onTrickle(candidate: IceCandidate, target: LivekitRtc.SignalTarget)
fun onLocalTrackPublished(response: LivekitRtc.TrackPublishedResponse)
fun onParticipantUpdate(updates: List<LivekitModels.ParticipantInfo>)
fun on
Active
SpeakersChanged(speakers: List<LivekitModels.SpeakerInfo>)
fun onSpeakersChanged(speakers: List<LivekitModels.SpeakerInfo>)
fun onClose(reason: String, code: Int)
fun onLeave()
fun onError(error: Exception)
...
...
@@ -358,6 +369,7 @@ constructor(
const val SD_TYPE_OFFER = "offer"
const val SD_TYPE_PRANSWER = "pranswer"
const val PROTOCOL_VERSION = 2
const val SDK_TYPE = "android"
private fun iceServer(url: String) =
PeerConnection.IceServer.builder(url).createIceServer()
...
...
请
注册
或
登录
后发表评论