Committed by
GitHub
Fix crash when setting publishing layers (#559)
正在显示
2 个修改的文件
包含
50 行增加
和
36 行删除
.changeset/eleven-schools-flash.md
0 → 100644
| @@ -316,49 +316,58 @@ constructor( | @@ -316,49 +316,58 @@ constructor( | ||
| 316 | sender: RtpSender, | 316 | sender: RtpSender, |
| 317 | qualities: List<LivekitRtc.SubscribedQuality>, | 317 | qualities: List<LivekitRtc.SubscribedQuality>, |
| 318 | ) { | 318 | ) { |
| 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 | + } | ||
| 329 | } | 335 | } |
| 330 | - } | ||
| 331 | 336 | ||
| 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 | ||
| 336 | hasChanged = true | 346 | hasChanged = true |
| 337 | } | 347 | } |
| 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 | + } | ||
| 355 | } | 361 | } |
| 356 | } | 362 | } |
| 357 | - } | ||
| 358 | 363 | ||
| 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 | ||
| 362 | } | 371 | } |
| 363 | } | 372 | } |
| 364 | 373 |
-
请 注册 或 登录 后发表评论