element-hq / element-hq/element-call

Converge source of truth for call participants (livekit -> member events)

Open
#1,441 0 comments 0 reactions 0 assignees View on GitHub
T-Enhancement
Dominant language
TypeScript
Stars
996
Forks
213
Avg merge
1d 6h
Merged PRs (30d)
54

Description

### Your use case

### Current situation
Currently we use the livekit participants to decide who should be shown in the call.
Another idea is to use the call member events as the source of truth.
Affected parts:
- switch sfu: we would not need a timeout but just always show tiles for member events and just adjust the source for the stream which is shown whenever there is a membership change (sfu change)
- the participant list icon would always be in sync with the tiles
- We will get issues with disconnected users that have failed to remove there state event
- **Follow up discussion:** Is there a better way to solve the "heardbeat" topic. Currently we use `expires_ts` but maybe a seperate system would be better for matrixRTC. A method to inform everyone about beeing alive in a frequence closer to 10 seconds than 1 hour (what we have now with the `expires_ts`). Maybe we can learn/copy from read receipts.

### Have you considered any alternatives?

_No response_

### Additional context

_No response_

Contributor guide

Open the contributing guide

Research direction

Start by tracing where LiveKit participants and call member events determine call tiles and the participant-list icon, including the switch-SFU path. Clarify whether the change also includes handling disconnected users and replacing or revisiting expires_ts heartbeat behavior; done should define one consistent source of truth and resolve the stated membership-change and heartbeat cases.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
audio-video-rtc, frontend
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.