Skip to content

Commit cda1df9

Browse files
authored
Fix crash when setting publishing layers (#559)
1 parent df652cf commit cda1df9

File tree

2 files changed

+50
-36
lines changed

2 files changed

+50
-36
lines changed

.changeset/eleven-schools-flash.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"client-sdk-android": patch
3+
---
4+
5+
Fix crash when setting publishing layers

livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt

Lines changed: 45 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -316,49 +316,58 @@ constructor(
316316
sender: RtpSender,
317317
qualities: List<LivekitRtc.SubscribedQuality>,
318318
) {
319-
val parameters = sender.parameters ?: return
320-
val encodings = parameters.encodings ?: return
321-
var hasChanged = false
322-
323-
if (encodings.firstOrNull()?.scalabilityMode != null) {
324-
val encoding = encodings.first()
325-
var maxQuality = ProtoVideoQuality.OFF
326-
for (quality in qualities) {
327-
if (quality.enabled && (maxQuality == ProtoVideoQuality.OFF || quality.quality.number > maxQuality.number)) {
328-
maxQuality = quality.quality
319+
if (isDisposed) {
320+
LKLog.i { "attempted to set publishing layer for disposed video track." }
321+
return
322+
}
323+
try {
324+
val parameters = sender.parameters ?: return
325+
val encodings = parameters.encodings ?: return
326+
var hasChanged = false
327+
328+
if (encodings.firstOrNull()?.scalabilityMode != null) {
329+
val encoding = encodings.first()
330+
var maxQuality = ProtoVideoQuality.OFF
331+
for (quality in qualities) {
332+
if (quality.enabled && (maxQuality == ProtoVideoQuality.OFF || quality.quality.number > maxQuality.number)) {
333+
maxQuality = quality.quality
334+
}
329335
}
330-
}
331336

332-
if (maxQuality == ProtoVideoQuality.OFF) {
333-
if (encoding.active) {
334-
LKLog.v { "setting svc track to disabled" }
335-
encoding.active = false
337+
if (maxQuality == ProtoVideoQuality.OFF) {
338+
if (encoding.active) {
339+
LKLog.v { "setting svc track to disabled" }
340+
encoding.active = false
341+
hasChanged = true
342+
}
343+
} else if (!encoding.active) {
344+
LKLog.v { "setting svc track to enabled" }
345+
encoding.active = true
336346
hasChanged = true
337347
}
338-
} else if (!encoding.active) {
339-
LKLog.v { "setting svc track to enabled" }
340-
encoding.active = true
341-
hasChanged = true
342-
}
343-
} else {
344-
// simulcast dynacast encodings
345-
for (quality in qualities) {
346-
val rid = EncodingUtils.ridForVideoQuality(quality.quality) ?: continue
347-
val encoding = encodings.firstOrNull { it.rid == rid }
348-
// use low quality layer settings for non-simulcasted streams
349-
?: encodings.takeIf { it.size == 1 && quality.quality == LivekitModels.VideoQuality.LOW }?.first()
350-
?: continue
351-
if (encoding.active != quality.enabled) {
352-
hasChanged = true
353-
encoding.active = quality.enabled
354-
LKLog.v { "setting layer ${quality.quality} to ${quality.enabled}" }
348+
} else {
349+
// simulcast dynacast encodings
350+
for (quality in qualities) {
351+
val rid = EncodingUtils.ridForVideoQuality(quality.quality) ?: continue
352+
val encoding = encodings.firstOrNull { it.rid == rid }
353+
// use low quality layer settings for non-simulcasted streams
354+
?: encodings.takeIf { it.size == 1 && quality.quality == LivekitModels.VideoQuality.LOW }?.first()
355+
?: continue
356+
if (encoding.active != quality.enabled) {
357+
hasChanged = true
358+
encoding.active = quality.enabled
359+
LKLog.v { "setting layer ${quality.quality} to ${quality.enabled}" }
360+
}
355361
}
356362
}
357-
}
358363

359-
if (hasChanged) {
360-
// This refeshes the native code with the new information
361-
sender.parameters = sender.parameters
364+
if (hasChanged) {
365+
// This refreshes the native code with the new information
366+
sender.parameters = parameters
367+
}
368+
} catch (e: Exception) {
369+
LKLog.w(e) { "Exception caught while setting publishing layers." }
370+
return
362371
}
363372
}
364373

0 commit comments

Comments
 (0)