David Liu

Tracks stuff

... ... @@ -9,6 +9,7 @@ import javax.inject.Singleton
@Singleton
@Component(
modules = [
CoroutinesModule::class,
RTCModule::class,
WebModule::class,
JsonFormatModule::class,
... ...
... ... @@ -4,6 +4,7 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import io.livekit.android.ConnectOptions
import io.livekit.android.room.participant.RemoteParticipant
class Room
@AssistedInject
... ... @@ -12,6 +13,7 @@ constructor(
private val engine: RTCEngine,
) {
var listener: Listener? = null
suspend fun connect(url: String, token: String, isSecure: Boolean) {
engine.join(url, token, isSecure)
}
... ... @@ -20,4 +22,21 @@ constructor(
interface Factory {
fun create(connectOptions: ConnectOptions): Room
}
interface Listener {
fun onConnect(room: Room)
fun onDisconnect(room: Room, error: Exception)
fun onParticipantDidConnect(room: Room, participant: RemoteParticipant)
}
// func didConnect(room: Room)
// func didDisconnect(room: Room, error: Error?)
// func participantDidConnect(room: Room, participant: RemoteParticipant)
// func participantDidDisconnect(room: Room, participant: RemoteParticipant)
// func didFailToConnect(room: Room, error: Error)
// func isReconnecting(room: Room, error: Error)
// func didReconnect(room: Room)
// func didStartRecording(room: Room)
// func didStopRecording(room: Room)
// func activeSpeakersDidChange(speakers: [Participant], room: Room)
}
\ No newline at end of file
... ...
package io.livekit.android.room.participant
import io.livekit.android.room.track.Track
import io.livekit.android.room.track.TrackPublication
class Participant(val sid: String, name: String? = null) {
inline class Sid(val sid: String)
var metadata: String? = null
var name: String? = name
internal set
var audioLevel: Float = 0f
internal set
var tracks = mutableMapOf<Track.Sid, TrackPublication>()
var audioTracks = mutableMapOf<Track.Sid, TrackPublication>()
private set
var videoTracks = mutableMapOf<Track.Sid, TrackPublication>()
private set
var dataTracks = mutableMapOf<Track.Sid, TrackPublication>()
private set
fun addTrack(publication: TrackPublication){
tracks[publication.trackSid] = publication
when(publication) {
}
}
}
\ No newline at end of file
... ...
package io.livekit.android.room.participant
class RemoteParticipant {
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
import org.webrtc.AudioTrack
import org.webrtc.MediaStreamTrack
open class AudioTrack(name: String, val rtcTrack: AudioTrack) :
Track(name, stateFromRTCMediaTrackState(rtcTrack.state())),
MediaTrack {
override val mediaTrack: MediaStreamTrack
get() = rtcTrack
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
interface AudioTrackPublication {
val audioTrack: AudioTrack?
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
import org.webrtc.MediaStreamTrack
interface MediaTrack {
val mediaTrack: MediaStreamTrack
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
class RemoteAudioTrack(
sid: Track.Sid,
playbackEnabled: Boolean = true,
name: String,
rtcTrack: org.webrtc.AudioTrack
) : AudioTrack(name, rtcTrack), RemoteTrack {
override var sid: Track.Sid = sid
var playbackEnabled = playbackEnabled
internal set
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
import livekit.Model
class RemoteAudioTrackPublication(
info: Model.TrackInfo,
track: Track? = null
) : RemoteTrackPublication(info, track), AudioTrackPublication {
override val audioTrack: AudioTrack?
get() = track as? AudioTrack
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
interface RemoteTrack {
var sid: Track.Sid
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
import livekit.Model
open class RemoteTrackPublication(info: Model.TrackInfo, track: Track? = null) :
TrackPublication(info, track) {
val remoteTrack: Track?
get() = track
val trackSubscribed: Boolean
get() = track != null
val publishPriority = Track.Priority.STANDARD
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
class RemoteVideoTrack(
override var sid: Sid,
var switchedOff: Boolean = false,
var priority: Priority? = null,
name: String,
rtcTrack: org.webrtc.VideoTrack
) : VideoTrack(name, rtcTrack), RemoteTrack
\ No newline at end of file
... ...
package io.livekit.android.room.track
import livekit.Model
class RemoteVideoTrackPublication(info: Model.TrackInfo, track: Track? = null) :
RemoteTrackPublication(info, track),
VideoTrackPublication {
override val videoTrack: VideoTrack?
get() = track as? VideoTrack
}
\ No newline at end of file
... ...
... ... @@ -3,7 +3,7 @@ package io.livekit.android.room.track
import org.webrtc.DataChannel
import org.webrtc.MediaStreamTrack
class Track(name: String, state: State) {
open class Track(name: String, state: State) {
var name = name
internal set
... ...
package io.livekit.android.room.track
import livekit.Model
open class TrackPublication(info: Model.TrackInfo, track: Track? = null) {
var track: Track? = track
internal set
var trackName: String
internal set
var trackSid: Track.Sid
private set
init {
trackSid = Track.Sid(info.sid)
trackName = info.name
}
fun updateFromInfo(info: Model.TrackInfo) {
trackSid = Track.Sid(info.sid)
trackName = info.name
}
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
import org.webrtc.MediaStreamTrack
import org.webrtc.VideoSink
import org.webrtc.VideoTrack
open class VideoTrack(name: String, val rtcTrack: VideoTrack) :
Track(name, stateFromRTCMediaTrackState(rtcTrack.state())),
MediaTrack {
override val mediaTrack: MediaStreamTrack
get() = rtcTrack
var enabled: Boolean
get() = rtcTrack.enabled()
set(value) {
rtcTrack.setEnabled(value)
}
fun addRenderer(renderer: VideoSink) = rtcTrack.addSink(renderer)
fun removeRenderer(renderer: VideoSink) = rtcTrack.addSink(renderer)
}
\ No newline at end of file
... ...
package io.livekit.android.room.track
interface VideoTrackPublication {
val videoTrack: VideoTrack?
}
\ No newline at end of file
... ...