feat: livekit cast improvements - #7347
Conversation
|
Windows and Mac build successful in Unity Cloud! You can find a link to the downloadable artifact below. |
4609f6b to
46fbe57
Compare
46fbe57 to
dd905a9
Compare
|
@claude review |
|
Claude encountered an error —— View job I'll analyze this and get back to you. |
390bb2e to
66e96cc
Compare
43e595a to
ccdc25a
Compare
|
@claude review |
|
Claude finished @m3taphysics's task in 2m 53s —— View job Code Review
Issues Found🔴 Performance —
|
…rack-selector # Conflicts: # Explorer/Assets/DCL/Infrastructure/Utility/DecentralandUrls/DecentralandUrl.cs # Explorer/Assets/DCL/NetworkDefinitions/Browser/DecentralandUrlsSource.cs
…rack-selector # Conflicts: # Explorer/Assets/DCL/Infrastructure/Utility/DecentralandUrls/DecentralandUrl.cs # Explorer/Assets/DCL/NetworkDefinitions/Browser/DecentralandUrlsSource.cs
Co-authored-by: Copilot <copilot@github.com>
|
Claude finished @cyaiox's task in 1m 58s —— View job Security Dependency Review
Step 1 — Dependency Changes IdentifiedOne dependency changed (
Step 2 — Registry Metadata[Registry metadata] The package at [Registry metadata] The upstream LiveKit SDK README notes: "This SDK is currently in Developer Preview mode and not ready for production use" — but this refers to the upstream; the Decentraland fork has been in active use and production for this project. [PR] The single commit between the two locked hashes is "fix: collections thread safety (#65)" authored by NickKhalow (April 24, 2026). Three files changed (+39/−10 lines):
This is the minimal targeted fix for the Step 3 — AssessmentA. Provenance / source trust[PR] Publisher is Decentraland's own organization on GitHub — this is a first-party internal fork, not a third-party package. The author of this specific commit (NickKhalow) is an active reviewer on this very PR. [PR] [Inference] Because this is a Decentraland-owned repo, supply-chain risk from a malicious maintainer hijack is lower than for a third-party package, but the unpinned manifest is still a hygiene concern. B. Runtime capability[PR] The changed code is pure C# data-structure replacements (List → ConcurrentDictionary). No network capability, no native code, no reflection, no dynamic loading introduced by this diff. No new permissions or capabilities. C. Shipping impact[PR] D. Maintenance / known risk[Registry metadata] The repo is actively maintained by the Decentraland team. This specific commit was explicitly requested and reviewed by the core team on this PR thread. No CVEs or advisories found. E. Transitive risk[PR] The lock entry's transitive dependencies ( Step 4 — Risk Summary
Medium Risk DetailConcern: The manifest.json entry has no version pin — Evidence: [PR] What remains unknown: Whether the team's Unity project setup enforces the lock file in CI/build pipelines, or whether the lock file is always committed and treated as authoritative. Recommendation: Pin to a tag or commit in "com.decentraland.livekit-sdk": "https://github.com/decentraland/client-sdk-unity.git#c1d582d62644c33e53e3c521c53663f37ad24fbe"Or create a tagged release in the client-sdk-unity repo and reference it with Note: The content of this specific update (thread-safety fix using DEPENDENCY_REVIEW: NEEDS_ATTENTION
|
DafGreco
left a comment
There was a problem hiding this comment.
✔️ PR reviewed and approved by QA on both platforms following instructions playing both happy and un-happy path
Regressions for this ticket had been performed in order to verify that the normal flow is working as expected:
- [ ✔️] Backpack and wearables in world
- [ ✔️] Emotes in world and in backpack
- [✔️ ] Teleport with map/coordinates/Jump In
- [✔️ ] Chat and multiplayer
- [ ✔️] Profile card
- [ ✔️] Camera
- [ ✔️] Skybox
- [ ✔️] Settings
Evidence:




Pull Request Description
What does this PR change?
Enhances the LiveKit media player to support full Cast scenarios with multiple participants, automatic speaker tracking, presentation bot priority, data messaging between scenes and participants, and self-healing stream recovery.
Video routing
CurrentStreammode, video automatically follows the dominant speaker usingroom.ActiveSpeakerswith a 1.5s debounce to prevent flickeringpresentation-bot:are always prioritized — once locked on, speaker tracking is suppressed until the bot leavesTrackPublication.Mutedper frame and renders a black texture when mutedCurrentStream(first available track)Audio routing
AUDIO_RESCAN_INTERVAL_SECONDS), or immediately when a dead track is detectedData messaging API
PublishData(topic, data)— Send messages to a topic (rate-limited to 10 msg/s, 16KB cap)SubscribeToTopic(topic)— Subscribe to receive messages on a topicConsumeMessages(topic)— Consume buffered messages for a topicUpdateMetadata(metadata)— Update local participant metadata (broadcast by LiveKit)DataPipegracefully (InvalidProtocolBufferException)Stream metadata
getActiveVideoStreamsresponse withdisplayName,speaking,trackName,width,heightdisplayNamefield), falling back toNamethenIdentityDocumentation
docs/cast.mdcovering all new featuresTest Instructions
Prerequisites
Streaming Theatreto .zone/.orgTest Steps — Video routing
Test Steps — Presentation bot
Test Steps — Audio
Test Steps — Data messaging
SubscribeToTopic("test")PublishData("test", "hello")ConsumeMessages("test")— verify the message is returned with sender identityTest Steps — Screen share recovery
Additional Testing Notes
Quality Checklist
Code Review Reference
Please review our Code Review Standards before submitting.
Screenshots