Recording
This document assumes the reader understands the current BigBlueButton architecture.
Overview
BigBlueButton records all the events and media data generated during a BigBlueButton session for later playback.
If you want to see the Record and Playback (RaP) feature in action, use Greenlight on the demo server and record a session demo. You can then play it back after it is listed under "Recorded Sessions" on the same page. Processing and publishing the media for playback after the end of your session may take a few minutes.
Like BigBlueButton sessions, the management of recordings should be handled by third-party software. Third-party software consumes the BigBlueButton API to accomplish that. As a user, you may want to use third-party software which sets the right value to the parameter "record". As a developer, you may want to use a (not official) library that implements the API calls in your preferred language or implement it by yourself.
From a technical point of view, in the BigBlueButton API, when you pass the parameter record=true with create, BigBlueButton will create a session that has recording enabled. In this case, it will add a new button to the toolbar at the top of the window with a circle icon which a moderator in the session can use to indicate sections of the meeting to be recorded.
In a session with recording enabled, BigBlueButton will save the slides, chat, audio, desktop sharing (deskshare), whiteboard events, shared notes, captions, poll results, and webcams for later processing. This is the unique way to record a meeting, because it provides the ability for different workflows to create recordings with different properties, combining the media in unique ways.
After the session finishes, the BigBlueButton server will run an archive script that copies all of the related files to a single directory. It then checks to see if the moderator has clicked the "Record" button during the session to indicate a section of the meeting that should be turned into a recording. If the recording button was not clicked during the session, the files are queued to be deleted after two weeks. (You can override this and force a recording to be processed; see the bbb-record --rebuild command below.)
After the recording is archived, BigBlueButton will run one (or more) ingest and processing scripts, named workflows, that will process and publish the captured data into a format for playback.

Record and Playback Phases
BigBlueButton processes the recordings in the following order:
- Capture
- Archive
- Sanity
- Process
- Publish
- Playback
Capture
The Capture phase involves enabling the BigBlueButton modules (chat, presentation, video, voice, etc.) to emit events over an event bus for capture on the BigBlueButton server. Components that generate media (webcam, voice, deskshare) must also store their data streams on the server.
Whiteboard, cursor, chat and other events are stored on Redis. Webcam videos (.flv) and deskshare videos (.flv) are recorded by Red5. The audio conference file (.wav) is recorded by FreeSWITCH. Shared notes and captions are taken from Etherpad.
Archive
The Archive phase involves placing the captured media and events into a raw directory. That directory contains ALL the necessary media and files to work with.

Sanity
The Sanity phase involves checking that all the archived files are valid for processing. For example that media files have not zero length and events were archived.

Process
The Process phase involves processing the valid archived files of the recording according to the workflow (e.g., presentation). Usually, it involves parsing the archived events, converting media files to other formats or concatenating them, etc.

Publish
The Publish phase involves generating metadata and taking many or all the processed files and placing them in a directory exposed publicly for later playback.

Post-Scripts
Post-scripts allow you to perform site-specific actions after each of the Archive, Process, and Publish steps of the Recording processing.
Some examples of things you might use the post-scripts to do:
- Send you an email after a recording is published.
- Back up a recording to another server after your recording is archived or published.
- Send a text message after a recording is published.
- Compress media files and make them publicly available for download after it is published.
- Delete raw media files after the recording processing completes.
Playback
The Playback phase involves taking the published files (audio, webcam, deskshare, chat, events, notes, captions, polls, metadata) and playing them in the browser.
Using the workflow presentation, playback is handled by HTML, CSS, and Javascript libraries; it is fully available in Mozilla Firefox and Google Chrome (also on Android devices). In other browsers like Opera or Safari the playback will work without all its functionality, e.g., thumbnails won't be shown.
There is not a unique video file for playback in the presentation workflow. However, the video workflow can be used to generate that unique video file. This workflow is not enabled by default. See section below to learn how to enable it.
Media storage
Some Record and Playback phases store the media they handle in different directories:
Captured files
- AUDIO:
/var/freeswitch/meetings - WEBCAM:
/var/lib/bbb-webrtc-recorder/recordings/<meetingid> - SCREEN SHARING:
/var/lib/bbb-webrtc-recorder/screenshare/<meetingid> - SLIDES:
/var/bigbluebutton/<meetingid> - NOTES:
http://localhost:9002/p - EVENTS:
Redis
Archived files
The archived file are located in /var/bigbluebutton/recording/raw/<internal-meeting-id>/.
Sanity checked files
The sanity files are store in the same place as the archived files.
Processed files
The processed files can be found in /var/bigbluebutton/recording/process/presentation/<internal-meeting-id>/.
Published files
The published files are in /var/bigbluebutton/recording/publish/presentation/<internal-meeting-id>/.
Playback files
The playback files are found in /var/bigbluebutton/published/presentation/<internal-meeting-id>/.
Manage recordings
BigBlueButton does not have an administrator web interface to control the sessions or recordings as in both cases they are handled by 3rd party software, but it has a useful tool to monitor the state and control your recordings through the phases described above.
In the terminal of your server you can execute bbb-record, which will show you each option with its description:
BigBlueButton Recording Diagnostic Utility (BigBlueButton Version 2.5.N)
bbb-record [options]
Reporting:
--list List all recordings
--list-recent List recent recordings
--list-recent --withDesc List recent recordings and show their description
--list-workflows List available recording workflows
Monitoring:
--watch Watch processing of recordings
--watch --withDesc Watch processing of recordings and show their description
Administration:
--rebuild <internal meetingID> rebuild the output for the given internal meetingID
--rebuildall rebuild every recording
--delete <internal meetingID> delete one meeting and recording
--deleteall delete all meetings and recordings
--debug check for recording errors
--check check for configuration errors
--enable <workflow> enable a recording workflow
--disable <workflow> disable a recording workflow
--tointernal <external meetingId> get the internal meeting ids for the given external meetingId
--toexternal <internal meetingId> get the external meeting id for the given internal meetingId
--republish <internal meetingID> republish the recording for meetingID.
(Only for Matterhorn Integration)
Useful settings
| Name | Path (file) | Description |
|---|---|---|
| webcamsOnlyForModerator | /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties | If true, only the moderator's cam will be showed in playback depending on how the show_moderator_viewpoint. It can be changed in the ongoing meeting |
| show_moderator_viewpoint | /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | If false, the viewer's point of view will be showed, meaning that if the above property is set to true, only the moderator's camera will be displayed. |
Useful terms
- workflow - is the way a recording is processed, published, and played. In BigBlueButton 2.4 the unique workflow out of the box is the "presentation" format.
- internal meetingId - is an alphanumeric string that internally identifies your recorded meeting. It is created internally by BigBlueButton. For example "183f0bf3a0982a127bdb8161e0c44eb696b3e75c-1379693236230".
- external meetingID - is the id you set to the meeting, like "English 201" or "My Awesome class", "Chemistry 2". It is passed through the create API call.
- recording - is recorded meeting in BigBlueButton.
In BigBlueButton you can use the same external meeting ID (for example "English 101") in many recordings, but each recording will have a different internal meeting id. One external meeting id is associated with one or many internal meeting ids.
List recordings
$ bbb-record --list
will list all your recordings.
List recent recordings
$ bbb-record --list-recent
will list the 10 most recent recordings.
List workflows
Lists the enabled recording processing steps and the available processing scripts. This may provide valuable insights in case you're trying to debug why recordings aren't being processed in a specific format.
$ bbb-record --list-workflows
## Enabled recording processing steps:
#
## archive
## sanity
## captions
## process:presentation
## publish:presentation
#
## Available processing scripts:
#
## presentation
Watch recordings
$ bbb-record --watch
Lists your 10 latest recordings, refreshing the output every 2 seconds. As BigBlueButton processes a recording, you'll see progress updates from the background services.
Every 2.0s: bbb-record --list-recent
Internal MeetingID Time APVD APVDE RAS Slides Processed Published Ext. Meeting ID
------------------------------------------- ---- ----- --- ------ --------- --------- ---------------
29173583...1508b2efd7-1647630316965 Mar 18 X XX X XX 7 pres. pres. English 102
6e35e3b2...f5db637d7a-1538942881350 Oct 7 X X X 6 pres. English 101
9e468g2k...hij43b5d8b-1538941988186 Oct 7 XX XX X 9 pres. Demo Meeting
--
0 timers listed.
--
● bbb-rap-starter.service - BigBlueButton recording processing starter
Loaded: loaded (/usr/lib/systemd/system/bbb-rap-starter.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-03-01 18:27:19 CET; 2 weeks 0 days ago
Main PID: 3509 (rap-starter.rb)
Tasks: 2 (limit: 4915)
CGroup: /bbb_record_core.slice/bbb-rap-starter.service
└─3509 /usr/bin/ruby /usr/local/bigbluebutton/core/scripts/rap-starter.rb
● bbb-rap-resque-worker.service - BigBlueButton resque worker for recordings
Loaded: loaded (/usr/lib/systemd/system/bbb-rap-resque-worker.service; enabled)
Active: active (running) since Tue 2022-03-01 18:27:19 CET; 2 weeks 0 days ago
Main PID: 3847 (sh)
Tasks: 7 (limit: 4915)
CGroup: /system.slice/bbb-rap-resque-worker.service
├─ /usr/bin/rake -f ../Rakefile resque:workers >> /var/log/bigbluebutton/bbb-rap-worker.log
├─ /usr/bin/ruby /usr/bin/rake -f ../Rakefile resque:workers
└─ Waiting for rap:archive,rap:publish,rap:process,rap:sanity,rap:captions,rap:events
--
Rebuild a recording
This options makes a recording go through the Process and Publish phases again.
If you run bbb-record --rebuild on a recording where the process and publish scripts were not run because the moderator of the session did not click the record button, this will force the meeting to be processed as long as the raw files are still available and record was set to true. In this case, the entire length of the meeting will be included in the recording.
$ sudo bbb-record --rebuild 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965
Rebuild every recording
This option goes through the Process and Publish phases again for every recording in your server. As a result, it may take a long time to finish.
$ sudo bbb-record --rebuildall
Delete a meeting and its recording
Removes the meeting's data (such as uploaded files) and its recording.
$ sudo bbb-record --delete 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965
Warning -- this also wipes running meetings! To only remove a single published recording and its raw data, delete
/var/bigbluebutton/recording/raw/<meetingId>/var/bigbluebutton/published/presentation/<meetingId>
Delete all meetings and their recordings
Deletes all meeting-related data (such as uploaded files) and their recordings.
$ sudo bbb-record --deleteall
Warning -- this also wipes running meetings! To only remove the published recordings and their raw data, delete all entries under
/var/bigbluebutton/recording/raw//var/bigbluebutton/published/
Debug recordings
Check recording log files, looking for errors since the Archive phase.
$ sudo bbb-record --debug
Check recording configuration
Check for configuration errors in BigBlueButton 2.5 and later that may be preventing the recording service from running properly, such as permission and ownership checks.
$ sudo bbb-record --check
Enable a workflow
$ sudo bbb-record --enable presentation
Disable a workflow
$ sudo bbb-record --disable presentation
Get internal meeting ids
$ sudo bbb-record --tointernal "English 102"
will show
Internal meeting ids related to the given external meeting id:
-------------------------------------------------------------
29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965
Use double quotes for the external meeting id.
Get external meeting ids
$ sudo bbb-record --toexternal 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965
External meeting id related to the given internal meeting id:
-------------------------------------------------------------
English 102" meetingName="English 102
-------------------------------------------------------------
Republish recordings
Republish recordings.
$ sudo bbb-record --republish 29173583cf1ca21508b2efd7db566090bbefb36a-1647630316965
For Developers
Here you will find more details about the Record and Playback scripts.
The way to start a recorded session in BigBlueButton is setting the "record" parameter value to "true" in the create API call, which usually is handled by third party software.
Capture phase
The Capture phase is handled by many components.
To understand how it works, you should have basic, intermediate, or advanced understanding about tools like FreeSWITCH, Flex, Red5, and Redis. Dig into the BigBlueButton source code and search for information in the BigBlueButton mailing list for developers if you have more questions.
Archive, Sanity, Process and Publish
These phases are handled by Ruby scripts. The directory for those files is /usr/local/bigbluebutton/core/
/usr/local/bigbluebutton/core/
├── Gemfile
├── Gemfile.lock
├── Rakefile
├── lib
│ ├── boot.rb
│ ├── custom_hash.rb
│ ├── recordandplayback
│ │ ├── edl
│ │ │ ├── audio.rb
│ │ │ └── video.rb
│ │ ├── edl.rb
│ │ ├── events_archiver.rb
│ │ ├── generators
│ │ │ ├── audio.rb
│ │ │ ├── audio_processor.rb
│ │ │ ├── captions.rb
│ │ │ ├── events.rb
│ │ │ ├── presentation.rb
│ │ │ └── video.rb
│ │ ├── workers
│ │ │ ├── archive_worker.rb
│ │ │ ├── base_worker.rb
│ │ │ ├── captions_worker.rb