Skip to content

fix: Stabilize remote audio listener lifecycle - #19

Merged
lanyue-llk merged 1 commit into
lex-mainfrom
fix/remote-audio-playback-stability
Aug 6, 2026
Merged

fix: Stabilize remote audio listener lifecycle#19
lanyue-llk merged 1 commit into
lex-mainfrom
fix/remote-audio-playback-stability

Conversation

@lanyue-llk

Copy link
Copy Markdown

Goal

避免远端参与者列表变化触发音频渲染 effect 重建,从而重复注册监听器、清理并重建音频播放链路,提升连续语音播放稳定性。

Design

  • 直接从 LiveKit room 读取现有远端参与者,并通过 room 的连接/断开事件维护监听器。
  • 按参与者保存唯一 cleanup,防止重复注册;参与者断开时立即释放对应监听器。
  • 不改变轨道过滤、音量、自动播放恢复或可观测性协议。

Validation

  • pnpm test

    ✅ passed: 157 tests passed

  • pnpm lint

    ✅ passed

  • pnpm build

    ✅ passed

Risk

  • 变更仅收敛远端音频监听器生命周期,不涉及“收音中/闭麦中”视频状态牌或输入门禁。
  • 生产构建保留上游 onnxruntime-web 动态依赖警告,无新增构建错误。

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Claude finished @lanyue-llk's task in 2m 0s —— View job


任务清单

  • 收集 PR 上下文(diff、变更文件)
  • 阅读 components/livekit/filtered-audio-renderer.tsxtests/observability.test.mjs
  • 审查 LiveKit 生命周期 / React hook 清理等关键点
  • 输出审查结论

Review 结论

通过

问题及建议

未发现需要阻塞合并的问题。残余风险:

  • components/livekit/filtered-audio-renderer.tsx:594:effect 依赖数组仍保留 excludeTrackNamesvolumedebugAudio,这几项变化时仍会触发整个监听器 teardown/rebuild(含 cleanup() 销毁全部远端音频元素),本 PR 只解决了 participants 变化导致的重建问题,其余触发源未收敛,如上层重新渲染时 excludeTrackNames 引用不稳定仍可能复现类似抖动(目前 components/app/app.tsx:23 传入的是 appConfig.excludeAudioTracks,一般稳定,可接受)。
  • tests/observability.test.mjs:350-361:新增断言仅对源码文本做正则匹配(如检查 room.remoteParticipants.forEach(...) 字符串是否存在),未实际模拟 ParticipantConnected/ParticipantDisconnected 事件验证监听器去重、断开时清理等运行时行为,属于该文件既有测试风格,非本次改动引入的新问题,仅供后续补充集成测试参考。

核心改动本身正确:以 room.remoteParticipants + RoomEvent.ParticipantConnected/Disconnected 替代 useRemoteParticipants() 后不再将参与者数组放入 effect 依赖,避免任一参与者增减都触发全量音频监听器/元素重建;新增的 participantListenerCleanups Map 按参与者去重、断开时立即调用 detachParticipantListeners 释放监听器,也修复了潜在的重复订阅问题。变更范围克制,未触及音量/自动播放恢复等逻辑。

@lanyue-llk
lanyue-llk merged commit 0478c79 into lex-main Aug 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant