Files
element-call-Github/locales
Timo K.andClaude Fable 5.1 8638d4f159 Fall back to publishing on a remote SFU if possible
Port of edf1feae from johannes/rtc-remote-publish onto the SDK split,
where
the MatrixRTC logic lives in sdk/ rather than src/state/CallViewModel/.

Where the original lands:

- getLocalTransport's remote fallback: the LiveKit backend's new
  findRemotePublishTransport (sdk/src/media-backend/livekit/
  RemotePublishTransport.ts), which tries the candidates from the
  js-sdk's
  getRemoteLivekitPublishCandidates oldest first and keeps the first
  whose
  homeserver issues a token with the publish grant.
  discoverLocalTransport
  asks the backend for it after the host's fallback, with a snapshot of
  the
  session's memberships from RTCParticipation, and throws
  MatrixRTCTransportMissingError where that finds nothing too. Transport
  discovery stays backend neutral: the MSC4195 token check is the
  backend's.
- LocalMember's "no delegation on a remote SFU" and the custom
  transport's
  server_name: LivekitBackend.prepareLocalTransport locates the
  transport on
  the homeserver it names (serverNameOfTransport) and skips the
  delegation
  probe where that is not our own.
- SessionBehaviors' membership.getTransportServerName: the same helper
  in
  LivekitBackend.mediaFor.
- decodeSFUJWTPayload, SFUJWTPayload.video.canPublish and the exported
  isCsApiUnavailable: sdk/src/media-backend/livekit/auth/.
- DeveloperSettingsTab, the widget capabilities, the locale string and
  the
  js-sdk pin (9405287c, 44.0.0): applied as is. The error boundary
  snapshots follow the string.

Tests: the LocalTransport cases go to RemotePublishTransport.test.ts and
LocalTransport.test.ts, the LocalMember remote case and the
SessionBehaviors
server-name case to LivekitBackend.test.ts, plus the memberships
snapshot in
RTCParticipation.test.ts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 16:09:11 +02:00
..
2026-04-22 12:29:57 +00:00
2026-07-20 14:58:37 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-07-20 14:58:37 +00:00
2025-02-28 13:38:53 +00:00
2026-07-20 14:58:37 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-07-20 14:58:37 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2026-04-22 12:29:57 +00:00
2025-02-28 13:38:53 +00:00
2026-04-22 12:29:57 +00:00