David Zhao

Removed deprecated DataTrack references

@@ -43,7 +43,7 @@ constructor( @@ -43,7 +43,7 @@ constructor(
43 url: String, 43 url: String,
44 token: String, 44 token: String,
45 ) { 45 ) {
46 - val wsUrlString = "$url/rtc?access_token=$token&protocol=$PROTOCOL_VERSION" 46 + val wsUrlString = "$url/rtc?protocol=$PROTOCOL_VERSION&access_token=$token"
47 Timber.i { "connecting to $wsUrlString" } 47 Timber.i { "connecting to $wsUrlString" }
48 48
49 val request = Request.Builder() 49 val request = Request.Builder()
@@ -111,7 +111,6 @@ constructor( @@ -111,7 +111,6 @@ constructor(
111 fun onICEConnected() 111 fun onICEConnected()
112 fun onAddTrack(track: MediaStreamTrack, streams: Array<out MediaStream>) 112 fun onAddTrack(track: MediaStreamTrack, streams: Array<out MediaStream>)
113 // fun onPublishLocalTrack(cid: String, track: LivekitModels.TrackInfo) 113 // fun onPublishLocalTrack(cid: String, track: LivekitModels.TrackInfo)
114 - fun onAddDataChannel(channel: DataChannel)  
115 fun onUpdateParticipants(updates: List<LivekitModels.ParticipantInfo>) 114 fun onUpdateParticipants(updates: List<LivekitModels.ParticipantInfo>)
116 fun onUpdateSpeakers(speakers: List<LivekitRtc.SpeakerInfo>) 115 fun onUpdateSpeakers(speakers: List<LivekitRtc.SpeakerInfo>)
117 fun onDisconnect(reason: String) 116 fun onDisconnect(reason: String)
@@ -11,11 +11,9 @@ import io.livekit.android.room.participant.Participant @@ -11,11 +11,9 @@ import io.livekit.android.room.participant.Participant
11 import io.livekit.android.room.participant.ParticipantListener 11 import io.livekit.android.room.participant.ParticipantListener
12 import io.livekit.android.room.participant.RemoteParticipant 12 import io.livekit.android.room.participant.RemoteParticipant
13 import io.livekit.android.room.track.* 13 import io.livekit.android.room.track.*
14 -import io.livekit.android.room.util.unpackedTrackLabel  
15 import livekit.LivekitModels 14 import livekit.LivekitModels
16 import livekit.LivekitRtc 15 import livekit.LivekitRtc
17 import org.webrtc.* 16 import org.webrtc.*
18 -import java.nio.ByteBuffer  
19 import kotlin.coroutines.Continuation 17 import kotlin.coroutines.Continuation
20 import kotlin.coroutines.resume 18 import kotlin.coroutines.resume
21 import kotlin.coroutines.suspendCoroutine 19 import kotlin.coroutines.suspendCoroutine
@@ -71,7 +69,7 @@ constructor( @@ -71,7 +69,7 @@ constructor(
71 handleDisconnect() 69 handleDisconnect()
72 } 70 }
73 71
74 - private fun handleParticipantDisconnect(sid: String, participant: RemoteParticipant) { 72 + private fun handleParticipantDisconnect(sid: String) {
75 val removedParticipant = mutableRemoteParticipants.remove(sid) ?: return 73 val removedParticipant = mutableRemoteParticipants.remove(sid) ?: return
76 removedParticipant.tracks.values.toList().forEach { publication -> 74 removedParticipant.tracks.values.toList().forEach { publication ->
77 removedParticipant.unpublishTrack(publication.sid) 75 removedParticipant.unpublishTrack(publication.sid)
@@ -214,17 +212,6 @@ constructor( @@ -214,17 +212,6 @@ constructor(
214 /** 212 /**
215 * @suppress 213 * @suppress
216 */ 214 */
217 - override fun onAddDataChannel(channel: DataChannel) {  
218 - val unpackedTrackLabel = channel.unpackedTrackLabel()  
219 - val (participantSid, trackSid, name) = unpackedTrackLabel  
220 - val participant = getOrCreateRemoteParticipant(participantSid)  
221 - participant.addSubscribedDataTrack(channel, trackSid, name)  
222 - }  
223 -  
224 -  
225 - /**  
226 - * @suppress  
227 - */  
228 override fun onUpdateParticipants(updates: List<LivekitModels.ParticipantInfo>) { 215 override fun onUpdateParticipants(updates: List<LivekitModels.ParticipantInfo>) {
229 for (info in updates) { 216 for (info in updates) {
230 val participantSid = info.sid 217 val participantSid = info.sid
@@ -238,7 +225,7 @@ constructor( @@ -238,7 +225,7 @@ constructor(
238 val participant = getOrCreateRemoteParticipant(participantSid, info) 225 val participant = getOrCreateRemoteParticipant(participantSid, info)
239 226
240 if (info.state == LivekitModels.ParticipantInfo.State.DISCONNECTED) { 227 if (info.state == LivekitModels.ParticipantInfo.State.DISCONNECTED) {
241 - handleParticipantDisconnect(participantSid, participant) 228 + handleParticipantDisconnect(participantSid)
242 } else if (isNewParticipant) { 229 } else if (isNewParticipant) {
243 listener?.onParticipantConnected(this, participant) 230 listener?.onParticipantConnected(this, participant)
244 } else { 231 } else {
@@ -349,7 +336,7 @@ constructor( @@ -349,7 +336,7 @@ constructor(
349 fun initVideoRenderer(viewRenderer: SurfaceViewRenderer) { 336 fun initVideoRenderer(viewRenderer: SurfaceViewRenderer) {
350 viewRenderer.init(eglBase.eglBaseContext, null) 337 viewRenderer.init(eglBase.eglBaseContext, null)
351 viewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT) 338 viewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT)
352 - viewRenderer.setEnableHardwareScaler(false /* enabled */); 339 + viewRenderer.setEnableHardwareScaler(false /* enabled */)
353 } 340 }
354 } 341 }
355 342
@@ -33,7 +33,6 @@ class SubscriberTransportObserver( @@ -33,7 +33,6 @@ class SubscriberTransportObserver(
33 33
34 override fun onDataChannel(channel: DataChannel) { 34 override fun onDataChannel(channel: DataChannel) {
35 Timber.v { "onDataChannel" } 35 Timber.v { "onDataChannel" }
36 - engine.listener?.onAddDataChannel(channel)  
37 } 36 }
38 37
39 override fun onStandardizedIceConnectionChange(newState: PeerConnection.IceConnectionState?) { 38 override fun onStandardizedIceConnectionChange(newState: PeerConnection.IceConnectionState?) {
@@ -61,7 +61,7 @@ internal constructor( @@ -61,7 +61,7 @@ internal constructor(
61 61
62 val cid = track.rtcTrack.id() 62 val cid = track.rtcTrack.id()
63 val trackInfo = 63 val trackInfo =
64 - engine.addTrack(cid = cid, name = track.name, kind = track.kind) 64 + engine.addTrack(cid = cid, name = track.name, kind = track.kind.toProto())
65 val transInit = RtpTransceiver.RtpTransceiverInit( 65 val transInit = RtpTransceiver.RtpTransceiverInit(
66 RtpTransceiver.RtpTransceiverDirection.SEND_ONLY, 66 RtpTransceiver.RtpTransceiverDirection.SEND_ONLY,
67 listOf(this.sid) 67 listOf(this.sid)
@@ -117,15 +117,19 @@ internal constructor( @@ -117,15 +117,19 @@ internal constructor(
117 return 117 return
118 } 118 }
119 track.stop() 119 track.stop()
120 - if (track is MediaTrack) {  
121 - unpublishMediaTrack(track, sid) 120 + val senders = engine.publisher.peerConnection.senders ?: return
  121 + for (sender in senders) {
  122 + val t = sender.track() ?: continue
  123 + if (t == track.rtcTrack) {
  124 + engine.publisher.peerConnection.removeTrack(sender)
  125 + }
122 } 126 }
  127 +
123 val sid = publication.sid 128 val sid = publication.sid
124 tracks.remove(sid) 129 tracks.remove(sid)
125 when (publication.kind) { 130 when (publication.kind) {
126 - LivekitModels.TrackType.AUDIO -> audioTracks.remove(sid)  
127 - LivekitModels.TrackType.VIDEO -> videoTracks.remove(sid)  
128 - LivekitModels.TrackType.DATA -> dataTracks.remove(sid) 131 + Track.Kind.AUDIO -> audioTracks.remove(sid)
  132 + Track.Kind.VIDEO -> videoTracks.remove(sid)
129 else -> {} 133 else -> {}
130 } 134 }
131 } 135 }
@@ -179,19 +183,6 @@ internal constructor( @@ -179,19 +183,6 @@ internal constructor(
179 } 183 }
180 } 184 }
181 185
182 - private fun <T> unpublishMediaTrack(  
183 - track: T,  
184 - sid: String  
185 - ) where T : MediaTrack {  
186 - val senders = engine.publisher.peerConnection.senders ?: return  
187 - for (sender in senders) {  
188 - val t = sender.track() ?: continue  
189 - if (t == track.rtcTrack) {  
190 - engine.publisher.peerConnection.removeTrack(sender)  
191 - }  
192 - }  
193 - }  
194 -  
195 interface PublishListener { 186 interface PublishListener {
196 fun onPublishSuccess(publication: TrackPublication) {} 187 fun onPublishSuccess(publication: TrackPublication) {}
197 fun onPublishFailure(exception: Exception) {} 188 fun onPublishFailure(exception: Exception) {}
@@ -2,7 +2,6 @@ package io.livekit.android.room.participant @@ -2,7 +2,6 @@ package io.livekit.android.room.participant
2 2
3 import io.livekit.android.room.track.* 3 import io.livekit.android.room.track.*
4 import livekit.LivekitModels 4 import livekit.LivekitModels
5 -import java.nio.ByteBuffer  
6 5
7 open class Participant(var sid: String, identity: String? = null) { 6 open class Participant(var sid: String, identity: String? = null) {
8 var participantInfo: LivekitModels.ParticipantInfo? = null 7 var participantInfo: LivekitModels.ParticipantInfo? = null
@@ -48,8 +47,6 @@ open class Participant(var sid: String, identity: String? = null) { @@ -48,8 +47,6 @@ open class Participant(var sid: String, identity: String? = null) {
48 private set 47 private set
49 var videoTracks = mutableMapOf<String, TrackPublication>() 48 var videoTracks = mutableMapOf<String, TrackPublication>()
50 private set 49 private set
51 - var dataTracks = mutableMapOf<String, TrackPublication>()  
52 - private set  
53 50
54 /** 51 /**
55 * @suppress 52 * @suppress
@@ -59,9 +56,9 @@ open class Participant(var sid: String, identity: String? = null) { @@ -59,9 +56,9 @@ open class Participant(var sid: String, identity: String? = null) {
59 track?.sid = publication.sid 56 track?.sid = publication.sid
60 tracks[publication.sid] = publication 57 tracks[publication.sid] = publication
61 when (publication.kind) { 58 when (publication.kind) {
62 - LivekitModels.TrackType.AUDIO -> audioTracks[publication.sid] = publication  
63 - LivekitModels.TrackType.VIDEO -> videoTracks[publication.sid] = publication  
64 - LivekitModels.TrackType.DATA -> dataTracks[publication.sid] = publication 59 + Track.Kind.AUDIO -> audioTracks[publication.sid] = publication
  60 + Track.Kind.VIDEO -> videoTracks[publication.sid] = publication
  61 + else -> {}
65 } 62 }
66 } 63 }
67 64
@@ -9,7 +9,6 @@ import kotlinx.coroutines.delay @@ -9,7 +9,6 @@ import kotlinx.coroutines.delay
9 import kotlinx.coroutines.launch 9 import kotlinx.coroutines.launch
10 import livekit.LivekitModels 10 import livekit.LivekitModels
11 import org.webrtc.AudioTrack 11 import org.webrtc.AudioTrack
12 -import org.webrtc.DataChannel  
13 import org.webrtc.MediaStreamTrack 12 import org.webrtc.MediaStreamTrack
14 import org.webrtc.VideoTrack 13 import org.webrtc.VideoTrack
15 14
@@ -108,55 +107,11 @@ class RemoteParticipant( @@ -108,55 +107,11 @@ class RemoteParticipant(
108 listener?.onTrackSubscribed(track, publication, this) 107 listener?.onTrackSubscribed(track, publication, this)
109 } 108 }
110 109
111 - /**  
112 - * @suppress  
113 - */  
114 - fun addSubscribedDataTrack(dataChannel: DataChannel, sid: String, name: String) {  
115 - val track = DataTrack(name, dataChannel)  
116 - var publication = getTrackPublication(sid)  
117 -  
118 - if (publication == null) {  
119 - val trackInfo = LivekitModels.TrackInfo.newBuilder()  
120 - .setSid(sid)  
121 - .setName(name)  
122 - .setType(LivekitModels.TrackType.DATA)  
123 - .build()  
124 - publication = RemoteTrackPublication(info = trackInfo, participant = this)  
125 - addTrackPublication(publication)  
126 - if (hasInfo) {  
127 - internalListener?.onTrackPublished(publication, this)  
128 - listener?.onTrackPublished(publication, this)  
129 - }  
130 - }  
131 - publication.track = track  
132 - track.sid = publication.sid  
133 -  
134 - dataChannel.registerObserver(object : DataChannel.Observer {  
135 - override fun onBufferedAmountChange(previousAmount: Long) {}  
136 -  
137 - override fun onStateChange() {  
138 - val newState = dataChannel.state()  
139 - if (newState == DataChannel.State.CLOSED) {  
140 - publication.track = null  
141 - internalListener?.onTrackUnsubscribed(track, publication, this@RemoteParticipant)  
142 - listener?.onTrackUnsubscribed(track, publication, this@RemoteParticipant)  
143 - }  
144 - }  
145 -  
146 - override fun onMessage(buffer: DataChannel.Buffer) {  
147 -  
148 - }  
149 - })  
150 - internalListener?.onTrackSubscribed(track, publication, participant = this)  
151 - listener?.onTrackSubscribed(track, publication, this)  
152 - }  
153 -  
154 fun unpublishTrack(trackSid: String, sendUnpublish: Boolean = false) { 110 fun unpublishTrack(trackSid: String, sendUnpublish: Boolean = false) {
155 val publication = tracks.remove(trackSid) as? RemoteTrackPublication ?: return 111 val publication = tracks.remove(trackSid) as? RemoteTrackPublication ?: return
156 when (publication.kind) { 112 when (publication.kind) {
157 - LivekitModels.TrackType.AUDIO -> audioTracks.remove(trackSid)  
158 - LivekitModels.TrackType.VIDEO -> videoTracks.remove(trackSid)  
159 - LivekitModels.TrackType.DATA -> dataTracks.remove(trackSid) 113 + Track.Kind.AUDIO -> audioTracks.remove(trackSid)
  114 + Track.Kind.VIDEO -> videoTracks.remove(trackSid)
160 else -> throw TrackException.InvalidTrackTypeException() 115 else -> throw TrackException.InvalidTrackTypeException()
161 } 116 }
162 117
@@ -4,6 +4,6 @@ import livekit.LivekitModels @@ -4,6 +4,6 @@ import livekit.LivekitModels
4 import org.webrtc.AudioTrack 4 import org.webrtc.AudioTrack
5 5
6 open class AudioTrack(name: String, override val rtcTrack: AudioTrack) : 6 open class AudioTrack(name: String, override val rtcTrack: AudioTrack) :
7 - MediaTrack(name, LivekitModels.TrackType.AUDIO, rtcTrack) { 7 + Track(name, Kind.AUDIO, rtcTrack) {
8 8
9 } 9 }
1 -package io.livekit.android.room.track  
2 -  
3 -import livekit.LivekitModels  
4 -import org.webrtc.DataChannel  
5 -  
6 -open class DataTrack(  
7 - name: String,  
8 - var dataChannel: DataChannel? = null  
9 -) : Track(name, LivekitModels.TrackType.DATA) {  
10 - var ordered: Boolean = TODO()  
11 - private set  
12 - var maxRetransmitTimeMs: Int = TODO()  
13 - private set  
14 - var maxRetransmits: Int = TODO()  
15 - private set  
16 -  
17 - fun updateConfig(config: DataChannel.Init) {  
18 - ordered = config.ordered  
19 - maxRetransmitTimeMs = config.maxRetransmitTimeMs  
20 - maxRetransmits = config.maxRetransmits  
21 - }  
22 -  
23 - override fun stop() {  
24 - dataChannel?.unregisterObserver()  
25 - }  
26 -}  
1 -package io.livekit.android.room.track  
2 -  
3 -data class DataTrackOptions(  
4 - val ordered: Boolean = true,  
5 - val maxRetransmitTimeMs: Int = -1,  
6 - val maxRetransmits: Int = -1,  
7 - val name: String  
8 -)  
1 -package io.livekit.android.room.track  
2 -  
3 -import org.webrtc.DataChannel  
4 -import java.nio.ByteBuffer  
5 -import java.util.*  
6 -  
7 -class LocalDataTrack(  
8 - val options: DataTrackOptions  
9 -) : DataTrack(options.name) {  
10 - var cid: String = UUID.randomUUID().toString()  
11 -  
12 - fun sendString(message: String) {  
13 - val byteBuffer = ByteBuffer.wrap(message.toByteArray())  
14 - val buffer = DataChannel.Buffer(byteBuffer, false)  
15 - dataChannel?.send(buffer)  
16 - }  
17 -  
18 - fun sendBytes(byteBuffer: ByteBuffer) {  
19 - val buffer = DataChannel.Buffer(byteBuffer, true)  
20 - dataChannel?.send(buffer)  
21 - }  
22 -}  
@@ -5,7 +5,7 @@ import livekit.LivekitModels @@ -5,7 +5,7 @@ import livekit.LivekitModels
5 5
6 class LocalTrackPublication( 6 class LocalTrackPublication(
7 info: LivekitModels.TrackInfo, 7 info: LivekitModels.TrackInfo,
8 - track: Track? = null, 8 + track: Track,
9 participant: LocalParticipant 9 participant: LocalParticipant
10 ) : TrackPublication(info, track, participant) { 10 ) : TrackPublication(info, track, participant) {
11 11
@@ -18,13 +18,13 @@ class LocalTrackPublication( @@ -18,13 +18,13 @@ class LocalTrackPublication(
18 return 18 return
19 } 19 }
20 20
21 - val mediaTrack = track as? MediaTrack ?: return 21 + val mediaTrack = track ?: return
22 22
23 mediaTrack.rtcTrack.setEnabled(!muted) 23 mediaTrack.rtcTrack.setEnabled(!muted)
24 this.muted = muted 24 this.muted = muted
25 25
26 // send updates to server 26 // send updates to server
27 - val participant = this.participant as? LocalParticipant ?: return 27 + val participant = this.participant.get() as? LocalParticipant ?: return
28 28
29 participant.engine.updateMuteStatus(sid, muted) 29 participant.engine.updateMuteStatus(sid, muted)
30 30
1 -package io.livekit.android.room.track  
2 -  
3 -import livekit.LivekitModels  
4 -import org.webrtc.MediaStreamTrack  
5 -  
6 -  
7 -open class MediaTrack(name: String, kind: LivekitModels.TrackType, open val rtcTrack: MediaStreamTrack) :  
8 - Track(name, kind) {  
9 -  
10 - // TODO: how do we mute/disable a track  
11 -  
12 - override fun stop() {  
13 - rtcTrack.setEnabled(false)  
14 - rtcTrack.dispose()  
15 - }  
16 -}  
@@ -27,7 +27,7 @@ class RemoteTrackPublication( @@ -27,7 +27,7 @@ class RemoteTrackPublication(
27 return 27 return
28 } 28 }
29 field = v 29 field = v
30 - val participant = this.participant as? RemoteParticipant ?: return 30 + val participant = this.participant.get() as? RemoteParticipant ?: return
31 if (v) { 31 if (v) {
32 participant.listener?.onTrackMuted(this, participant) 32 participant.listener?.onTrackMuted(this, participant)
33 participant.internalListener?.onTrackMuted(this, participant) 33 participant.internalListener?.onTrackMuted(this, participant)
@@ -42,7 +42,7 @@ class RemoteTrackPublication( @@ -42,7 +42,7 @@ class RemoteTrackPublication(
42 */ 42 */
43 fun setSubscribed(subscribed: Boolean) { 43 fun setSubscribed(subscribed: Boolean) {
44 unsubscribed = !subscribed 44 unsubscribed = !subscribed
45 - val participant = this.participant as? RemoteParticipant ?: return 45 + val participant = this.participant.get() as? RemoteParticipant ?: return
46 46
47 participant.rtcClient.sendUpdateSubscription(sid, !unsubscribed, videoQuality) 47 participant.rtcClient.sendUpdateSubscription(sid, !unsubscribed, videoQuality)
48 } 48 }
@@ -70,7 +70,7 @@ class RemoteTrackPublication( @@ -70,7 +70,7 @@ class RemoteTrackPublication(
70 } 70 }
71 71
72 private fun sendUpdateTrackSettings() { 72 private fun sendUpdateTrackSettings() {
73 - val participant = this.participant as? RemoteParticipant ?: return 73 + val participant = this.participant.get() as? RemoteParticipant ?: return
74 74
75 participant.rtcClient.sendUpdateTrackSettings(sid, disabled, videoQuality) 75 participant.rtcClient.sendUpdateTrackSettings(sid, disabled, videoQuality)
76 } 76 }
@@ -6,7 +6,8 @@ import org.webrtc.MediaStreamTrack @@ -6,7 +6,8 @@ import org.webrtc.MediaStreamTrack
6 6
7 open class Track( 7 open class Track(
8 name: String, 8 name: String,
9 - kind: LivekitModels.TrackType 9 + kind: Kind,
  10 + open val rtcTrack: MediaStreamTrack
10 ) { 11 ) {
11 var name = name 12 var name = name
12 internal set 13 internal set
@@ -15,8 +16,38 @@ open class Track( @@ -15,8 +16,38 @@ open class Track(
15 var sid: String? = null 16 var sid: String? = null
16 internal set 17 internal set
17 18
  19 + enum class Kind(val value: String) {
  20 + AUDIO("audio"),
  21 + VIDEO("video"),
  22 + // unknown
  23 + UNRECOGNIZED("unrecognized");
  24 +
  25 + fun toProto(): LivekitModels.TrackType {
  26 + return when (this) {
  27 + AUDIO -> LivekitModels.TrackType.AUDIO
  28 + VIDEO -> LivekitModels.TrackType.VIDEO
  29 + UNRECOGNIZED -> LivekitModels.TrackType.UNRECOGNIZED
  30 + }
  31 + }
  32 +
  33 + override fun toString(): String {
  34 + return value;
  35 + }
  36 +
  37 + companion object {
  38 + fun fromProto(tt: LivekitModels.TrackType): Kind {
  39 + return when (tt) {
  40 + LivekitModels.TrackType.AUDIO -> AUDIO
  41 + LivekitModels.TrackType.VIDEO -> VIDEO
  42 + else -> UNRECOGNIZED
  43 + }
  44 + }
  45 + }
  46 + }
  47 +
18 open fun stop() { 48 open fun stop() {
19 - // subclasses override to provide stop behavior 49 + rtcTrack.setEnabled(false)
  50 + rtcTrack.dispose()
20 } 51 }
21 } 52 }
22 53
@@ -2,6 +2,7 @@ package io.livekit.android.room.track @@ -2,6 +2,7 @@ package io.livekit.android.room.track
2 2
3 import io.livekit.android.room.participant.Participant 3 import io.livekit.android.room.participant.Participant
4 import livekit.LivekitModels 4 import livekit.LivekitModels
  5 +import java.lang.ref.WeakReference
5 6
6 open class TrackPublication( 7 open class TrackPublication(
7 info: LivekitModels.TrackInfo, 8 info: LivekitModels.TrackInfo,
@@ -14,7 +15,7 @@ open class TrackPublication( @@ -14,7 +15,7 @@ open class TrackPublication(
14 internal set 15 internal set
15 var sid: String 16 var sid: String
16 private set 17 private set
17 - var kind: LivekitModels.TrackType 18 + var kind: Track.Kind
18 private set 19 private set
19 open var muted: Boolean = false 20 open var muted: Boolean = false
20 internal set 21 internal set
@@ -23,21 +24,20 @@ open class TrackPublication( @@ -23,21 +24,20 @@ open class TrackPublication(
23 return track != null 24 return track != null
24 } 25 }
25 26
26 - var participant: Participant 27 + var participant: WeakReference<Participant>
27 28
28 init { 29 init {
29 sid = info.sid 30 sid = info.sid
30 name = info.name 31 name = info.name
31 - kind = info.type 32 + kind = Track.Kind.fromProto(info.type)
  33 + this.participant = WeakReference(participant)
32 muted = info.muted 34 muted = info.muted
33 - this.participant = participant  
34 } 35 }
35 36
36 fun updateFromInfo(info: LivekitModels.TrackInfo) { 37 fun updateFromInfo(info: LivekitModels.TrackInfo) {
37 sid = info.sid 38 sid = info.sid
38 name = info.name 39 name = info.name
39 - kind = info.type  
40 - 40 + kind = Track.Kind.fromProto(info.type)
41 muted = info.muted 41 muted = info.muted
42 } 42 }
43 } 43 }
@@ -5,7 +5,7 @@ import org.webrtc.VideoSink @@ -5,7 +5,7 @@ import org.webrtc.VideoSink
5 import org.webrtc.VideoTrack 5 import org.webrtc.VideoTrack
6 6
7 open class VideoTrack(name: String, override val rtcTrack: VideoTrack) : 7 open class VideoTrack(name: String, override val rtcTrack: VideoTrack) :
8 - MediaTrack(name, LivekitModels.TrackType.VIDEO, rtcTrack) { 8 + Track(name, Kind.VIDEO, rtcTrack) {
9 private val sinks: MutableList<VideoSink> = ArrayList(); 9 private val sinks: MutableList<VideoSink> = ArrayList();
10 10
11 var enabled: Boolean 11 var enabled: Boolean