David Liu

Tracks stuff

@@ -9,6 +9,7 @@ import javax.inject.Singleton @@ -9,6 +9,7 @@ import javax.inject.Singleton
9 @Singleton 9 @Singleton
10 @Component( 10 @Component(
11 modules = [ 11 modules = [
  12 + CoroutinesModule::class,
12 RTCModule::class, 13 RTCModule::class,
13 WebModule::class, 14 WebModule::class,
14 JsonFormatModule::class, 15 JsonFormatModule::class,
@@ -4,6 +4,7 @@ import dagger.assisted.Assisted @@ -4,6 +4,7 @@ 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 io.livekit.android.ConnectOptions 6 import io.livekit.android.ConnectOptions
  7 +import io.livekit.android.room.participant.RemoteParticipant
7 8
8 class Room 9 class Room
9 @AssistedInject 10 @AssistedInject
@@ -12,6 +13,7 @@ constructor( @@ -12,6 +13,7 @@ constructor(
12 private val engine: RTCEngine, 13 private val engine: RTCEngine,
13 ) { 14 ) {
14 15
  16 + var listener: Listener? = null
15 suspend fun connect(url: String, token: String, isSecure: Boolean) { 17 suspend fun connect(url: String, token: String, isSecure: Boolean) {
16 engine.join(url, token, isSecure) 18 engine.join(url, token, isSecure)
17 } 19 }
@@ -20,4 +22,21 @@ constructor( @@ -20,4 +22,21 @@ constructor(
20 interface Factory { 22 interface Factory {
21 fun create(connectOptions: ConnectOptions): Room 23 fun create(connectOptions: ConnectOptions): Room
22 } 24 }
  25 +
  26 +
  27 + interface Listener {
  28 + fun onConnect(room: Room)
  29 + fun onDisconnect(room: Room, error: Exception)
  30 + fun onParticipantDidConnect(room: Room, participant: RemoteParticipant)
  31 + }
  32 +// func didConnect(room: Room)
  33 +// func didDisconnect(room: Room, error: Error?)
  34 +// func participantDidConnect(room: Room, participant: RemoteParticipant)
  35 +// func participantDidDisconnect(room: Room, participant: RemoteParticipant)
  36 +// func didFailToConnect(room: Room, error: Error)
  37 +// func isReconnecting(room: Room, error: Error)
  38 +// func didReconnect(room: Room)
  39 +// func didStartRecording(room: Room)
  40 +// func didStopRecording(room: Room)
  41 +// func activeSpeakersDidChange(speakers: [Participant], room: Room)
23 } 42 }
  1 +package io.livekit.android.room.participant
  2 +
  3 +import io.livekit.android.room.track.Track
  4 +import io.livekit.android.room.track.TrackPublication
  5 +
  6 +class Participant(val sid: String, name: String? = null) {
  7 + inline class Sid(val sid: String)
  8 +
  9 + var metadata: String? = null
  10 + var name: String? = name
  11 + internal set
  12 + var audioLevel: Float = 0f
  13 + internal set
  14 +
  15 + var tracks = mutableMapOf<Track.Sid, TrackPublication>()
  16 + var audioTracks = mutableMapOf<Track.Sid, TrackPublication>()
  17 + private set
  18 + var videoTracks = mutableMapOf<Track.Sid, TrackPublication>()
  19 + private set
  20 + var dataTracks = mutableMapOf<Track.Sid, TrackPublication>()
  21 + private set
  22 +
  23 + fun addTrack(publication: TrackPublication){
  24 + tracks[publication.trackSid] = publication
  25 + when(publication) {
  26 +
  27 + }
  28 + }
  29 +}
  1 +package io.livekit.android.room.participant
  2 +
  3 +class RemoteParticipant {
  4 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +import org.webrtc.AudioTrack
  4 +import org.webrtc.MediaStreamTrack
  5 +
  6 +open class AudioTrack(name: String, val rtcTrack: AudioTrack) :
  7 + Track(name, stateFromRTCMediaTrackState(rtcTrack.state())),
  8 + MediaTrack {
  9 +
  10 + override val mediaTrack: MediaStreamTrack
  11 + get() = rtcTrack
  12 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +interface AudioTrackPublication {
  4 + val audioTrack: AudioTrack?
  5 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +import org.webrtc.MediaStreamTrack
  4 +
  5 +interface MediaTrack {
  6 + val mediaTrack: MediaStreamTrack
  7 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +class RemoteAudioTrack(
  4 + sid: Track.Sid,
  5 + playbackEnabled: Boolean = true,
  6 + name: String,
  7 + rtcTrack: org.webrtc.AudioTrack
  8 +) : AudioTrack(name, rtcTrack), RemoteTrack {
  9 +
  10 + override var sid: Track.Sid = sid
  11 + var playbackEnabled = playbackEnabled
  12 + internal set
  13 +
  14 +
  15 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +import livekit.Model
  4 +
  5 +class RemoteAudioTrackPublication(
  6 + info: Model.TrackInfo,
  7 + track: Track? = null
  8 +) : RemoteTrackPublication(info, track), AudioTrackPublication {
  9 + override val audioTrack: AudioTrack?
  10 + get() = track as? AudioTrack
  11 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +interface RemoteTrack {
  4 + var sid: Track.Sid
  5 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +import livekit.Model
  4 +
  5 +open class RemoteTrackPublication(info: Model.TrackInfo, track: Track? = null) :
  6 + TrackPublication(info, track) {
  7 +
  8 + val remoteTrack: Track?
  9 + get() = track
  10 +
  11 + val trackSubscribed: Boolean
  12 + get() = track != null
  13 +
  14 + val publishPriority = Track.Priority.STANDARD
  15 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +class RemoteVideoTrack(
  4 + override var sid: Sid,
  5 + var switchedOff: Boolean = false,
  6 + var priority: Priority? = null,
  7 + name: String,
  8 + rtcTrack: org.webrtc.VideoTrack
  9 +) : VideoTrack(name, rtcTrack), RemoteTrack
  1 +package io.livekit.android.room.track
  2 +
  3 +import livekit.Model
  4 +
  5 +class RemoteVideoTrackPublication(info: Model.TrackInfo, track: Track? = null) :
  6 + RemoteTrackPublication(info, track),
  7 + VideoTrackPublication {
  8 +
  9 + override val videoTrack: VideoTrack?
  10 + get() = track as? VideoTrack
  11 +}
@@ -3,7 +3,7 @@ package io.livekit.android.room.track @@ -3,7 +3,7 @@ package io.livekit.android.room.track
3 import org.webrtc.DataChannel 3 import org.webrtc.DataChannel
4 import org.webrtc.MediaStreamTrack 4 import org.webrtc.MediaStreamTrack
5 5
6 -class Track(name: String, state: State) { 6 +open class Track(name: String, state: State) {
7 7
8 var name = name 8 var name = name
9 internal set 9 internal set
  1 +package io.livekit.android.room.track
  2 +
  3 +import livekit.Model
  4 +
  5 +open class TrackPublication(info: Model.TrackInfo, track: Track? = null) {
  6 + var track: Track? = track
  7 + internal set
  8 + var trackName: String
  9 + internal set
  10 + var trackSid: Track.Sid
  11 + private set
  12 +
  13 + init {
  14 + trackSid = Track.Sid(info.sid)
  15 + trackName = info.name
  16 + }
  17 +
  18 + fun updateFromInfo(info: Model.TrackInfo) {
  19 + trackSid = Track.Sid(info.sid)
  20 + trackName = info.name
  21 + }
  22 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +import org.webrtc.MediaStreamTrack
  4 +import org.webrtc.VideoSink
  5 +import org.webrtc.VideoTrack
  6 +
  7 +open class VideoTrack(name: String, val rtcTrack: VideoTrack) :
  8 + Track(name, stateFromRTCMediaTrackState(rtcTrack.state())),
  9 + MediaTrack {
  10 +
  11 + override val mediaTrack: MediaStreamTrack
  12 + get() = rtcTrack
  13 +
  14 + var enabled: Boolean
  15 + get() = rtcTrack.enabled()
  16 + set(value) {
  17 + rtcTrack.setEnabled(value)
  18 + }
  19 +
  20 + fun addRenderer(renderer: VideoSink) = rtcTrack.addSink(renderer)
  21 +
  22 + fun removeRenderer(renderer: VideoSink) = rtcTrack.addSink(renderer)
  23 +}
  1 +package io.livekit.android.room.track
  2 +
  3 +interface VideoTrackPublication {
  4 + val videoTrack: VideoTrack?
  5 +}