Improve amount of signaling messages when joining a call
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 2.2k
- Forks
- 587
- Avg merge
- 18h 27m
- Merged PRs (30d)
- 333
Description
How to use GitHub
- Please use the 👍 reaction to show that you are affected by the same issue.
- Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
- Subscribe to receive notifications on status change and new comments.
Steps to reproduce
- Have an ongoing call with about 55 participants
- Join the call
Expected behaviour
You receive a reasonable amount of signaling messages
Actual behaviour
In the first 26s you receive around 1070 signaling messages.
Details
Received signaling messages by type:
1 type = answer;
16 type = offer;
1 type = answer;
695 type = mute;
351 type = nickChanged;
16 type = offer;
7 type = unmute;
https://github.com/nextcloud/spreed/pull/4181 implemented a mechanism to make sure that the initial status of all participants is actually received, which results in a high amount of signaling messages in the first 30s after joining a call. Additionally to those signaling message, some messages are also send/received via the webrtc data channel (nickChanged for example).
Some ideas
- Check that the messages from https://github.com/nextcloud/spreed/pull/4181 are sent only to the newly joined participant
- Only send speaking/speakingStopped messages through data channel, use signaling for everything else (only possible after all clients support all signaling message types)
- Ignore data channel messages client side, when the type is supported as a signaling message
- Introduce some kind of
statemessage where nickChanged, mute (audio/video) and raisedHand are combined into one single message - According to https://github.com/nextcloud/spreed/pull/4181 it is not possible to detect when to send the initial state to a newly joined participant. We could think about letting the newly joined participant request the state, this way it would be 1 message to all (the new participant requesting the state) and 1 message from each participant to the new participant (the actual state), so 56 messages in total.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the signaling changes in pull request #4181 and tracing how initial participant state and WebRTC data-channel messages are handled when joining a call. Done means preserving the required participant state while substantially reducing the signaling messages received during the first 30 seconds.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- audio-video-rtc, performance
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100