We have a custom UI where we use lib-jitsi-meet. With the aim of limiting the bandwidth used, to reduce server costs, we have the following requirements:
(I) A stage of one or more participants for which we want to receive good quality (either 720p or 360p).
(II) A display of the rest of the participants in a small vertical scrollable list of thumbnails for which we want to receive low quality (180p).
(III) Detect the visible participants so that we don’t get video for unseen ones (like the ones hidden in the scrollable list).
We have achieved these requirements by doing this:
(1) The participants that are not in this stage, call:
(2) The participants that are in this stage, call:
(3) In all cases we max the receiver video resolution to 720p in order to get that for remote staged participants:
(4) In order to achieve the requirement (3), we are detecting the visible participants (either in stage or not) so we do:
The problems that we have with this implementation are the following:
(a) For participants not in stage (step 1) we always get “Poor” connection quality (between 6 and 9%), probably because we are sending low quality video even with good bandwidth (to reduce data transfer costs). Packet loss is low in these cases, between 0 and 1%. We don’t know if this is a bug or if this is expected.
(b) To solve (a), we tried calling this for all participants to send 720p (to send their three simulcast layers 720p, 360p and 180p so that video bridge decides which to send to each remote participant):
However this results in others getting 720p video for the small thumbnails not on stage. This happens because: For
setLastN to show all visible participants (even if muted), we have to call
selectParticipants to tell the Video Bridge which are the ones we want to get… however that makes them all receive high resolution if they have good bandwidth. So we were thinking if it would be possible to separate selectParticipants in two calls, for example something like this (pseudocode):
And then we can still use:
We are willing to help with pull requests for either fix (a) if it is a bug, or implement (b) if you consider this would be possible and helpful for the community. Or maybe you have another ideas that can help us.
By the way I watched this video it was super helpful https://www.youtube.com/watch?v=SAaa8jYdtx4 for understanding how simulcast works. Also we have studied the following documentation:
Thank you very much for the good documentation, the good support and for the amazing Jitsi suite. We appreciate any help you could give us for this scenario.