* feat(visitors): Allow participants pane button.
* feat(visitors): Do not count the local participant when in visitor mode.
* feat(visitors): Use same buttons on web and native.
* feat(visitors): Always show the visitors count.
It was shown only for the main participants.
* feat(visitors): Skips showing local in participants pane when visitor.
* feat(jwt): Delay loading of avatar.
Only load avatar when jwt has been validated server-side (after connected). The drawback is not loading the avatar on pre-join page only the first time.
* squash: fix comments.
We have observed some failed recordings which are lacking the EBML
header. The only way in which that seems plausible is if the
dataavailable event is received while processing the stop event. This is
allegedly not possible, but it's the only plausible explanation, so
let's defend against that.
Extend the timeslice back to 5s too.
* chore(deps): replace moment.js with day.js for locale handling and
pin day.js version to 1.11.13 in package-lock.json
---------
Co-authored-by: Calin-Teodor <calin.chitu@8x8.com>
Rework sync so uploading multiple files at once or several moderators
uploading files simultaneously doesn't break synchronization.
The current room metadata plugin operates on <key,value> pairs and we
were using a generic "files" key and using a nested object as our value.
Since with every operation the entire object is replaced it's easy to
get out of sync because one needs to be sure to have the full state
before overwriting it.
This is not realistic.
We'll look into making the metadata plugin more flexible in order to
support add / delete operations also on nested objects, but for the time
being the following will suffice:
Use a key prefix, so each file has en entry in the room metadata, like
so: "files.<the file ID> -> file metadata". This means that when a file
is deleted we just empty the metadata. The metadata plugin doesn't
currently support removing existing keys.
After a lot of back and forth, WebM seems to be the only option we
really have. In terms of containers and codecs, here is the rundown:
- WebM, any codec: the resulting file is not seekable
- MKV, any codec: the resulting file is not seekable
- MP4, vp9 + opus: video artifacts and audio clipping, file is seekable
- MP4, av1 + AAC: all good, but not supported on Linux :-/
MP4 looked very promising but there is no combination that leads to
something that works reliably everywhere, oh well. In addition, MP4
files can be opened with QuickTime on macOS, but not with the codec
combination we'd use, so that is somewhat a disadvantage.
So, we are back to where we started: WebM with VP8 and opus. But we need
to fix the duration in a potentially long file... the trick is to _only_
fix the duration. We can do that by inserting the right segment in the
metadata section. Something we cannot do without reading the whole file
is create cue points, but players like VLC seem to work well without
them.