David Zhao

Support for video dimensions

... ... @@ -3,6 +3,7 @@ package io.livekit.android.room
import com.github.ajalt.timberkt.Timber
import io.livekit.android.ConnectOptions
import io.livekit.android.dagger.InjectionNames
import io.livekit.android.room.track.Track
import io.livekit.android.room.track.TrackException
import io.livekit.android.room.util.*
import io.livekit.android.util.CloseableCoroutineScope
... ... @@ -81,14 +82,14 @@ constructor(
client.join(url, token, options)
}
suspend fun addTrack(cid: String, name: String, kind: LivekitModels.TrackType): LivekitModels.TrackInfo {
suspend fun addTrack(cid: String, name: String, kind: LivekitModels.TrackType, dimensions: Track.Dimensions? = null): LivekitModels.TrackInfo {
if (pendingTrackResolvers[cid] != null) {
throw TrackException.DuplicateTrackException("Track with same ID $cid has already been published!")
}
return suspendCoroutine { cont ->
pendingTrackResolvers[cid] = cont
client.sendAddTrack(cid, name, kind)
client.sendAddTrack(cid, name, kind, dimensions)
}
}
... ...
... ... @@ -4,6 +4,7 @@ import com.github.ajalt.timberkt.Timber
import com.google.protobuf.util.JsonFormat
import io.livekit.android.ConnectOptions
import io.livekit.android.dagger.InjectionNames
import io.livekit.android.room.track.Track
import io.livekit.android.util.safe
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
... ... @@ -193,12 +194,15 @@ constructor(
sendRequest(request)
}
fun sendAddTrack(cid: String, name: String, type: LivekitModels.TrackType) {
fun sendAddTrack(cid: String, name: String, type: LivekitModels.TrackType, dimensions: Track.Dimensions? = null) {
val addTrackRequest = LivekitRtc.AddTrackRequest.newBuilder()
.setCid(cid)
.setName(name)
.setType(type)
.build()
if (dimensions != null) {
addTrackRequest.width = dimensions.width
addTrackRequest.height = dimensions.height
}
val request = LivekitRtc.SignalRequest.newBuilder()
.setAddTrack(addTrackRequest)
... ...
... ... @@ -102,7 +102,7 @@ internal constructor(
val cid = track.rtcTrack.id()
val trackInfo =
engine.addTrack(cid = cid, name = track.name, kind = LivekitModels.TrackType.VIDEO)
engine.addTrack(cid = cid, name = track.name, kind = LivekitModels.TrackType.VIDEO, dimensions = track.dimensions)
val transInit = RtpTransceiver.RtpTransceiverInit(
RtpTransceiver.RtpTransceiverDirection.SEND_ONLY,
listOf(this.sid)
... ...
... ... @@ -17,6 +17,12 @@ class LocalVideoTrack(
private val options: LocalVideoTrackOptions,
rtcTrack: org.webrtc.VideoTrack
) : VideoTrack(name, rtcTrack) {
val dimensions: Dimensions
init {
dimensions = Dimensions(options.captureParams.width, options.captureParams.height)
}
fun startCapture() {
capturer.startCapture(options.captureParams.width, options.captureParams.height, options.captureParams.maxFps)
}
... ...
... ... @@ -45,6 +45,8 @@ open class Track(
}
}
class Dimensions(var width: Int, var height: Int)
open fun stop() {
rtcTrack.setEnabled(false)
rtcTrack.dispose()
... ...
... ... @@ -23,6 +23,11 @@ open class TrackPublication(
get() {
return track != null
}
var simulcasted: Boolean? = null
internal set
var dimensions: Track.Dimensions? = null
internal set
var participant: WeakReference<Participant>
... ... @@ -31,7 +36,7 @@ open class TrackPublication(
name = info.name
kind = Track.Kind.fromProto(info.type)
this.participant = WeakReference(participant)
muted = info.muted
updateFromInfo(info)
}
fun updateFromInfo(info: LivekitModels.TrackInfo) {
... ... @@ -39,5 +44,9 @@ open class TrackPublication(
name = info.name
kind = Track.Kind.fromProto(info.type)
muted = info.muted
if (kind == Track.Kind.VIDEO) {
simulcasted = info.simulcast
dimensions = Track.Dimensions(info.width, info.height)
}
}
}
... ...