正在显示
6 个修改的文件
包含
28 行增加
和
6 行删除
| @@ -3,6 +3,7 @@ package io.livekit.android.room | @@ -3,6 +3,7 @@ package io.livekit.android.room | ||
| 3 | import com.github.ajalt.timberkt.Timber | 3 | import com.github.ajalt.timberkt.Timber |
| 4 | import io.livekit.android.ConnectOptions | 4 | import io.livekit.android.ConnectOptions |
| 5 | import io.livekit.android.dagger.InjectionNames | 5 | import io.livekit.android.dagger.InjectionNames |
| 6 | +import io.livekit.android.room.track.Track | ||
| 6 | import io.livekit.android.room.track.TrackException | 7 | import io.livekit.android.room.track.TrackException |
| 7 | import io.livekit.android.room.util.* | 8 | import io.livekit.android.room.util.* |
| 8 | import io.livekit.android.util.CloseableCoroutineScope | 9 | import io.livekit.android.util.CloseableCoroutineScope |
| @@ -81,14 +82,14 @@ constructor( | @@ -81,14 +82,14 @@ constructor( | ||
| 81 | client.join(url, token, options) | 82 | client.join(url, token, options) |
| 82 | } | 83 | } |
| 83 | 84 | ||
| 84 | - suspend fun addTrack(cid: String, name: String, kind: LivekitModels.TrackType): LivekitModels.TrackInfo { | 85 | + suspend fun addTrack(cid: String, name: String, kind: LivekitModels.TrackType, dimensions: Track.Dimensions? = null): LivekitModels.TrackInfo { |
| 85 | if (pendingTrackResolvers[cid] != null) { | 86 | if (pendingTrackResolvers[cid] != null) { |
| 86 | throw TrackException.DuplicateTrackException("Track with same ID $cid has already been published!") | 87 | throw TrackException.DuplicateTrackException("Track with same ID $cid has already been published!") |
| 87 | } | 88 | } |
| 88 | 89 | ||
| 89 | return suspendCoroutine { cont -> | 90 | return suspendCoroutine { cont -> |
| 90 | pendingTrackResolvers[cid] = cont | 91 | pendingTrackResolvers[cid] = cont |
| 91 | - client.sendAddTrack(cid, name, kind) | 92 | + client.sendAddTrack(cid, name, kind, dimensions) |
| 92 | } | 93 | } |
| 93 | } | 94 | } |
| 94 | 95 |
| @@ -4,6 +4,7 @@ import com.github.ajalt.timberkt.Timber | @@ -4,6 +4,7 @@ import com.github.ajalt.timberkt.Timber | ||
| 4 | import com.google.protobuf.util.JsonFormat | 4 | import com.google.protobuf.util.JsonFormat |
| 5 | import io.livekit.android.ConnectOptions | 5 | import io.livekit.android.ConnectOptions |
| 6 | import io.livekit.android.dagger.InjectionNames | 6 | import io.livekit.android.dagger.InjectionNames |
| 7 | +import io.livekit.android.room.track.Track | ||
| 7 | import io.livekit.android.util.safe | 8 | import io.livekit.android.util.safe |
| 8 | import kotlinx.serialization.decodeFromString | 9 | import kotlinx.serialization.decodeFromString |
| 9 | import kotlinx.serialization.encodeToString | 10 | import kotlinx.serialization.encodeToString |
| @@ -193,12 +194,15 @@ constructor( | @@ -193,12 +194,15 @@ constructor( | ||
| 193 | sendRequest(request) | 194 | sendRequest(request) |
| 194 | } | 195 | } |
| 195 | 196 | ||
| 196 | - fun sendAddTrack(cid: String, name: String, type: LivekitModels.TrackType) { | 197 | + fun sendAddTrack(cid: String, name: String, type: LivekitModels.TrackType, dimensions: Track.Dimensions? = null) { |
| 197 | val addTrackRequest = LivekitRtc.AddTrackRequest.newBuilder() | 198 | val addTrackRequest = LivekitRtc.AddTrackRequest.newBuilder() |
| 198 | .setCid(cid) | 199 | .setCid(cid) |
| 199 | .setName(name) | 200 | .setName(name) |
| 200 | .setType(type) | 201 | .setType(type) |
| 201 | - .build() | 202 | + if (dimensions != null) { |
| 203 | + addTrackRequest.width = dimensions.width | ||
| 204 | + addTrackRequest.height = dimensions.height | ||
| 205 | + } | ||
| 202 | 206 | ||
| 203 | val request = LivekitRtc.SignalRequest.newBuilder() | 207 | val request = LivekitRtc.SignalRequest.newBuilder() |
| 204 | .setAddTrack(addTrackRequest) | 208 | .setAddTrack(addTrackRequest) |
| @@ -102,7 +102,7 @@ internal constructor( | @@ -102,7 +102,7 @@ internal constructor( | ||
| 102 | 102 | ||
| 103 | val cid = track.rtcTrack.id() | 103 | val cid = track.rtcTrack.id() |
| 104 | val trackInfo = | 104 | val trackInfo = |
| 105 | - engine.addTrack(cid = cid, name = track.name, kind = LivekitModels.TrackType.VIDEO) | 105 | + engine.addTrack(cid = cid, name = track.name, kind = LivekitModels.TrackType.VIDEO, dimensions = track.dimensions) |
| 106 | val transInit = RtpTransceiver.RtpTransceiverInit( | 106 | val transInit = RtpTransceiver.RtpTransceiverInit( |
| 107 | RtpTransceiver.RtpTransceiverDirection.SEND_ONLY, | 107 | RtpTransceiver.RtpTransceiverDirection.SEND_ONLY, |
| 108 | listOf(this.sid) | 108 | listOf(this.sid) |
| @@ -17,6 +17,12 @@ class LocalVideoTrack( | @@ -17,6 +17,12 @@ class LocalVideoTrack( | ||
| 17 | private val options: LocalVideoTrackOptions, | 17 | private val options: LocalVideoTrackOptions, |
| 18 | rtcTrack: org.webrtc.VideoTrack | 18 | rtcTrack: org.webrtc.VideoTrack |
| 19 | ) : VideoTrack(name, rtcTrack) { | 19 | ) : VideoTrack(name, rtcTrack) { |
| 20 | + val dimensions: Dimensions | ||
| 21 | + | ||
| 22 | + init { | ||
| 23 | + dimensions = Dimensions(options.captureParams.width, options.captureParams.height) | ||
| 24 | + } | ||
| 25 | + | ||
| 20 | fun startCapture() { | 26 | fun startCapture() { |
| 21 | capturer.startCapture(options.captureParams.width, options.captureParams.height, options.captureParams.maxFps) | 27 | capturer.startCapture(options.captureParams.width, options.captureParams.height, options.captureParams.maxFps) |
| 22 | } | 28 | } |
| @@ -45,6 +45,8 @@ open class Track( | @@ -45,6 +45,8 @@ open class Track( | ||
| 45 | } | 45 | } |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | + class Dimensions(var width: Int, var height: Int) | ||
| 49 | + | ||
| 48 | open fun stop() { | 50 | open fun stop() { |
| 49 | rtcTrack.setEnabled(false) | 51 | rtcTrack.setEnabled(false) |
| 50 | rtcTrack.dispose() | 52 | rtcTrack.dispose() |
| @@ -23,6 +23,11 @@ open class TrackPublication( | @@ -23,6 +23,11 @@ open class TrackPublication( | ||
| 23 | get() { | 23 | get() { |
| 24 | return track != null | 24 | return track != null |
| 25 | } | 25 | } |
| 26 | + var simulcasted: Boolean? = null | ||
| 27 | + internal set | ||
| 28 | + var dimensions: Track.Dimensions? = null | ||
| 29 | + internal set | ||
| 30 | + | ||
| 26 | 31 | ||
| 27 | var participant: WeakReference<Participant> | 32 | var participant: WeakReference<Participant> |
| 28 | 33 | ||
| @@ -31,7 +36,7 @@ open class TrackPublication( | @@ -31,7 +36,7 @@ open class TrackPublication( | ||
| 31 | name = info.name | 36 | name = info.name |
| 32 | kind = Track.Kind.fromProto(info.type) | 37 | kind = Track.Kind.fromProto(info.type) |
| 33 | this.participant = WeakReference(participant) | 38 | this.participant = WeakReference(participant) |
| 34 | - muted = info.muted | 39 | + updateFromInfo(info) |
| 35 | } | 40 | } |
| 36 | 41 | ||
| 37 | fun updateFromInfo(info: LivekitModels.TrackInfo) { | 42 | fun updateFromInfo(info: LivekitModels.TrackInfo) { |
| @@ -39,5 +44,9 @@ open class TrackPublication( | @@ -39,5 +44,9 @@ open class TrackPublication( | ||
| 39 | name = info.name | 44 | name = info.name |
| 40 | kind = Track.Kind.fromProto(info.type) | 45 | kind = Track.Kind.fromProto(info.type) |
| 41 | muted = info.muted | 46 | muted = info.muted |
| 47 | + if (kind == Track.Kind.VIDEO) { | ||
| 48 | + simulcasted = info.simulcast | ||
| 49 | + dimensions = Track.Dimensions(info.width, info.height) | ||
| 50 | + } | ||
| 42 | } | 51 | } |
| 43 | } | 52 | } |
-
请 注册 或 登录 后发表评论