Start and stop recording
This guide focuses on using room composite (browser-based) recordings. Learn more in recordings overview.
A composite recording is a single MP4 file that records all peers and their tracks (audio, video and screen share). It captures the experience that a peer has in the room and is equivalent to recordings generated from Google Meet and Zoom.
A composite recording is different from track-level recordings, which generate single file per audio/video track. To use track-level recordings, enable SFU recordings on your template.
Enable recordings on the dashboard
In your template configuration, enable room composite recordings.
Start recording with API
Use the server-side API to start recording for a given room (passed as room_id
in the request body). Any configuration specified here will override the configuration on the template.
Also see API reference.
curl --request POST 'https://api.100ms.live/v2/recordings/room/<room_id>/start' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <management_token>' \ --data-raw '{ "resolution" : {"width": 1280, "height": 720} }'
Automate start recording (Optional)
If you wish to automatically start 'Room composite' recordings for all your rooms and sessions when the first peer joins, you can enable the 'Enable auto-start on room join' toggle in the Recording tab of the template in the 100ms dashboard. Note that enabling this will disable HLS and RTMP streaming for that template if you have them enabled.
Listen to recording status updates
Start recording is asynchronous and you can listen to status changes to the recording jobs with webhooks.
beam.started.success
event: This is sent when recording starts successfullybeam.recording.success
event: This is sent when recording ends successfullybeam.failure
event: This is sent when there is a failure
Stop recording with API
Use the server-side API to end recording for a given room (passed as room_id
in the request body).
curl --request POST 'https://api.100ms.live/v2/recordings/room/<room_id>/stop' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <management_token>'
Also see API reference.
Automatically stop recording
Note that recording automatically ends in 5 minutes after all peers (excluding Beam) have left the room.
To instantly end recording when peers have left the room, you can also chain up our APIs to run relevant business logic before stopping the recording. This ensures the video file will not have the extra 5 minutes of empty frames.
- Listen to the
peer.leave.success
webhook event - Make an API call to get peers in the session with the active room APIs: fetching the active room (session) and relevant peer info
- If Beam (bot peer that records the session) is the only peer in the room, you can end the recording with the above API
Get recording assets
There are multiple ways to get the recording assets (files). By default, recording assets are saved in 100ms storage buckets and retained up to 15 days. We recommend configuring your own storage buckets so that assets are automatically transferred and you control their retention lifecycle.
If you are relying on the 100ms storage bucket, we recommend downloading the asset from the dashboard or programmatically via the webhook/API.
Configure your own storage
100ms supports AWS S3, Google Cloud Storage and Alibaba OSS as storage buckets. These can be configured on the 100ms dashboard.
Download assets from dashboard
Recording assets can be downloaded from the 100ms dashboard. Use the sessions page to navigate to the relevant session page, which has links to the recorded assets.
Download assets via webhooks
The beam.recording.success
webhook event contains the pre-signed URL to the recording asset (in the property called recording_presigned_url
). This is a short-lived URL, that can be used to download the asset.
Fetch assets via API
You can use the recording assets REST APIs to fetch the assets:
- List recording assets for a room/session
- Generate a pre-signed URL for an asset