Commit Graph

970 Commits

Author SHA1 Message Date
Scroody
8272b487f3 Testing 2023-05-16 14:39:56 -03:00
Anton Georgiev
510c94cfa7 Merge branch 'v2.6.x-release' of github.com:bigbluebutton/bigbluebutton into may16-merge 2023-05-16 13:35:47 -04:00
prlanzarin
a693133b5a fix: remove legacy iOS UA checks that borked camera sharing in iPads
There are a couple of hardcoded UA checks targeted at iOS endpoints
introduced circa 2.2-beta. One of those pops up an "unsupported" toast
when the device joins a conference - the other blocks camera
sharing.

Those checks are outdated since we transitioned to minBrowserVersions
approach that redirects the client to an unsupported view upon join. I
also assume the checks are bugged since, in some environments, it flags
iPadOS endpoints as iOS and version-checks it to a hardcoded "12.2"
threshold (which is incompatible with iPadOS versioning). That caused
camera sharing not to work, which is a false negative.

I consider the checks to be outdated, so I removed all references to
them.
2023-05-15 13:22:52 -03:00
Anton Georgiev
4e851a7571 Merge branch 'v2.6.x-release' of github.com:bigbluebutton/bigbluebutton into merge-267-27 2023-05-15 11:51:17 -04:00
Ramón Souza
aca4179248 add isTalking animation 2023-05-12 11:17:04 -03:00
Ramón Souza
102063ca60 disable drop bg, pin and focus for grid items 2023-05-12 10:34:35 -03:00
Ramón Souza
1d27aaa35b fix grid on user leave 2023-05-12 09:03:54 -03:00
Anton Georgiev
1c9ba032a6
Merge pull request #17554 from AtilaU19/reconection-fixes
fix: overlapping screen end alerts and invisible cameras on reconnections
2023-05-11 17:15:12 -04:00
Ramón Souza
ffe8754733 add grid layout 2023-05-11 17:20:26 -03:00
KDSBrowne
1b51377147 fix getContentAnchorEl console error 2023-05-10 01:31:48 +00:00
Ramón Souza
af8556e026 Merge remote-tracking branch 'upstream/v2.6.x-release' into 26-27-apr24 2023-04-24 17:15:47 -03:00
AtilaU19
6cb30af4e3 fix(webcams): insivible grid correction 2023-04-13 10:36:55 -03:00
GuiLeme
5eb29e0ab5 [issue-16954] - merge upstream/v2.7.x-release 2023-04-11 11:02:00 -03:00
prlanzarin
5d214cb27d fix(video): ensure streams are always attached on reconnections
There's a scenario where remote streams won't be attached again if the
sharer experienced a Meteor/client disconnection.
The disconnection empties some necessary user data temporarily, which
causes the corresponding video-list-item to be unmounted while the peer
persists for a little longer.
If the sharer re-connects fast enough, video-list-item will re-mount but
will 1) miss the current stream state (ie stuck in loading) 2) fail to
re-attach the streams since the peer was already flagged as attached.

Ensure remote camera streams are always attached and shown by:
  - always propagating the current stream state on attachment
  - refactoring the attachment pre-requisites away from a static boolean
    to a required data + diff check (based on target and current
    attached streams)
2023-04-11 09:36:13 -03:00
Anton Georgiev
72c575b911 Merge branch 'v2.6.x-release' of github.com:bigbluebutton/bigbluebutton into merge-apr-6 2023-04-06 11:50:26 -04:00
Anton Georgiev
e2dc7da98a
Merge pull request #16828 from prlanzarin/u27/fix/ss-cam-reconn
fix: re-connection improvements for cameras and screen sharing
2023-04-05 16:13:01 -04:00
prlanzarin
f4b4de6f88 fix(video): prevent a client crash when cleaning up video peers
There's a very rare scenario where the client may crash if a video
publisher is released before the source stream had its inactivation
listener callback set up.

This adds a type check to the inactivation handler before trying to
clean it up.
2023-04-05 13:31:59 -03:00
prlanzarin
be6a23a003 feat: add option to force/extend gathering window in SFU components
There's an edge case in finnicky networks where ALG-like firewalls
tamper with USE-CANDIDATE STUN packets and, consequently, bork ICE-lite
connectivity establishment. The odd part is that client-side gathering
seems to complete if intermediate STUN bindings work (before the final
USE-CANDIDATE), which may cause the peer not to generate relay
candidates == connectivity fails.

This adds the `public.kurento.gatheringTimeout` option to forcefully extend
the candidate gathering window in peers that act as offerers. The
behavior is as follows: if the flag is set (ms), the peer will wait
either the gathering completed stage or, _at most_,
public.kurento.gatheringTimeout ms before proceeding with calls chained
to setLocalDescription.

This option is disabled by default and intentionally ommited from the
base settings.yml file as to not encourage its use. Don't use it unless
you know what you're doing :).
2023-04-05 13:22:38 -03:00
Ramón Souza
bcd504b749 Merge remote-tracking branch 'upstream/v2.7.x-release' into lodash-radash 2023-04-05 09:42:05 -03:00
Anton B
3a7b59c19a test: add video quality and background webcam tests 2023-03-29 11:16:47 -03:00
GuiLeme
81ae4e9ca6 [issue-16954] - Adjusting modal priorities 2023-03-29 11:08:56 -03:00
GuiLeme
9b39decec7 [issue-16954] - Fix minor issues and cleanning of the old modal structure traces 2023-03-29 11:02:14 -03:00
Anton B
4b5d4e9e2a Merge remote-tracking branch 'upstream/v2.6.x-release' into webcam-tests 2023-03-29 10:29:58 -03:00
GuiLeme
5f3296fdb1 [issue-16954] - last migrations - VideoPreview and drag and drop of background 2023-03-27 12:36:25 -03:00
GuiLeme
d4bd29ea67 [issue-16954] - Migrating userOptions and remove user modals 2023-03-23 11:56:00 -03:00
Anton Georgiev
372e17ca08 fix: check if defined before checking .role 2023-03-14 16:39:06 -04:00
prlanzarin
3bddbb96cf fix(video): signaling and reconnection edge cases
There are still a bunch of edge cases and issues with reconnection
scenarios for video:
  - Signaling socket refuses to reconnect once maxRetries expire
  - Race conditions on local stream attachment: local camera wouldn't be
    correctly rendered _if_ the attached stream existed _without_ video
    tracks yet
  - Video tracks leak on local streams when replacing them (virtual bgs)
  - Completely ignoring Meteor state when trying to reconnect cameras
  - Streams aren't proactively stopped when the signaling socket dies
  - Outbound request queues aren't isolated by stream nor are they
    flushed when a newer peer with the same ID is created
  - Server originated negotiation errors won't trigger a local peer
    cleanup - thus leaving dangling peers that take way too long to
    reconnect

This commit fixes or improves all of the aforementioned issues, +:
  - Remove unused arguments in the peer (client->SFU) 'start' request
  - Prevent crashes when trying to render video-list-items without user
    data (which might happen on re-connections)
2023-03-08 15:49:35 -03:00
prlanzarin
a83f3b675e fix(video): add proper signaling WS heartbeat, +
video-provider's current ping-pong is as good as nothing in 2.5+. We
were counting on Meteor's (and consequently the component's mount state)
before 2.5 to act as a "heartbeat" as far as the socket is concerned.
The ping-pong served only to sustain traffic for finnicky,
traffic-dependant firewall.
Since 2.5, the component's state is _kind of_ detached from Meteor's -
which means it won't unmount when Meteor disconnects. That causes the
video-provider websocket to lose its borrowed heartbeat and leads to a
bunch of reconnectiong inconsistencies, the worst of them being a stuck,
useless signaling socket that will cause cameras not to work until a
client refresh.

This commit does the following:
  - Implements actual heartbeat checks to trigger signaling socket
    reconnects when necessary, all within the scope of video-provider
  - Remove borked, eons old 'offline'/'online' event handlers: they were
    causing unnecessary camera drops AND causing video-provider to
    generate a stuck signaling socket
  - Properly catch WebSockets.send errors
2023-03-08 15:46:51 -03:00
prlanzarin
e9f0a7347c fix(video): properly render reconnecting view
The stream state change handler in video-list-item is using a component
state reference inside a DOM event callback - which means it is always
presuming `isStreamHealthy` is false (initial value). That prevents the
health state from actually transitioning when necessary (and
consequently rendering the reconnecting view in video-list item).

This commit removes the state-based transition check in the state change
handler and unifies the reconnecting view to use the username
placeholde (replacing the loading spinners).
2023-03-08 15:46:44 -03:00
Ramón Souza
d181eba1c2 replace lodash.throttle with native function 2023-03-02 10:25:08 -03:00
Ramón Souza
0a622eff32 replace lodash throttle with standalone package 2023-03-01 15:13:29 -03:00
Ramón Souza
a60d817041 replace lodash debounce 2023-03-01 10:39:04 -03:00
Ramón Souza
5c5433296b replace lodash range, partition and upperFirst 2023-02-22 13:52:18 -03:00
KDSBrowne
73cd791199 add aria label to webcam options with user name when small 2023-02-06 16:11:05 +00:00
Anton Georgiev
36b45c0824
Merge pull request #16172 from schrd/fix-issue-16171
fix: Only cache TURN Servers as long as credentials are valid and force firefox to use the turn server
2023-01-05 06:13:31 -05:00
Anton Georgiev
2d742b654c
Merge pull request #15919 from prlanzarin/u26/fix/cam-reconn-issues
fix(webcam): intermittent client crashes when sharing camera (2.6)
2022-12-23 09:12:54 -05:00
Anton Georgiev
2cc37ff375
Merge pull request #16127 from ramonlsouza/fix-sortname
fix: incorrect userlist order if name starts with a space
2022-12-22 12:46:05 -05:00
Daniel Schreiber
74f37db4fa Get rid of forceRelayOnFirefox
Firefox has a buggy ICE implementation and needs WebRTC media traffic to
be routed through a turn server to work reliably with mediasoup.

Use the information fetched by the STUN API to determine if the operator
has configured a turn server. If there is one force firefox to use it.

Closes #16164
2022-12-18 23:17:14 +01:00
Ramón Souza
0cf1d09978 add early return to video list item if user data is unavailable 2022-12-15 14:49:47 -03:00
Ramón Souza
1f2562e95c sort users by sortName 2022-12-13 15:00:13 -03:00
Ramón Souza
cdc2bc7e04
Merge pull request #15770 from JoVictorNunes/store-webcam-microphone
improvement: share audio and video setup among different sessions
2022-11-09 10:37:52 -03:00
Joao Victor
f1007fb7b6 Use the new config option from #15413 - A centralized way of defining which storage to use (Session or Local) 2022-11-03 17:57:54 -03:00
prlanzarin
0f9cc40549 fix(webcam): client crash due to undefined intl var 2022-10-27 16:25:13 +00:00
prlanzarin
341665e631 fix(webcam): client intermittently crashes when sharing camera
Under some specific scenarios, the virtual background restore code might
kick in _before_ the preloaded MediaStream is actually assigned to the
peer instance. That causes a crash because the peer attachment code
(where the vbg restore is triggered) tries to access the device ID of
said MediaStream - and it is undefined in the first place because it was
only being set in after the initial offer is generated which is an async
procedure.

This commit guarantees a preloaded stream is set before the peer is
flagged as created - so it's accessible by the attachment code.
It also checks whether there's a MediaStream available when trying to
restore VBGs to prevent undefined behaviors.
2022-10-27 16:25:06 +00:00
Ramón Souza
43cf7cfc69 adjust audio/video dropdown position 2022-10-24 14:44:33 -03:00
Ramón Souza
1764f7be17
Merge pull request #15787 from KDSBrowne/26-update-menu-ids
Update Menu Ids to Remove Duplicates
2022-10-24 10:35:06 -03:00
Ramón Souza
e1a22b7aab
Merge pull request #15788 from KDSBrowne/26-a11y-fixes-03
Add Dropdown to Tab Order and Hover / Focus Styles
2022-10-24 10:23:47 -03:00
Ramón Souza
8ed142a522 Merge remote-tracking branch 'upstream/v2.5.x-release' into merge-258-26 2022-10-21 14:43:23 -03:00
KDSBrowne
9c6a6298e2 update menu ids to be unique 2022-10-05 21:54:59 +00:00
KDSBrowne
ab63779b2f add video settings menu to tab order 2022-10-04 14:21:52 +00:00
Joao Victor
63b4ba7672 fix: undefined camera profile 2022-10-03 08:10:08 -03:00
Joao Victor
3f07430ff4 improvement: store last shared webcam 2022-10-03 08:09:03 -03:00
Joao Victor
ab40586702 fix: allow video settings to open 2022-09-22 09:37:24 -03:00
Anton B
3b04dbff48 test: add pinning and unpinning test, improve share webcam test and add selectors 2022-09-12 14:12:35 -03:00
Joao Victor
396f5320a4 feat(camera): set camera brightness 2022-08-26 11:50:46 -03:00
prlanzarin
0e162f1cda feat: configurable DSCP marking for WebRTC media
RTCRTPSender exposes DSCP marking via `networkPriority` in the encodings
configuration dictionaries. That should allow us to control
QoS priorities for different media streams, eg audio with higher network
priority than video. The only browser that implements that right
now is Chromium.

To use this, the public.app.media.networkPriorities configuration in
settings.yml. Audio, camera and screenshare priorities can be controlled
separately. For further info on the possible values, see:
  - https://www.w3.org/TR/webrtc-priority/
  - https://datatracker.ietf.org/doc/html/rfc8837#section-5
2022-08-15 21:24:05 +00:00
Joao Victor
5c6c28cdd2 Fix conflicts 2022-07-25 15:14:27 -03:00
Joao Victor
34aaf07fed Merge branch v2.6.x-release into virtual-backgrounds-skeleton-preview 2022-07-15 17:14:16 -03:00
prlanzarin
d06ae5ce40 fix: add default gUM factory to new peer wrapper
For scenarios such as preview-less camera sharing, old echo test
2022-07-15 17:07:15 +00:00
prlanzarin
6a4ceac61f refactor(webcam): swap kurento-utils for the new peer wrapper 2022-07-15 14:00:12 +00:00
Ramón Souza
267a6f5c9c
Merge pull request #15203 from ramonlsouza/improve-ghost-button-border
style: improve ghost buttons border in low density display
2022-07-15 12:06:59 +01:00
prlanzarin
029c957b22 fix(webcam): handle stream inactivation/gUM revocations
The 'inactive' event is fired whenever the stream gets inactive (ie it
cannot be used anymore), and there are scenarios where that is
unexpected behavior and must be handled accordingly.
The main example of that is when gUM permissions are revoked by the user
via the browser's permission management panel.
Since MediaStream/Track inactive events aren't being handled in such
scenarios, what actually happens is that the camera just freezes without
further indication why.

This commit handles those scenarios in both video-preview and
video-provider by:
  - 1) correctly stopping the camera (provider)
  - 2) surfacing a toast (provider) or error indication (preview)
2022-07-12 22:03:01 +00:00
prlanzarin
e93440e15a refactor(webcam): fix linter errors in BBBVideoStream 2022-07-12 17:50:16 +00:00
Joao Victor
2f78edddf3 fix: add suport for disabling upload of custom backgrounds through custom parameter 2022-07-08 17:01:57 -03:00
Joao Victor
8809ff3a65 fix: add missing activity date in drag & drop handler 2022-07-08 12:26:01 -03:00
Joao Victor
f8ec4ef640 refactor: virtual background context 2022-07-07 18:59:30 -03:00
Joao Victor
aaf7f8e78e improvement(virtual background): better error handling, notifications, performance 2022-07-06 10:38:40 -03:00
Ramon Souza
29d597f7df Merge remote-tracking branch 'upstream/v2.6.x-release' into improve-ghost-button-border 2022-07-05 14:06:19 -03:00
Ramon Souza
9e246093f9 remove duplicated webcam label 2022-07-04 10:41:27 -03:00
Joao Victor
4b9f16ca0f fix: add check for potential undefined userId 2022-06-28 17:41:03 -03:00
Ramon Souza
04f3b50d0d improve ghost buttons border 2022-06-16 16:59:01 -03:00
Ramon Souza
edeb70de0d Merge tag 'v2.5.1' into merge25-26-jun16 2022-06-16 13:58:54 -03:00
Joao Victor
b75fbe8279 Remove merge residue 2022-06-01 16:55:28 -03:00
Joao Victor
2a1401f2ae Merge remote-tracking branch v2.6.x-release into virtual-background-upload 2022-06-01 16:50:29 -03:00
Joao Victor
1c02ff3877 fix: make drag-and-drop stuff follow the config 2022-06-01 14:30:50 -03:00
Joao Victor
4840543701 fix: move config key to public.virtualBackgrounds (Settings.yml) 2022-06-01 14:23:00 -03:00
Joao Victor
769629daf6 improvement: add a new service function for reading the file 2022-06-01 12:05:16 -03:00
Joao Victor
b3d18a1d28 improvement: add HOC to concentrate drag-and-drop code 2022-06-01 10:34:21 -03:00
Joao Victor
e7d9b46097 fix: add some file sanitization 2022-05-31 16:32:58 -03:00
Max Franke
8b8ba0c9f4 fix(webcam): draggable camera dock 2022-05-31 14:14:18 -03:00
Max Franke
2fbb4e8821 fix(webcam): user status icons align
Align user status icons to match other icons paddings/margins
2022-05-31 13:38:37 -03:00
Max Franke
a53b41721b fix(video-avatar): prevent state update on an unmounted component 2022-05-31 13:38:37 -03:00
Max Franke
00a8e64261 feat(video-avatar): change border
Apply isTalking border with a pseudo-element.
2022-05-30 15:08:25 -03:00
Joao Victor
18b06e1ba5 fix: point media button chevrons upwards #15068 2022-05-25 09:38:22 -03:00
Max Franke
45d3738960 feat(video-avatar): hide icons when squeezed 2022-05-24 17:20:29 -03:00
prlanzarin
0a05d3b673 fix: client crash on meeting end/user left with cameras 2022-05-13 16:20:57 +00:00
Joao Victor
e070b586c4 [2.5] fix: popover menus in RTL mode 2022-05-13 10:42:19 -03:00
prlanzarin
6d02d7218f fix: client crash on meeting end/user left with cameras 2022-05-10 18:57:26 +00:00
Joao Victor
a7e5869c91 feat(video): upload of own webcam virtual background 2022-05-10 14:17:16 -03:00
Ramón Souza
092cda8000
Merge pull request #14965 from frankemax/fix-joined-spinner
fix(webcam): spinner and prop types
2022-05-10 17:01:46 +01:00
Paulo Lanzarin
c6dedfebe2
Merge pull request #14938 from frankemax/add-video-avatar-loading-2.6
feat(webcam): avatar loading
2022-05-10 09:56:58 -03:00
Max Franke
f9b2fbf4d2 fix(video-list-item): mirror own webcam
Fix mirror own webcam not working
Probably broke after e45deb5e7e
2022-05-09 16:28:30 -03:00
Max Franke
d75111d85a fix(video-list-item): spinner and unhealthy stream
Fix spinner
Add unhealthy stream filter to the avatar
2022-05-09 16:17:38 -03:00
Max Franke
cf56e064e4 fix(user-status): add joined value
Add correct prop types to user-status
2022-05-09 16:17:38 -03:00
Max Franke
d642464897 feat(video-list-item): avatar loading
Add a new avatar component to video list item
Change the design of the components, following the new video list idea
Add icons related to the state of the user
2022-05-09 16:17:33 -03:00
Max Franke
b0b5f812e5 fix(video-list-item): mirror own webcam
Fix mirror own webcam not working
Probably broke after e45deb5e7e
2022-05-06 14:06:25 -03:00
Max Franke
1a63dbd648 fix(webcam): joined value
Add correct prop types to user-status
2022-05-05 18:11:22 -03:00
Max Franke
2cf7e3903e fix(webcam): fix reconnecting spinner
Fix loading spinner not spinning
2022-05-05 17:58:09 -03:00
Mario Junior
dced094ad7
Merge pull request #14833 from lfzawacki/develop-bbb
New Layout code and push layout states for camera position, size, focus and presentation minize
2022-05-04 16:51:06 -03:00
prlanzarin
bdd781e647 refactor(webcam): remove unused code in video-provider/service 2022-05-02 14:43:48 +00:00
Anton Georgiev
1e038e7855
Merge pull request #14732 from frankemax/hide-webcam-info-small
feat(video): hide webcam container info depending on container size
2022-04-27 11:16:56 -04:00
Max Franke
9392669cd8 feat(video-list-item): prevent undefined observer
Add extras checks to observer related values
Move the video container width bound to a const
2022-04-27 11:48:14 -03:00
Lucas
2db9a1b343
Merge branch 'develop' into develop-bbb 2022-04-26 15:08:43 -03:00
Anton Georgiev
9a8264ec6c
Merge pull request #14736 from prlanzarin/u25-wave-idea3
feat(audio): local echo test and audio energy meter
2022-04-14 17:07:28 -04:00
Lucas Zawacki
378d0f18a0 Merge branch 'develop' of https://github.com/bigbluebutton/bigbluebutton into develop-bbb 2022-04-14 18:48:02 +00:00
Lucas Zawacki
83847a21aa Merge branch 'v2.5.x-release-Layouts' of github.com:lfzawacki/bigbluebutton into develop-bbb 2022-04-13 21:08:32 +00:00
Max Franke
c01c778a2e feat(video): hide webcam stuff when squeezed
Hide the default buttons when video container is too small.
Groups the functionality of other buttons into just one button.
2022-04-11 18:48:17 -03:00
prlanzarin
d6c7f23a0e feat(audio): local echo test and audio energy meter
New features:
  - A simplified echo test mode that only does a local loopback (instead of
  going to FS and back)
  - A volume meter for microphone streams to the AudioSettings view

Those two features are experimental and disabled by default; see
public.app.media.simplifiedEchoTest and public.app.media.showVolumeMeter configs

Collateral changes:
  - fix: localize fallback device strings in AudioSettings/DeviceSelector
  - Refactor on some media stream utils to be re-usable across components
  - Refactor in AudioSettings to keep gUM #uses stable.
    * TODO: need to pass streams through AudioManager to avoid the surplus gUM.
  - fix(audio): drop ScriptProcessorNode usage (deprecated)
    * Used in volume meter for tracking - use hark instead
2022-04-11 19:21:56 +00:00
Anton Georgiev
0275b8710b
Merge pull request #14787 from Arthurk12/camera-cancellable-button-2.5
refactor(webcam): cancellable button
2022-04-11 10:17:50 -04:00
Ramon Souza
1c873bd8d6 Merge remote-tracking branch 'upstream/v2.4.x-release' into merge-2425-apr08 2022-04-08 17:30:21 -03:00
Arthurk12
f2d5e7af2c refactor(webcam): cancellable button
Makes it possible to cancel webcam sharing while connecting.
Simplifies button state logic.
2022-04-08 18:54:47 +00:00
Anton B
6eead03fb3 set dynamic steps by current settings 2022-03-29 10:53:07 -03:00
Anton Georgiev
29f5947e21
Merge pull request #14590 from frankemax/refactor-video-list-item
refactor(video-list-item): hookify and reorganize component
2022-03-28 11:53:25 -04:00
Max Franke
e45deb5e7e refactor(video-list-item): hookify and reorganize component 2022-03-24 13:29:13 -03:00
prlanzarin
4ae5c70248 feat(video): add flag to disable quality change exemptions (floor, pin) 2022-03-14 11:58:53 -03:00
prlanzarin
ccbb6c6651 fix(video): add debounce and option to exclude constraints from dynamic camera profiles
Tries to mitigate too-rapidly-switching camera profiles causing video freezes
due to encoder resets. Excluding constraints might not help a lot since
the thing that actually restarts the encoder is the bitrate change, but
they're not really important in the context of dynamic profiles.
We can't get rid of bitrate changes, though, since it's what does the actual
quality constraining.

The camera profile change debounce timer is 2.5s by default (which is
the same timer used for floor changes).

Also fixed an issue with camera profile backfiring due to badly defined peers
2022-03-14 11:56:48 -03:00
Pedro Beschorner Marin
5cd2b0b635 Merge remote-tracking branch 'bigbluebutton/v2.5.x-release' into f-v-amccc 2022-03-10 12:25:17 -03:00
Ramón Souza
ae5e116e16 Merge remote-tracking branch 'upstream/v2.4.x-release' into merge-24-25-mar09 2022-03-09 20:40:07 +00:00
Pedro Beschorner Marin
6ff1d680d9 feat(video): add meeting camera cap control
Include `meetingCameraCap` API param on create and enforce both server and
client to control the number of simultaneous webcams a meeting can have.

Disabled by default.
2022-03-07 09:36:55 -03:00
Pedro Beschorner Marin
ea35f4f598 fix(video): respect disabled cap
User's camera cap should be disabled when set to zero but the UI control
wasn't respecting this configuration.
2022-03-04 15:20:27 -03:00
Anton Georgiev
5f884f6674 Merge remote-tracking branch 'bbb/v2.4.x-release' into merge-24-into-25 2022-03-03 18:35:05 +00:00
Lucas Zawacki
1180f4edf1 bug(layout): Guarantee right size for focused video 2022-02-25 15:05:34 -03:00
Lucas Zawacki
8d6931f656 feature(layout): Add focused camera to layout context 2022-02-24 14:22:00 -03:00
Pedro Beschorner Marin
e8ff5ebdc8 feat(video): add user camera cap control
Include `userCameraCap` API param on create and enforce both server and
client to control the number of simultaneous webcams an user can share.

Default set to 3.
2022-02-22 13:13:48 -03:00
Joao Victor
6b923a1279 Fix button chevron and webcam selector 2022-02-21 17:40:00 -03:00
Ramón Souza
1d1375b3cf move modal component to common folder 2022-02-15 15:54:55 +00:00
Ramón Souza
fa7af8fe27 move menu component to common folder 2022-02-15 15:38:55 +00:00
Ramón Souza
96900ee6a3 move icon component to common folder 2022-02-15 14:51:51 +00:00
Ramón Souza
0377854b98 move fullscreen-button component to common folder 2022-02-15 14:42:02 +00:00
Ramón Souza
246e3b3e8f move button component to common folder 2022-02-14 20:20:50 +00:00
Ramón Souza
dba04834c7 Merge remote-tracking branch 'upstream/v2.4.x-release' into 2524-feb08 2022-02-09 15:52:42 +00:00
Anton Georgiev
417744515a
Merge pull request #14273 from ramonlsouza/restore-button-css
fix: restore hover/focus button styles
2022-02-03 15:24:50 -05:00
Ramón Souza
cdb6e2e652 restore hover/focus button styles 2022-02-03 19:45:51 +00:00
Anton
7d5325d0dd improves some selectors and function calls 2022-02-02 21:05:26 -03:00
Anton
b85b3b7ca0 add lock viewers tests 2022-01-28 16:52:22 -03:00
Ramón Souza
16cd3c4ebb Merge remote-tracking branch 'upstream/v2.4.x-release' into dev-24-0125 2022-01-25 16:56:52 +00:00
Anton Georgiev
116b99e469
Merge pull request #14159 from antonbsa/tests-reorganization-and-fix-selectors
test: Improves organization, fixes selectors and adds/improves tests
2022-01-25 08:54:32 -05:00
Paulo Lanzarin
37de82af7f
Merge pull request #14102 from prlanzarin/u24-echo-tomsk
fix(webcams): add extra error handling to pub/sub peer callbacks
2022-01-21 14:13:02 -03:00
Anton
7f075be033 fix all test selectors 2022-01-20 10:03:18 -03:00
Joao Victor
3b9d0320b7 Add missing parameter 2022-01-19 11:29:22 -03:00
Joao Victor
a1e1077580 Fix initial video direction (mirrored or not) on video dock 2022-01-19 09:58:10 -03:00
prlanzarin
17b8499ce4 fix(webcams): add extra error handling to pub/sub peer callbacks
video-provider is a race-condition prone mess and those callbacks were missing try-catches so eventual failures would bubble up as uncaught errors and not be logged properly

It`s worth mentioning that due to a number of tangential design failures in that component, 90% of the errors generate are, to the end user, invisible false positives. Thus: expect an increase in false-positive errors logs with this
2022-01-14 15:48:03 -03:00
Arthurk12
5dce39f8bf fix(webcam): unresponsive camera button on mobile
Makes clicking the camera button always open the video preview modal
when a camera is already shared on a mobile endpoint even when
skip_video_preview is true.
This allows mobile users to change virtual backgrounds.
2022-01-13 17:54:57 +00:00
Arthurk12
9c571dcc82 fix(webcam): unresponsive webcam selector button
Video preview modal opens when user clicks on the webcam selector
button/chevron even if the client is set to skip video preview
(userdata-bbb_skip_video_preview=true).
2022-01-12 19:25:35 +00:00
Ramón Souza
f6e65f58c5 merge 2.4 into develop and resolve conflicts - partial 2022-01-12 16:40:45 +00:00
Anton Georgiev
0ea6b4151e
Merge pull request #13880 from frankemax/username-long-video-item
fix(video): webcam video username dropdown
2022-01-07 15:55:51 -05:00
prlanzarin
3720ca722b fix(webcams): fix client crash on camera user ejection
Added extra proptypes validation to video-list-item

Made sure to add extra ?. checks to voiceUsers as well because... who knows?

Removed unused user role prop from video-list-item
2021-12-23 11:52:25 -03:00
Max Franke
7e2a3c3bca feat(webcams): client side implementation of webcam pin 2021-12-21 16:58:39 -03:00
prlanzarin
0ac4148f80 fix(webcams): keep base peer object in component, fix viewers randomly failing
The base peer object reference was moved from the component to service for _reasons_

That caused an issue where the component lifecycle would mess up that
centralized reference dictionary on certain conditions. That could cause viewing
sessions to fail intermittently

This reverts the location of the base dictionary reference back to
video-provider/component
2021-12-16 12:13:20 -03:00
Anton Georgiev
c6852987bc
Merge pull request #13869 from prlanzarin/u24-ill-harmonics
feat(webcams): exclude voice floor holder from camera quality limiter
2021-12-15 13:36:48 -05:00
Ramón Souza
d1c516fef6 resolve html5 conflicts 2021-12-10 21:07:35 +00:00
prlanzarin
ca7fdee11e fix(webcams): bad reference to enableWebcamSelectorButton 2021-12-09 21:50:38 +00:00
Anton Georgiev
797fc49633 TEMP 2021-12-09 20:37:05 +00:00
Max Franke
166dac09a3 fix(video): webcam video username dropdown
Fix a problem that username in video container isn't wrapped if it's too long.
Fix a problem that can cause the audio indicator to disappear.
Fix some problems with the overflow property.
Refactor in css for the talking indicator be more centralized
2021-12-09 14:25:16 -03:00
prlanzarin
67ec798758 feat(webcams): preserve floor holder's original camera profile 2021-12-08 22:53:16 +00:00
Ramón Souza
d11c6b69f8 use prefixed fullscreen event for safari 2021-12-06 12:18:23 +00:00
Anton Georgiev
def60fbcbc
Merge pull request #13818 from prlanzarin/u24-lift-wsb
feat(webcam): add a way to re-open video preview without multiple cameras
2021-12-02 17:26:23 -05:00
prlanzarin
fa64708e87 fix: tackle fallout from lifting a handful of dislocated changes 2021-12-02 18:57:25 +00:00
prlanzarin
da6ab02122 chore: add forceRelayOnFirefox option (false by default)
- forceRelayOnFirefox: whether TURN/relay usage should be forced to work
around Firefox's lack of support for regular nomination when dealing with
ICE-litee peers (e.g.: mediasoup).
  * See: https://bugzilla.mozilla.org/show_bug.cgi?id=1034964
- iOS endpoints are ignored from the trigger because _all_ iOS browsers
  are either native WebKit or WKWebView based (so they shouldn't be affected)
2021-11-30 20:31:12 +00:00
Max Franke
32aa4349b0 feat(video): remove video button warning
Changes the EmojiButton implementation on videoButton to not be a descendant
of <button>, avoiding the warning.
2021-11-26 13:43:07 +00:00
prlanzarin
fc01544d87 fix(webcams): disable webcam selector and always open video-preview in mobile envs 2021-11-26 13:19:20 +00:00
prlanzarin
23c49902a0 fix(webcams): always unshare cameras if video selector is active 2021-11-26 13:14:40 +00:00
Mario Jr
54bda21287 chore(video): change default setting to enable webcam's button selector
Renamed this setting and added some docs about it
Complements #979
2021-11-26 13:12:07 +00:00
Max Franke
310add10ed feat(webcam): add a little button to webcam button
Add the <ButtonEmoji/> to the webcam button. Now it
is possible to change the webcam settings and change
your settings without having to turn off sharing.
Modifies the <ButtonEmoji/> component so that it can
receive an onClick per props.
It is possible to disable this feat in the settings.yml
2021-11-26 12:53:11 +00:00
Anton Georgiev
5162b4c403
Merge pull request #13679 from JoVictorNunes/issue-13241
fix: virtual background not kept when switching from breakout to main room
2021-11-19 15:11:21 -05:00
prlanzarin
13eb9fe702 refactor(webcams): re-use lock check from video-provider in video-preview 2021-11-19 18:23:17 +00:00
João Victor
6524f70941 support for storing multiple virtual backgrounds 2021-11-19 08:10:24 -03:00
Anton Georgiev
542db847ff
Merge pull request #13574 from Tainan404/smooth-reconnection-25
Improve data structure to not break on reconnections
2021-11-17 15:55:21 -05:00
Ramón Souza
4207502db1 remove unused imports/exports 2021-11-17 12:26:26 +00:00
Joao Victor
77c32a6391 fix: virtual background not kept when switching from breakout to main room 2021-11-11 11:33:55 -03:00
Ramón Souza
c2f1ec7456 Merge remote-tracking branch 'upstream/develop' into styled-components-8 2021-11-08 14:00:20 +00:00
Ramón Souza
d4f2f7319b convert menu component and instances 2021-11-05 19:59:01 +00:00
Tainan Felipe
f5eef03f3f Improve data structure to not break on reconnections 2021-11-03 14:37:54 -03:00
Ramón Souza
b989fa1840 convert video-list component 2021-11-03 14:34:03 +00:00
Ramón Souza
53575aaf98 convert video-provider video-list component 2021-11-03 13:44:34 +00:00
Ramón Souza
eefa3e6492 convert video-provider video-button component 2021-11-03 13:06:18 +00:00
Ramón Souza
0091134326 convert video-provider many-users-notify component 2021-11-03 12:58:13 +00:00
Anton Georgiev
24d672a832 Merge branch 'v2.4.x-release' of github.com:bigbluebutton/bigbluebutton into merge-24-dev 2021-10-14 15:13:17 +00:00
Tainan Felipe
1de8e0779d Add server side reactivity to publications 2021-10-13 15:00:52 -03:00
prlanzarin
1cb412529d feat(webrtc): add EXPERIMENTAL option to disable ICE candidate signaling
ICE lite servers (eg mediasoup) dont need candidates signaled out-of-band; neither does KMS in certain scenarios

Disable their signaling saves us some ticks in bbb-webrtc-sfu and some bandwidth all around
2021-09-24 17:24:06 +00:00
Anton Georgiev
ab845b3078 Merge branch 'v2.4.x-release' of github.com:bigbluebutton/bigbluebutton into merge-24-rc-1-into-dev 2021-09-22 15:28:13 +00:00
Vitor Mateus De Almeida
0aab062c2d add margin on L/R buttons in RTL languages 2021-09-15 16:07:52 -03:00
Vitor Mateus De Almeida
c47cf21ba2 place both buttons at the bottom of the video dock when cameras are vertically positioned 2021-09-15 09:13:17 -03:00
KDSBrowne
be3bd85bca add group role | aria-label to virtual bg list | cam dropdown activate via keyboard 2021-09-14 01:50:24 +00:00
Ramon Souza
098826c70a rename layout functions 2021-09-10 17:48:52 -03:00
Ramon Souza
1854911080 add use-context-selector to containers - partial 2021-09-09 17:49:15 -03:00
Anton Georgiev
b0fc38ef42
Merge pull request #13131 from prlanzarin/u24-tapowerline
fix(webcams): check for component state after peer creation
2021-09-02 10:15:18 -04:00
prlanzarin
a7d549d1e3 fix(webcams): check for component state after peer creation
There could be a race condition where a peer creation (async) would resolve after the provider was unmounted

That would lead to a state inconsistency which could generate all sorts of cryptic problems
2021-09-01 19:13:22 +00:00
Anton Georgiev
47865cf2a2
Merge pull request #13125 from ramonlsouza/remove-unused-state
refactor: remove unused state properties
2021-09-01 14:28:17 -04:00
Ramon Souza
15939addf7 restore camera unfocus label 2021-09-01 14:08:51 -03:00
Ramon Souza
5679710e7d restore video-provider state and add comment about why it is needed 2021-09-01 09:23:39 -03:00
Ramon Souza
084d80f23e remove unused state properties 2021-09-01 08:48:46 -03:00
prlanzarin
58a8e99195 feat: add media server configuration via metadata
Applies to video, listen only and screen sharing

New metadata values: media-server-video, media-server-listenonly, media-server-screenshare; parameter is a String
2021-08-31 00:39:45 +00:00
prlanzarin
c741cea715 feat(video): add media server adapter config for cameras in bbb-html5
Allows configuring, via bbb-html5, which media server adapter will be used by cameras; server wide
2021-08-31 00:30:06 +00:00
Anton Georgiev
4ecb24b4fa Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into merge-aug30 2021-08-30 18:11:16 +00:00
Anton Georgiev
e6eebfaa81
Merge pull request #12983 from prlanzarin/u24-fantas
refactor(webcams, screenshare, listen-only): let the server generate subscriber offers
2021-08-24 16:37:44 -04:00
Ramon Souza
4c381a5805 remove unused imports/variables 2021-08-24 13:24:48 -03:00
Mario Jr
00e01c1872 add screenshare's peer information to video stats in connection status modal
Added support for getStats in screenshare's service. This works similar
to the getStats for video provider, and the information retrieved from
screenshare is added to the video information for cameras.
2021-08-23 12:36:01 -03:00
Mario Jr
148704cdec fix docs for getStats in audio and video services 2021-08-23 11:07:12 -03:00
Ramon Souza
5ed9639601 remove focus state if camera is unshared 2021-08-19 14:31:02 -03:00
Mario Jr
631e8fce4b Get stats for video connection
We now retrieve update information about active video peers, and calculates
download and upload rates. These rates are the sum of data transfered in
all video peers.
Screenshare stats is not being added to the sum, yet.
2021-08-13 17:24:44 -03:00
Anton Georgiev
773e8385af
Merge pull request #12970 from KDSBrowne/bbb-remaining-menus
Update Dropdowns To Menus
2021-08-12 14:38:04 -04:00
Ramon Souza
84b1651302 Merge remote-tracking branch 'upstream/develop' into issue-12953 2021-08-11 16:38:13 -03:00
Ramon Souza
53d0b8b949 exit fullscreen when component is unmounted 2021-08-11 13:19:24 -03:00
Ramon Souza
2b9d5b2d5d recalculate cameras grid when the number of streams changes 2021-08-11 10:25:20 -03:00
KDSBrowne
d9f9a94a7a Merge branch 'develop' of https://github.com/bigbluebutton/bigbluebutton into bbb-remaining-menus 2021-08-11 02:44:51 +00:00
KDSBrowne
3663290397 update public chat / video list item dropdown to menu 2021-08-11 02:44:34 +00:00
prlanzarin
74c6f1b6f8 refactor(webcams): let the server generate subscriber offers
Let the server generate subscriber offers so that it becomes easier for us to
do payload type normalization between publishers and subscribers

Also split peer creation for pubs and subs into separate methods for clarity
2021-08-10 17:31:45 +00:00
Vitor Mateus De Almeida
145ca61d40 linting some files 2021-08-09 11:24:02 -03:00
Vitor Mateus De Almeida
1b18977eac rename all NewLayout.. to Layout.. 2021-08-05 08:03:24 -03:00
Vitor Mateus De Almeida
09082734c9 remove old media, webcam draggable and panel components 2021-08-05 04:26:03 -03:00
Vitor Mateus De Almeida
abf089ae73 remove layout manager legacy 2021-08-05 01:22:07 -03:00
Anton Georgiev
6fc47676b3
Merge pull request #12867 from ramonlsouza/hidden-webcam-pagination
fix: pagination buttons appearing when camera dock is hidden
2021-07-30 15:38:22 -04:00
Ramon Souza
8c038f1187 do not display pagination when camera dock is hidden 2021-07-29 16:09:34 -03:00
Ramon Souza
41a8bc48bf Merge remote-tracking branch 'upstream/develop' into webcam-margin-new-lm 2021-07-29 09:36:07 -03:00
Anton Georgiev
9671c32f97
Merge pull request #12846 from ramonlsouza/rtl-new-layouts
fix: RTL issues - new layouts
2021-07-29 08:26:56 -04:00
Ramon Souza
103922b010 fix smart layout margin 2021-07-28 17:13:45 -03:00
prlanzarin
b190f74009 refactor(virtual-backgrounds): remove camera effect toggle (video-list) 2021-07-28 13:37:40 +00:00
Ramon Souza
07a2db6265 Merge remote-tracking branch 'upstream/develop' into rtl-new-layouts 2021-07-27 16:25:15 -03:00
Ramon Souza
8c95520aee fix fullscreen camera position 2021-07-27 09:02:00 -03:00
Ramon Souza
ee56199607 fix fullscreen camera legacy layout 2021-07-27 08:17:26 -03:00
Anton Georgiev
a37843d2a7 Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into merge238-into-24 2021-07-23 17:09:18 +00:00
prlanzarin
8b48de561b fix(webcams): avoid leaving dangling HTMLMediaElements in paused state
Should fix an issue with the recent Chrome 92 intervention that limits
the number of concurrent WebMediaPlayers (an inner element of
HTMLMediaElements) to 75/40.

Webcam video elements were being left dangling in paused state despite
the elements themselves being cleaned up from the component. That
generated a skewed accounting of WebMediaPlayers in the session.
2021-07-23 02:24:47 +00:00
prlanzarin
9071ba8bc4 refactor(virtual-backgrounds): re-organize virtual background code
Changes (maybe not a complete list):
  - Disable virtualbgs by default
  - Move the virtualbg selector in video-preview to the side below the
profile selection
  - Restore old video-preview sizes
  - Add a wrapper class for MediaStreams (BBBVideoStream)
  - Centralize virtualbg services and business logic code into BBBVideoStream
  - Refactor and centralize virtualbg constant fetching
  - Refactor and centralize virtualbg config fetching
  - Organize virtualbg type definitions
  - Remove added states in video-provider to prevent further bloat
  - Remove added states in video-preview to prevent further bloat
  - Lock virtual bg switching while video-preview itself is locked
  - Add proper virtualbg error surfacing via toasts
  - Refactor iOS availability detection to use centralized UA checker
  - Avoid calling gUM when toggling virtualbgs on/off
  - Make virtualbg video-list-item action a toggle instead of a
state-aware action
  - Make virtualbg switching work in video-preview for cameras that are
already shared. Especially useful when there are multiple source
cameras, and will be important in the near future
  - Add Derivative Work notices in files that are partially copied from
jitsi-meet
  - Simplify track replacing in video-provider
  - Split video-preview UI code for virtualbgs into a separate functional component
2021-07-22 18:53:42 +00:00
Bartu Bazna
9f791a8892 Squashed virtual background commits 2021-07-21 20:00:19 +00:00
Anton Georgiev
472c9a6107 Merge branch 'v2.3.x-release' of github.com:bigbluebutton/bigbluebutton into 237-into-develop 2021-07-20 15:21:21 +00:00
Vitor Mateus De Almeida
f0145e001e Add resizable and draggable in cameras dock
Remove settings and change resizable context data

Add resizable draggable drop areas in cameras dock
2021-07-13 04:25:03 -03:00
Anton Georgiev
36595c7375
Merge pull request #12729 from ramonlsouza/fullscreen-camera
feat: fullscreen cameras and screenshare in new Layout Manager
2021-07-12 14:33:35 -04:00
prlanzarin
15bd0b6087 fix(webcams): add error feedback when media is ejected by the server
Closes #12732
2021-07-08 15:10:22 +00:00
Ramon Souza
a281aeb11d fix unlocked viewer webcam 2021-07-07 14:00:47 -03:00
Ramon Souza
21eea858c1 code format 2021-07-06 11:17:00 -03:00
Ramon Souza
8bf637129b fullscreen camera 2021-07-06 11:05:15 -03:00
Pedro Beschorner Marin
6264caccd9
Merge pull request #12700 from prlanzarin/u24-gum-store
Webcams: reduce number of gUM calls, refactor in video-preview, fix #9053
2021-07-05 14:13:36 -03:00
Anton Georgiev
4bcf7c467d
Merge pull request #12674 from ramonlsouza/rm-unused-code
refactor: remove unused variables
2021-07-02 14:33:20 -04:00
prlanzarin
0453e9e842 fix(webcams): reduce number of gUM calls
Shave off the number of calls in video-preview and video-provider by
using a stream storage

We don´t call an upfront gUM in video-preview anymore to lift the
fingerprinting barrier on device labels and IDs. Flow has been reversed:
upfront enumerate, load first preview, then check if previous
enumeration was obfuscated.

Add a stream storage in video-preview`s service to avoid re-fetching
them in video-providerj

Remove some unneeded video-preview container props

Improve some of video-preview`s error locales
2021-07-02 16:13:31 +00:00
Ramon Souza
d8e19dbd9f remove unused variables 2021-06-28 08:20:49 -03:00
Vitor Mateus De Almeida
3599577463 Fix camera calcs
Fix camera calcs 2
2021-06-25 17:57:19 -03:00
Vitor Mateus De Almeida
3a281adab5 Remove background and commented code
Revert linting
2021-06-22 14:04:56 -03:00
Vitor Mateus De Almeida
6469b68d45 Add webcams component on new Layout Manager 2021-06-21 17:16:59 -03:00
Pedro Beschorner Marin
068b82b1fa refactor(connection status): remove legacy monitor
Remove parts of a previous connection monitor.

To add some context (as far as my memory goes) to the multiple connection
monitor features the product has, `stats` (currently named `connection status`)
was introduced at the Flash client back in ~2016. @fcecagno and I did it
as a BigBlueButton's Summit activity. Our work was squashed into a single
commit in 92554f8b3e :).

I'm not sure about the whole story behind `network information` (the late
connection monitor added to the HTML5 client) but I assume it should work
as a collector for a bunch of different connectivity monitors. I remember
when it was introduced but I don't know why it wasn't adopted. My best guess
would be because of some performance issues the `user list` had back then.

To follow on why `connection status` replaced `network information` at the
HTML5 client, when I did the `multiple webcams` feature I had to refactor
a big chunk of the `video provider` (#8374). Something that wasn't really
helping there was the adaptation of `stats` that was made to show local
feedback for each webcam connection. Although this feature wasn't being
used anymore, `network information` did rely on that to build up data. With
this monitor gone I assumed it was my responsibility to provide an alternative
so I promoted Mconf's port of the Flash `stats` monitor to BigBlueButton's
HTML5 client (#8579).

Well, that's my perspective on how things went for those features. If
anyone would like to correct me on something or add something else on
that history I would appreciate to know.
2021-06-13 14:02:46 -03:00
Anton Georgiev
78385ab3ea
Merge pull request #12569 from pedrobmarin/f-v-ds
feat(video): data savings
2021-06-12 16:59:38 -04:00
Arthur
78047eb68e feat(video): data savings
Enable video sharing when data savings is activated.
2021-06-12 14:16:32 -03:00
Max Franke
8b274476b1 feat(video): indicate who is sharing webcam
Add the `camera` icon in the user list for whoever is sharing,
in order to improve the understanding of who is sharing the webcam.
It is possible to enable/disable this indication in the settings.yml
2021-06-12 13:40:47 -03:00
Arthur B. Grossi
bf62857ca7 fix(video): talking indicator
Shows video talking indicator even if the video isn't ready
2021-06-06 15:24:39 -03:00
Tainan Felipe
baf7afc883 Decrease amount of imports in dropdown 2021-05-31 15:28:27 -03:00
prlanzarin
61cb8457d6 fix(video): check if encodings array is empty before trying to apply bitrate 2021-05-12 19:42:07 +00:00
prlanzarin
d707048c56 fix(video): remove unused floorStream variable 2021-05-12 19:26:26 +00:00
prlanzarin
1686225748 fix(video): check if pagination is in effect before choosing sort 2021-05-04 16:34:02 +00:00
Ramon Souza
75b9261f6f remove unused imports/variables 2021-04-22 13:17:20 -03:00
prlanzarin
001ab9554c video: added voice activity stream sorting, made stream sorting extensible
Video streams can be sorted by voice floor activity in the client according to FreeSWITCH´s floor events. The feature works together with pagination, essentially giving an Last-N like experience while not disrupting too much

Made video stream sorting extensible in a way. The sorting modes for pagination and unbounded can be configured in settings.yml and new sorting modes can be added to the stream sorting util under video-provider. Inline docs explain how to do that

Changed how the stream ID attribute from video-streams collection was passed to downstream components; we had an array map that was executed every change just to map stream to cameraId, which is bizarre. So I changed the cameraId usage in downstream components to be conformat with the collection attributes and shaved off the map where it wasnt needed

Add better selectors to video-list-item container´s VoiceUser fetch
2021-04-12 19:06:07 +00:00