Commit Graph

137 Commits

Author SHA1 Message Date
prlanzarin
8feb934169 feat(audio): add experimental transparent listen only mode
This is an initial, experimental implementation of the feature proposed in
https://github.com/bigbluebutton/bigbluebutton/issues/14021.

The intention is to phase out the explicit listen only mode with two
overarching goals:
  - Reduce UX friction and increase familiarity: the existence of a separate
  listen only mode is a source of confusion for the majority of users
  Reduce average server-side CPU usage while also making it possible for
  having full audio-only meetings.

The proof-of-concept works based on the assumption that a "many
concurrent active talkers" scenario is both rare and not useful. With
that in mind, this including two server-side triggers:
 - On microphone inactivity (currently mute action that is sustained for
   4 seconds, configurable): FreeSWITCH channels are held (which translates
   to much lower CPU usage, virtually 0%). Receiving channels are switched,
   server side, to a listening mode (SFU, mediasoup).
   * This required an extension to mediasoup two allow re-assigning producers
     to already established consumers. No re-negotiation is done.
 - On microphone activity (currently unmute action, immediate):
   FreeSWITCH channels are unheld, listening mode is deactivated and the
   mute state is updated accordingly (in this order).

This is *off by default*. It needs to be enabled in two places:
  - `/etc/bigbluebutton/bbb-webrtc-sfu/production.yml` ->
    `transparentListenOnly: true`
  - End users:
    * Server wide: `/etc/bigbluebutton/bbb-html5.yml` ->
      `public.media.transparentListenOnly: true`
    * Per user: `userdata-bbb_transparent_listen_only=true`
2023-08-07 19:43:18 -03:00
GuiLeme
a9a9b5b83e [issue-16590] - Change ownership of logging dir 2023-02-10 16:55:28 -03:00
Anton Georgiev
4ea7bfb6b4 fix: JVM apps stop to differ from failure 2022-09-02 01:59:56 +00:00
Mario Jr
3f99413cbb fix(audio): prevent dial-in waiting / guest users to speak/listen to the room
Based on the strategy proposed by @schrd in #15163
Also thanks to @jacotec and @maximilianhoecker for the help on investigating

Closes #15163
2022-07-14 09:04:48 -03:00
Anton Georgiev
da474130d9 build: akka apps + fsesl as part of bigbluebutton.target 2022-07-07 00:00:35 +00:00
Pedro Beschorner Marin
6d80a413cf refactor(screenshare): FreeSWITCH partial removal
Remove part of the old FreeSWITCH dependent WebRTC screenshare feature.
2022-02-23 13:03:51 -03:00
prlanzarin
172e31b78e Rework of the floor event
Now it`s called AudioFloorChanged* to properly reflect its role

Add fields to carry the floor state (boolean) along with the uID and vID to be able to send events for a floor takeover and a floor surrender
2021-04-12 18:25:58 +00:00
prlanzarin
7eb91f9273 Merge branch 'u22-screenshare18102020' of https://github.com/prlanzarin/bigbluebutton-1 into u23-ilgiardino 2021-03-11 18:49:14 +00:00
Brent Baccala
60734e0f65 on installation of akka-bbb-fsesl, update ESL password in /etc/bigbluebutton, where we're starting to
put the configuration stuff, instead of /usr/share/bbb-fsesl-akka/conf/application.conf
2021-03-10 01:13:31 -05:00
Brent Baccala
7b16f03135 packaging from akka-bbb-fsesl: copy FreeSWITCH password from
FreeSWITCH configuration file (event_socket.conf.xml) and add
FreeSWITCH as a package dependency to make sure that it gets
configured first
2021-03-10 01:13:11 -05:00
Anton Georgiev
b8eaf47263
Merge pull request #11454 from schrd/akka-config
Akka config
2021-02-23 08:44:00 -05:00
Daniel Schreiber
d53a5f52a5 let bbb-apps-akka read an override config file from /etc/bigbluebutton
This change introduces a config file
`/etc/bigbluebutton/bbb-fsesl-akka.conf` which reads the default config
from packages and allows operators to keep their own config file changes
across package upgrades.

bbb-conf is adjusted to deal with this change.
2021-02-23 12:55:48 +01:00
Anton Georgiev
55e8de4357 Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutton into feb18-merge 2021-02-18 20:33:19 +00:00
prlanzarin
3c0493a295 akka-fsesl: handle dial in/out users uIDs in GetUsersStatusToVoiceConfSysMsg responses
The lack of handling to check whether the user was a dial-in user when answering akka-apps periodic member probes was making it use an arbitrary default (callerName) as the userId, explicitly violating the convention that dial-in/outs should have v_memberId userIds

That would botch whichever added janitorial tasks that operated upon akka-apps GetUsersStatusToVoiceConfSysMsg probes
2021-02-12 17:16:36 -03:00
Daniel Schreiber
b6777ed9cb Customize Systemd unit files
Currently there is a mechanism in bbb-config which adds overlay units.
This is not neccesary because sbt allows you to specify your own unit
files.
2021-02-11 11:16:55 +01:00
germanocaumo
83fe68db08 Play screenshare audio when present 2020-12-08 20:30:22 +00:00
Richard Alam
e968780e53 - comment out printlns 2020-04-24 09:37:25 -07:00
Richard Alam
79096d0c55 Increase voice conf length
We need to increase the length of the voice conference. If we have lots of meetings running,
 there is a high chance of collision.

 Need corresponding changes to FreeSWITCH dialplan.

 In bbb_echo_test.xml, change to `expression="^echo(\d{5,11})$"`.

 In bbb_conference.xml, change to `expression="^(\d{5,11})$"`.
2020-04-24 09:22:46 -07:00
Anton Georgiev
1299abdf2c Revert "Merge pull request #8782 from ritzalam/generate-meeting-data"
This reverts commit 37ed2c7501, reversing
changes made to 5af41dabb4.
2020-03-25 16:13:01 -04:00
Richard Alam
3cddd8a1c5 - dump out some meeting stats data into the log 2020-03-14 11:54:45 -07:00
Richard Alam
3c44827895 - fix typo
- clean up
 - bind to port 8900
2020-02-13 14:30:06 -08:00
Richard Alam
0d96ec7563 - fix type
- bind only to localhost
2020-02-13 14:14:23 -08:00
Richard Alam
5f5fe9436d - cleanup 2020-02-13 13:38:41 -08:00
Richard Alam
1966be769e Add /healthz and /status endpoint
The /healthz returns information is we are able to send and receive message to/from freeswitch.
 The /status returns information about freeswitch version and uptime.
2020-02-13 11:41:49 -08:00
Richard Alam
28fec8e617 - display json reponse properly 2020-02-11 12:10:45 -08:00
Richard Alam
dcd70d38ef - catch exception to not kill connect thread 2020-02-11 12:02:24 -08:00
Richard Alam
793c627610 - handle ask response from actor 2020-02-08 13:41:40 -08:00
Richard Alam
0340b3c4d5 - add response to health check 2020-02-08 13:25:59 -08:00
Richard Alam
5fc079464d - try to setup actor context 2020-02-07 15:19:10 -08:00
Richard Alam
f5567ae971 - add health service 2020-02-07 15:01:37 -08:00
Richard Alam
52dbe43c2a - add http interface 2020-02-07 13:23:29 -08:00
Richard Alam
1e5f4a19ce - handle heartbeat events 2020-02-06 14:23:39 -08:00
Richard Alam
bf80c1071c - parse userid properly 2020-02-06 09:49:05 -08:00
Richard Alam
7911d2b874 - client session wasn't set properly 2020-02-06 07:36:42 -08:00
Richard Alam
5af6374265 Track call session state
Currently, we user DTMF to inform the client when the call session is in echo test and when entering the voice conference.
 Unfortunately, sometimes when FS sends the DTMF, FS crashes.

 Monitor the progress of the call session using ESL events and propagate to the client.

 The client would be informed of these call states: CALL_STARTED, IN_ECHO_TEST, IN_CONFERENCE, CALL_ENDED.
2020-02-05 14:58:47 -08:00
Richard Alam
4c5f1c660c Add timeout waiting for response from FreeSWITCH when sending ESL command
- When waiting for a response from FS after sending an ESL command and the ESL connection disconnects,
   the sending thread will be blocked as the trigger for it to unblock is the response from FS which never
   comes.

   Add a 30 second timesout waiting for response and give up to go send a new FS ESL command.
2020-02-04 10:00:20 -08:00
Richard Alam
a29bbb250f Track client's webrtc call session
- We want to be able to correlate client webrtc calls with freeswitch logs. We add extra info
   on callerid which we strip out in akka-fsesl.
2019-11-13 08:49:06 -08:00
Richard Alam
9dd44ad84b - filter our global audio users 2019-10-21 15:08:51 -07:00
Richard Alam
0261a5e2b8 - send users and recordings in one message 2019-10-21 14:29:52 -07:00
Richard Alam
1e7557562f Sync FS user status
- poll FreeSWITCH for status of user so that akka-apps would be in sync with FreeSWITCH
2019-10-21 11:01:58 -07:00
Richard Alam
3395cdbdc0 Make sure we record audio if meeting is recorded
- We had an issue where FreeSWITCH, for some unknow reason, stopped recording the voice conference
   in the middle of the meeting while there are users in the voice conference. We've relied on the
   voice conf started event to trigger recording of wav files. This event is sent when the first user
   joins the voice conference. In this case, there was no voice user joined after the recording stopped
   as there were already users in the voice conference. TO make sure that the audio is recorded, akka-apps
   will send a "check if voice conf is running and recording" message to FreeSWITCH every 30sec. If akka-apps
   receives a "running=true recording=false" response from FreeSWITCH, akka-apps will send a start recording
   msg to FreeSWITCH.
2019-10-17 11:50:12 -07:00
Richard Alam
aa22c629cb Eject users by force from FreeSWITCH
- when meeting ends, we try to eject all users by force from freeswitch to make sure
   that recording ends. However, we are not actually sending the command to freeswitch.
   This change sends the command so that users can be kicked out.
2019-10-10 11:38:27 -07:00
Richard Alam
0a6701ff5b Have only one ESL listener
- on auto-reconnect when FS restarts, the auto-reconnect add another
   listener to the ESL client resulting in multiple handlers of ESL events
   and multiple messages to akka-apps. This resulted in multiple recordings
   of audio when the first user joins as akka-apps receives 2 user join events.
2019-10-10 09:50:25 -07:00
Richard Alam
0491046e7e - stop trying to eject after several attempts if unsuccessful. 2019-10-01 14:31:47 -07:00
Richard Alam
c373dc42e8 For eject of voice conference user
- Sometimes ejecting voice conf users using "conference vconf kick all" doesn't work. We need to
   forcefully eject the user by using "uuid_kill uuid".
2019-10-01 11:36:06 -07:00
Richard Alam
9893e352be Add more akka fsesl logs
- add more logs to trace messages
 - add FS status check by sending ESL message to FS
2019-09-13 10:54:56 -07:00
Richard Alam
4d42a74ea8 Add more logging
- FreeSWITCH core dumped and akka-fsesl managed to reconnect. However, commands (mute, unmute, record, etc.) to FS are not reaching FS.
   But events (user joined, left, talking) from FS are received by akka-fsesl. Can't determine where the commands are falling off. These
   extra logging hopefully helps us narrow down if this happens again.

   I wasn't able to reproduce the issue when stopping and restarting FS. Akka-fsesl reconnects and command/events are flowing in both
   directions.
2019-09-06 11:25:04 -07:00
Richard Alam
8cb00f457a - track FS caller using UUID so we can find when the channel was created and destroyed.
This will help us hunt an issue where a channel gets stuck in a voice conference.
2019-05-30 12:07:32 -07:00
Fred Dixon
1383e741cc
Merge pull request #7464 from ritzalam/fix-deserialization-error-callingwith
- fix issue where akka-apps cannot deserialize the message because of…
2019-05-26 12:09:04 -04:00
Richard Alam
df55ff262d - check if we have successfully ejected all users from the voice conference. 2019-05-24 20:24:00 -07:00