Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamic arrangement of tiles in a call in grid mode #11393

Open
kyteinsky opened this issue Jan 16, 2024 · 5 comments · May be fixed by #12361
Open

Dynamic arrangement of tiles in a call in grid mode #11393

kyteinsky opened this issue Jan 16, 2024 · 5 comments · May be fixed by #12361

Comments

@kyteinsky
Copy link

How to use GitHub

  • Please use the 👍 reaction to show that you are interested into the same feature.
  • 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.

Is your feature request related to a problem? Please describe.
In grid mode in a Talk call, if the sheer number of participants make the new tiles move to new pages navigable through arrow buttons, we don't see who's talking if that someone is on a different page. It gets harder if more than 2 people are talking and they are on different pages (grid pages) so keeping track becomes cumbersome.

Describe the solution you'd like
A dynamic grid which bumps a speaking tile to the first grid page. It might help to reduce the size of the tiles a bit for large number of participants to reduce tile swaps.

Describe alternatives you've considered
The alternative which I use and is present in the Talk app is the "Speaker view" but quick switches of different speakers makes almost half the screen change colours very quickly and is not ideal.
The tile swap can also be ported to the bottom participant list in this view as well but not really necessary.

Additional context

@SystemKeeper
Copy link
Contributor

I had a similar idea for talk iOS a while back, because we don’t have a speaker view there.

Also I think we should take into account the permissions, eg in webinar scenarios only some participants have publishing rights, these should move to the front and everyone without any publishing rights should be always at the end f the grid.

But also need to make sure that the grid is not constantly moving I guess …

@nickvergessen
Copy link
Member

Yeah, I agree that we should consider "resorting", but it should not be "fluid" but with some delay sensitivity.

At the moment e.g. also the speaker view changes on "coughing" and that should not happen. There should be like a ~500+ms active time required or even multiple seconds.

@nickvergessen
Copy link
Member

cc @jancborchardt for design input

@kyteinsky
Copy link
Author

@nickvergessen For a large grid size with more than 19 streams, the server and the client can work hand in hand to downsample the videos for grid view and a dynamic stream for speaker view (depending on the bandwidth). Does the downsampling consume lots of resources? I would assume this can be done at the transcoding step when the streams are sent out to the clients.

@SystemKeeper

Also I think we should take into account the permissions, eg in webinar scenarios only some participants have publishing rights, these should move to the front and everyone without any publishing rights should be always at the end f the grid.

I had a naive idea how the structure could look like. It could be two windows: the first grid array and the complete grid array (array term used to demarcate the area, does not have to be a nested array). Something like this:

[[_ _ _ _ _ _] _ _ _ _ _ _ _ _ _ _]

All the elements can have a metadata last_spoken_at and the first grid is filled with publishing rights participants at the start of the call.
If there is a person speaking and the person is in the larger array and not in the first grid, we can move the element to the inner array at the beginning pushing all other elements back by 1 until the original position of this element. The thing to note here is that the grid would only pick up the changes and replace the participant out of the inner array with the new one in its place without affecting the whole grid.
It looks a bit complex in retrospection but I can't think of any other way.

@jancborchardt
Copy link
Member

Agree with all the points said already. Se additions:

  • People we know to be "important" or likely speaking, like moderators, should be sorted first
  • The re-sorting only needs to happen if there are multiple pages
  • The re-sorting also only needs to happen if the speaker is not on the page you are looking at right now
  • We don't need to constantly update the order to have whoever talked most recently to be first in the list, as long as they are still on the current grid page

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: 🏗️ In progress
Development

Successfully merging a pull request may close this issue.

6 participants