Commit Graph

715 Commits

Author SHA1 Message Date
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
c81a7e70f2 fix: properly check constraints before creating transceivers in peer.js
In peer.js offer generation method, the provided constraitns are only
being type checked. It needs a value check when the constraint is a
boolean.

This commit should prevent useless transceivers from being added when
explictly specifying audio/video as `false`
2023-04-05 13:30:30 -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
Tainan Felipe
470937bf6f Refactor: Migrate users for the Meteor 3.0 api 2023-03-20 16:35:52 -03:00
Anton Georgiev
2c5cd8f2a0 Merge branch 'v2.6.x-release' of github.com:bigbluebutton/bigbluebutton into merge-26-27 2023-03-10 13:03:56 -05:00
germanocaumo
d09f2681d9 refactor(html5): presentation/whiteboard/cursor code cleanup and linting 2023-03-10 11:30:46 +00: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
5ee0ff9af2 fix(screenshare): add proper signaling heartbeat, +
Same rationale as in video-provider's commit
(34fa37ae4f092af4a5aef0cf01d96c033d97473c).

This commit does the following:
  - Implement actual heartbeat checks to trigger reconnects when
    necessary
  - Properly catch and log WebSocket.send errors
2023-03-08 15:46:55 -03:00
Ramón Souza
3c376e112d
Merge pull request #16936 from ramonlsouza/not-logged-redirect
fix: return logoutUrl on logout even if the user is not logged in
2023-03-07 13:03:20 -03:00
Ramón Souza
4aeb406aaf
Merge pull request #16754 from Scroody/i-16640
fix: Banned user sees message upon return attempt (before - only blue screen)
2023-03-07 13:03:00 -03:00
Ramón Souza
5846312f93 return logoutUrl even if the user is not logged in 2023-03-07 09:38:57 -03:00
imdt
23c6217e1c Error now identyfied and treated. 2023-03-01 15:51:33 -03:00
Ramón Souza
41c187d93e Merge remote-tracking branch 'upstream/v2.6.x-release' into lodash-radash 2023-03-01 15:19:12 -03:00
Tainan Felipe
264f6bae04 Migrate the breakout room backend to new async api 2023-02-23 16:42:21 -03:00
Ramón Souza
ba9c414989 replace lodash isEqual and isEmpty 2023-02-23 10:27:16 -03:00
Ramón Souza
470e41ca28 check for array and object in storage/setItem 2023-02-23 09:30:52 -03:00
GuiLeme
d47d586f0e [issue-16734] - refactor disabledFeatures presentationArea to just presentation 2023-02-22 17:16:43 -03:00
Ramón Souza
8dbd39be75 replace lodash isObject and isString 2023-02-21 10:24:40 -03:00
GuiLeme
cbe3e88938 [issue-16734] - Implemented new disabledFeature presentationArea 2023-02-17 12:44:36 -03:00
Guilherme Pereira Leme
455a11d1fb
Update bigbluebutton-html5/imports/ui/services/auth/index.js
changes in review

Co-authored-by: Gustavo Trott <gustavo@trott.com.br>
2023-01-20 09:39:11 -03:00
GuiLeme
8af6c547f2 [issue-16284] - Changes in review 2023-01-20 08:44:21 -03:00
GuiLeme
6f5053d492 [issue-16284] - Changes in review 2023-01-19 11:32:00 -03:00
GuiLeme
7bb03551b1 [issue-16284] - changed behavior of not showing anything when user is moved out a breakout 2023-01-19 09:21:28 -03:00
GuiLeme
2e0a85f268 [issue-16284] - tweaked minor problems and fixed blue screen when changing breakout rooms 2023-01-17 11:30:25 -03:00
GuiLeme
78b165ed7c Merge remote-tracking branch 'upstream/v2.6.x-release' into disabled-transcriptions 2023-01-09 10:58:25 -03:00
GuiLeme
f67f530b32 [disabled-transcription] - Renamed audioCaptions to liveTranscription (for disabledFeatures) 2023-01-09 10:47:22 -03:00
Daniel Schreiber
4347ff2e3b Re-add option to disable enforce relay webrtc traffic for Firefox
There may be other bridges may not need to force relay traffic on
firefox as @prlanzarin pointed out. So set the default to a
configuration that works out of the box but leave other choices for the
operator.

The option is moved from kurento namespace to media next to the general
forceRelay option.
2023-01-03 23:21:25 +01: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
GuiLeme
b4afec689e [disabled-transcription] - Created new disabledFeature audioCaptions 2022-12-16 17:04:14 -03:00
Ramón Souza
064b554dfd Merge remote-tracking branch 'upstream/v2.5.x-release' into merge-2526-dec14 2022-12-14 13:23:11 -03:00
Ramón Souza
1fda877450
Merge pull request #15929 from prlanzarin/u25/fix/cam-reconn-issues
fix: guarantee cleanup of stale data on re-subscriptions
2022-12-13 13:12:41 -03:00
Gustavo Trott
531241d269
feat: Button to transfer user to mobile App (#15183)
* Provide a link to transfer user to mobile App
* show menu option only if appStoreLink is present and it is not running on mobile app already
2022-11-15 09:49:24 -03:00
Tiago Jacobs
a412371688
Merge pull request #15968 from iMDT/fix-screenshare-in-26
(fix:screenshare) fixes screenshare using BigBlueButton-Tablet app
2022-11-09 16:34:43 -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
Daniel Schreiber
c42fa1ca77 Add config option for html5 settings storage
When BBB is run as a single node or in a scaleout setup with a cluster
proxy in front (see https://docs.bigbluebutton.org/admin/clusterproxy.html) it
is useful to store client settings in browser localStorage instead of
sessionStorage. If localStorage is configured then the client will keep seetings
like notifications for user joining, chat etc across meetings.

It is not advisable to set the setting to `local` in a setup of multiple BBB
nodes without a cluster proxy in front of it because this would lead to
unexpected behaviour at users. The browser would store settings for each server
and for users it would look like BBB is sometimes store the settings and
sometimes not.

It adds the new setting

```yaml
public:
  app:
    userSettingsStorage: (session|local)
```
2022-11-09 09:00:03 -03:00
Tiago Daniel Jacobs
07f4ba1dce Fix screenshare in BigBlueButton-tablet app 2022-11-08 22:50:16 -03:00
Ramón Souza
13b2d8791d
Merge pull request #15814 from danimo/fix/15803
fix: spelling errors in session keys
2022-11-04 13:15:59 -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
Gustavo Trott
09697948e1
Merge pull request #15708 from danielpetri1/breakout-upload-ui 2022-10-31 08:29:56 -03:00
Ramón Souza
8d0316ed31
Merge pull request #15747 from JoVictorNunes/issue-15713
improvement: add internationalization singleton
2022-10-28 13:24:03 -03:00
prlanzarin
401ddc4014 fix: guarantee cleanup of stale data on re-subscriptions
Currently, collection cleanup code is only run when an added event
is received from the server. Where that fails is in scenarios where
a server-side collection turns empty while an affected users is
disconnected - and then reconnects. There's no removed (or updated)
event so no cleanup code is run and you have stale data.

This commit guarantees a stale data check is run whenever a subscription
is established again. The `added` check was also maintained, although
I'm not too sure anymore it's is still needed. That may need to be
revisited.
2022-10-28 13:37:41 +00:00
Daniel Petri Rocha
0a2b4186a2 Merge branch 'v2.6.x-release' into breakout-upload-ui 2022-10-19 19:51:05 +02:00
Joao Victor
d628131e64 improvement: error screen messages and logs 2022-10-14 14:47:27 -03:00
Daniel Molkentin
25b81b6de1 fix: spelling errors in session keys 2022-10-10 14:09:18 +02:00
Daniel Petri Rocha
184b1c2169 Merge branch 'v2.6.x-release' into capture-shared-notes 2022-10-08 11:24:22 +02:00
Joao Victor
7e8cee7340 improvement: error screen messages 2022-10-05 11:30:12 -03:00
Daniel Petri Rocha
26a93f6853
Merge branch 'v2.6.x-release' into capture-shared-notes 2022-10-03 11:03:24 +02:00
Joao Victor
50d92925f7 fix: add empty string fallback config 2022-09-28 14:24:27 -03:00
Joao Victor
f8279ab5b4 improvement: add internationalization singleton 2022-09-28 13:48:27 -03:00
Ramón Souza
2b0971e2c8 Merge tag 'v2.5.6' into merge-256-26 2022-09-26 09:17:59 -03:00
Ramón Souza
6d1463e03b add disableWebsocketFallback settings 2022-09-21 11:03:21 -03:00
Daniel Petri Rocha
e23d00004f 'Capture Shared Notes' button in front-end 2022-09-20 17:43:13 +02:00
prlanzarin
0f24e5634d fix(audio): bypass overconstrained errors in SFU-based audio 2022-09-15 20:42:43 +00:00
prlanzarin
b3eebbb926 fix(audio): retry gUM without pre-set deviceIds on OverconstrainedError(s)
There are some situations where previously set deviceIds (
local/session storage) may become stale. This causes an unexpected
behavior where audio is temporarily borked until the user clears their
local storage.
This issue has been seen more recently on Safari endpoints when switching
back-and-forth breakout rooms in environments running under iframes.
Also seen randomly on endpoints with virtual input devices.

This centralizes audio gUM calling into a single method that retries the
gUM procedure without pre-set deviceIds only if the initial call fails
due with an OverconstrainedError - hopefully circumventing the issue.
2022-09-15 19:25:30 +00:00
Paulo Lanzarin
9c4707b56d
Merge pull request #15582 from prlanzarin/u26/refactor/mic-inout-logs-26
fix(audio): review in/out device management and switching
2022-09-09 09:22:40 -03:00
prlanzarin
646db91367 fix(webcam): add MediaStream id to 'inactive' event handlers
BBBVideoStream 'inactive' event currently does not send the
MediaStream id as the payload for handlers. This can cause theoretical
race conditions due to media stream mismatches in places where
'inactive' handling is done globally (eg video-preview).

This adds the MediaStream id to BBBVideoStream's 'inactive' event
and uses it in video-preview to avoid such race conditions.
2022-09-06 12:31:26 +00:00
Ramón Souza
4e46284a3b
Merge pull request #15603 from JoVictorNunes/camera-brightness
feat(camera): set camera brightness
2022-08-31 17:00:34 -03:00
Ramón Souza
62f8ab3cb2 Merge remote-tracking branch 'upstream/v2.6.x-release' into pr-15460-aug26 2022-08-26 14:05:45 -03:00
Joao Victor
396f5320a4 feat(camera): set camera brightness 2022-08-26 11:50:46 -03:00
prlanzarin
ec1879f96b fix(audio): add inputDeviceId enforcement for post-join/gUM
Extract the deviceId again from the stream to guarantee consistency
between stream DID vs chosen DID. That's necessary in scenarios where,
eg, there's no default/pre-set deviceId ('') and the browser's
default device has been altered by the user (browser default != system's
default).
2022-08-24 14:39:09 +00:00
prlanzarin
89e814d570 fix(audio): centralize device change code, add rollbacks, surface errors
There's no rollback procedure in case a device switch fails right now,
nor does the code entrypoints that call the switching procedures wait
for resolution or failure before marking the new device as chosen. That
may cause inconsistent states in a couple of ways:
  - No rollback: switch fails, audio is still on but no actual
    microphone input is being transmitted
  - Not waiting for resolutions: inconsistent chosen devices on failures
Device switching errors are also not surfaced to the end user

This commit:
  - Adds device rollback and proper resolution/failure response
    awaits to try and make the state a bit more consistent.
  - Centralizes the input device switching code to be reused between
    different bridges
  - Centralizes device ID state management in audio-manager to try and
    mantain them a bit more consistent across the board
  - Surface device switching failures to the end user
  - Guarantee device IDs are set to the session storage on all
    appropriate scenarios
2022-08-24 13:28:27 +00:00
prlanzarin
ac71167ba5 refactor(audio): add debug logs for microphone device changes
In/out device changes are mostly silent which makes it hard to track
them to look for problems.
2022-08-23 14:50:50 +00:00
Joao Victor
66403fe5fe fix: check virtual background type on change 2022-08-17 15:14:14 -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
Daniel Petri Rocha
3529fe9f28 Rename parameters; hide download button and label when disabled 2022-08-02 15:53:40 +02:00
Daniel Petri Rocha
5dfc9293fb Merge branch 'v2.6.x-release' into pdf-disabledFeatures-tldraw 2022-08-02 12:29:38 +02:00
Gabriel Porfirio
8198953f30 removing unused imports 2022-07-28 16:50:31 -03:00
Joao Victor
34aaf07fed Merge branch v2.6.x-release into virtual-backgrounds-skeleton-preview 2022-07-15 17:14:16 -03:00
Paulo Lanzarin
383fe89653
Merge pull request #15364 from prlanzarin/u26/refactor/kutils-kboom
refactor: remove kurento-utils-js
2022-07-15 14:53:10 -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
cd9b8ccef4 fix: handle Firefox stream cleanup edge case (peer.js)
Firefox doesn't fire the ended evt/onended callback for live
 MediaStreamTrack(s). We rely on that event.

 Manually emit the ended event which works with the onended callback
 when a track is stopped
2022-07-15 14:25:37 +00:00
Ramon Souza
db5ac1428a Merge tag 'v2.5.3' into merge25-26-jul14 2022-07-15 11:08:02 -03:00
prlanzarin
45049cbd65 refactor: swap kurento-utils for new peer wrapper in screen sharing and audio 2022-07-15 14:00:12 +00:00
prlanzarin
7281475271 feat: add new peer wrapper to phase out kurento-utils
kurento-utils is unmaintained. It's served us well, but its age
shows.  We need to transition to something else if we want to
have better  maintainability and include simulcast, multistream, ...

This introduces a simplified/leaner wrapper kit that's almost
API-compatible with what we use right now - so widespread changes
are minimal). It's easier to maintain/read/transition from. This
can be read as an intermediate step to transitioning to
something definitive (ie mediasoup-client).
2022-07-15 13:51:03 +00:00
prlanzarin
e93440e15a refactor(webcam): fix linter errors in BBBVideoStream 2022-07-12 17:50:16 +00:00
Daniel Petri Rocha
5f98290413 Add presentationWithAnnotationDownload, exportPresentationWithAnnotation to disabledFeatures 2022-07-12 18:58:56 +02:00
Joao Victor
2f78edddf3 fix: add suport for disabling upload of custom backgrounds through custom parameter 2022-07-08 17:01:57 -03:00
prlanzarin
a6861a16d5 fix: don`t ignore settings.yml virtualBackgrounds.enabled config 2022-07-07 12:37:32 +00:00
Mario Junior
72854de683
Merge pull request #15295 from iMDT/v2.6.x-mobile
feat (mobile screenshare): Add replacement webRTC methods for screenshare and full audio in mobile (when running in BigBlueButtonMobile app)
2022-07-06 15:46:25 -03:00
Tiago Jacobs
9ea4171af6 Add support to 2.6 by initializing stream active flag 2022-07-04 16:19:38 -03:00
prlanzarin
0c7c628f7a fix(webcam): prevent camera freeze due to _renderMask exceptions
Under some scenarios, cameras are freezing when the virtual background
code is running due to runPostProcessing(_renderMask) throwing
NS_ERROR_FAILURE - mainly on Firefox - consequently preventing
subsequent TimerWorker ticks from being scheduled.
Cases where I've seen that happen are:
  - conferences running under an iframe where the iframe is briefly
    stalled for some reason

Address the issue with a try-catch and a log for debugability (it's high
frequency, hence why not error level). We should probably remove the log
entirely once we figure out why the post-processing method is failing.
2022-06-30 13:50:53 +00:00
Gustavo Emanuel Farias Rosa
b13039c31f Detect screen share stop and propagate it to the application 2022-06-29 17:38:40 -03:00
Tiago Jacobs
2b953a47bb Add structure to detect and forward full audio calls to mobile application 2022-06-29 17:38:38 -03:00
Tiago Jacobs
092f5bcafd Add logic to skip webRTC replacement methods when it's not a screenshare 2022-06-29 17:38:34 -03:00
Tiago Jacobs
f459aec949 Fixes variable name to avoid colision with reserved arguments variable 2022-06-29 17:38:29 -03:00
Tiago Jacobs
75c8dcd491 Merge 2.6 2022-06-29 17:38:21 -03:00
prlanzarin
602238b84e refactor(audio): remove caller ID from fullaudio bridge start request
The callerId is assembled server-side as of bbb-webrtc-sfu
v2.9.0-alpha.3 based on the work done in commit
d940bff541b6fe3c4976428ca471457bc67ac97e.
2022-06-28 20:33:36 +00:00
Ramon Souza
edeb70de0d Merge tag 'v2.5.1' into merge25-26-jun16 2022-06-16 13:58:54 -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
prlanzarin
1d860d64d0 fix(audio): remove deprecated getLocalStreams usage
Use the built-in getLocalStream from the peer wrapper instead (which
relies on getSenders - the proper, spec-compliant way).

Two different issues are addressed:
  - RTCPeerConnection.getLocalStreams is a pre-1.0 WebRTC spec which is
    deprecated and not recommended.
  - Fixed an issue where a switch from full audio to listen only could
  cause the latter to be rejected with an error 1004 in rare scenarios.
2022-05-27 14:02:10 +00:00
Ramon Souza
8986fe2853 prevent disconnect in same tab 2022-05-17 13:09:41 -03:00
Joao Victor
a7e5869c91 feat(video): upload of own webcam virtual background 2022-05-10 14:17:16 -03:00
prlanzarin
83e26b7f63 fix(screenshare): race condition - local stream ends while broker stars
There could be a race condition where the local getDisplayMedia stream ends
(eg via Chrome`s stop sharing toast) while the broker hasn't finished starting.
That would lead to a scenario where the broker wouldn't emit an end event,
causing screen sharing to be flagged as started with a blank/invalid stream.
2022-05-09 18:00:30 +00:00
prlanzarin
6a0e0a87c2 fix(audio): abide to signalCandidates configuration flag 2022-05-02 13:49:47 +00:00
prlanzarin
ccc95583ee refactor(audio): restore trickle candidate filtering in new audio bridge
+ better error handling, log messages for that code
2022-04-25 16:45:18 +00:00
prlanzarin
459e1a9514 refactor(audio): remove old listen only bridge (kurento.js)
- Remove the old listen only bridge (kurento.js), superseded by the equivalent
  and equally stable (AS FAR AS LISTEN ONLY IS CONCERNED) sfu-audio-bridge
  - Rename FullAudioBridge.js -> sfu-audio-bridge.js
    * A more generic name that better represents the capabilities and
      the nature of the bridge
    * The bridge name identifier in configuration is still the same
      ('fullaudio')
  - Remove the FreeSWITCH listen only fallback
  - Temporarily disable the "trickle ICE" pair gathering feature used
    in SIP.js (which was always experimental, nonstandard and disabled
    by default)
  - Updates to settings.yml keys in places where relevant
2022-04-20 20:46:32 +00:00
prlanzarin
6fd6a52d47 fix(audio): prevent uncaught rejections in the experimental audio bridge startup 2022-04-20 17:40:06 +00:00
prlanzarin
1e80d050b7 refactor(audio): generic use of sfu audio broker to cover mic and listen only 2022-04-20 17:26:52 +00:00