Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
livekitAndroidXuningTest
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
davidliu
2024-12-14 01:53:48 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2024-12-14 01:53:48 +0900
Commit
cda1df9ef3744db353f74278570d7c4a6412136b
cda1df9e
1 parent
df652cf8
Fix crash when setting publishing layers (#559)
隐藏空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
50 行增加
和
36 行删除
.changeset/eleven-schools-flash.md
livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt
.changeset/eleven-schools-flash.md
0 → 100644
查看文件 @
cda1df9
---
"
client-sdk-android"
:
patch
---
Fix crash when setting publishing layers
...
...
livekit-android-sdk/src/main/java/io/livekit/android/room/track/LocalVideoTrack.kt
查看文件 @
cda1df9
...
...
@@ -316,49 +316,58 @@ constructor(
sender: RtpSender,
qualities: List<LivekitRtc.SubscribedQuality>,
) {
val parameters = sender.parameters ?: return
val encodings = parameters.encodings ?: return
var hasChanged = false
if (encodings.firstOrNull()?.scalabilityMode != null) {
val encoding = encodings.first()
var maxQuality = ProtoVideoQuality.OFF
for (quality in qualities) {
if (quality.enabled && (maxQuality == ProtoVideoQuality.OFF || quality.quality.number > maxQuality.number)) {
maxQuality = quality.quality
if (isDisposed) {
LKLog.i { "attempted to set publishing layer for disposed video track." }
return
}
try {
val parameters = sender.parameters ?: return
val encodings = parameters.encodings ?: return
var hasChanged = false
if (encodings.firstOrNull()?.scalabilityMode != null) {
val encoding = encodings.first()
var maxQuality = ProtoVideoQuality.OFF
for (quality in qualities) {
if (quality.enabled && (maxQuality == ProtoVideoQuality.OFF || quality.quality.number > maxQuality.number)) {
maxQuality = quality.quality
}
}
}
if (maxQuality == ProtoVideoQuality.OFF) {
if (encoding.active) {
LKLog.v { "setting svc track to disabled" }
encoding.active = false
if (maxQuality == ProtoVideoQuality.OFF) {
if (encoding.active) {
LKLog.v { "setting svc track to disabled" }
encoding.active = false
hasChanged = true
}
} else if (!encoding.active) {
LKLog.v { "setting svc track to enabled" }
encoding.active = true
hasChanged = true
}
} else if (!encoding.active) {
LKLog.v { "setting svc track to enabled" }
encoding.active = true
hasChanged = true
}
} else {
// simulcast dynacast encodings
for (quality in qualities) {
val rid = EncodingUtils.ridForVideoQuality(quality.quality) ?: continue
val encoding = encodings.firstOrNull { it.rid == rid }
// use low quality layer settings for non-simulcasted streams
?: encodings.takeIf { it.size == 1 && quality.quality == LivekitModels.VideoQuality.LOW }?.first()
?: continue
if (encoding.active != quality.enabled) {
hasChanged = true
encoding.active = quality.enabled
LKLog.v { "setting layer ${quality.quality} to ${quality.enabled}" }
} else {
// simulcast dynacast encodings
for (quality in qualities) {
val rid = EncodingUtils.ridForVideoQuality(quality.quality) ?: continue
val encoding = encodings.firstOrNull { it.rid == rid }
// use low quality layer settings for non-simulcasted streams
?: encodings.takeIf { it.size == 1 && quality.quality == LivekitModels.VideoQuality.LOW }?.first()
?: continue
if (encoding.active != quality.enabled) {
hasChanged = true
encoding.active = quality.enabled
LKLog.v { "setting layer ${quality.quality} to ${quality.enabled}" }
}
}
}
}
if (hasChanged) {
// This refeshes the native code with the new information
sender.parameters = sender.parameters
if (hasChanged) {
// This refreshes the native code with the new information
sender.parameters = parameters
}
} catch (e: Exception) {
LKLog.w(e) { "Exception caught while setting publishing layers." }
return
}
}
...
...
请
注册
或
登录
后发表评论