Cloud Recording
Record video calls, meetings, and live streams with customizable layouts
Overview
BaxCloud's cloud recording feature allows you to record video conferences, audio calls, screen shares, and live streams directly to the cloud. Recordings are processed server-side with customizable layouts, eliminating the need for participants to record locally. Perfect for creating on-demand content, compliance, training materials, and meeting archives.
Cloud Processing
Server-side recording, no client resources used
Custom Layouts
Grid, speaker, spotlight, or custom compositions
Easy Download
Download recordings as MP4 or audio-only files
Common Use Cases
Meeting Archives
Record team meetings, client calls, and interviews for future reference. Team members who couldn't attend can watch later, and important discussions are preserved.
Webinar Replays
Turn live webinars into on-demand content. Attendees can rewatch, and those who missed it can access the recording. Great for lead generation and educational content.
Podcast Production
Record podcast episodes with remote guests. Download high-quality audio or video files for editing and publishing to podcast platforms.
Compliance & Training
Record sessions for compliance purposes, employee training, or quality assurance. Maintain archives for legal or regulatory requirements.
How Cloud Recording Works
BaxCloud's recording system operates entirely in the cloud:
1. Server-Side Composition
When you start recording, BaxCloud spins up a headless browser instance that joins your room as a special participant. This "recorder bot" receives all audio/video tracks, composes them into a single video according to your chosen layout, and saves the result to cloud storage.
2. Layout Templates
Choose from pre-built layout templates or create custom layouts:
- Grid: All participants in equal-sized tiles (e.g., 2x2, 3x3)
- Speaker: Active speaker prominent, others small
- Spotlight: Single participant in full frame
- Custom: Define exact positions and sizes via JSON
3. Recording Modes
Records both video and audio tracks. Output is MP4 file with H.264 video and AAC audio.
Records only audio tracks. Output is M4A or MP3 file. Perfect for podcasts and voice calls.
Records each participant's audio/video separately. Useful for advanced post-production editing.
4. Storage & Delivery
Recordings are stored in BaxCloud's S3-compatible storage with configurable retention policies. After recording stops, processing takes 1-3 minutes. You can then download, stream, or integrate with your own storage via webhook notifications.
Step-by-Step Implementation
Add recording capabilities to your application
Start a Recording
Begin recording with your preferred settings
Start recording a room. Recording events (start, stop, complete) will be sent to your configured webhooks in the dashboard:
1const recording = await client.startRecording({
2 roomName: 'my-room',
3 fileType: 'MP4',
4});
5
6console.log('Recording started:', recording.egressId);Note
Stop a Recording
Stop an active recording
Stop an active recording using the egress ID from `startRecording()`:
1await client.stopRecording(recording.egressId);List Recordings
List active recordings or all recordings with pagination
List active recordings or all recordings with pagination support:
1// List all active recordings
2const activeRecordings = await client.listActiveRecordings();
3
4// List active recordings for a specific room
5const roomRecordings = await client.listActiveRecordings('my-room');
6
7// List all recordings with pagination
8const recordings = await client.listRecordings({
9 status: 'COMPLETED',
10 page: 1,
11 limit: 20,
12});
13
14console.log('Recordings:', recordings.items);
15console.log('Total:', recordings.meta.total);Get Recording Details
Get detailed information about a specific recording
Get detailed information about a specific recording:
1const recording = await client.getRecording('recording-123');
2console.log('Recording status:', recording.status);
3console.log('File URL:', recording.fileUrl);Get Recording Download URL
Get a temporary download URL for a recording file
Get a temporary download URL for a recording file with optional expiration:
1const { downloadUrl, expiresIn } = await client.getRecordingDownloadUrl('recording-123', 7200);
2console.log('Download URL (expires in 2 hours):', downloadUrl);Recording Webhook Events
Receive notifications when recording events occur
Recording lifecycle events are automatically sent to your configured webhooks in the dashboard. Events include:
recording.started
Sent when recording starts
1{
2 "event": "recording.started",
3 "recording": {
4 "id": "recording-123",
5 "egressId": "egress-456",
6 "roomName": "my-room",
7 "status": "STARTED",
8 "createdAt": "2024-01-18T10:00:00Z"
9 }
10}recording.completed
Sent when recording completes successfully
1{
2 "event": "recording.completed",
3 "recording": {
4 "id": "recording-123",
5 "egressId": "egress-456",
6 "roomName": "my-room",
7 "status": "COMPLETED",
8 "fileUrl": "https://storage.baxcloud.com/recordings/recording-123.mp4",
9 "createdAt": "2024-01-18T10:00:00Z",
10 "completedAt": "2024-01-18T10:05:00Z"
11 }
12}recording.failed
Sent when recording fails
1{
2 "event": "recording.failed",
3 "recording": {
4 "id": "recording-123",
5 "egressId": "egress-456",
6 "roomName": "my-room",
7 "status": "FAILED",
8 "error": "Recording timeout",
9 "createdAt": "2024-01-18T10:00:00Z"
10 }
11}Webhook Configuration
recording.started, recording.completed, andrecording.failed are enabled.Storage & Retention Policies
Recordings are automatically stored in BaxCloud's S3-compatible storage. You can configure retention policies to automatically delete old recordings and manage storage costs.
How Storage Works
When a recording completes, the video file is automatically uploaded to BaxCloud's S3 storage. The recording metadata (including the S3 file URL) is stored in the database for easy access.
Recordings can be accessed via the getRecording() method which returns the file URL, or downloaded using getRecordingDownloadUrl() which generates a temporary presigned URL for secure access.
Retention Policies
Retention policies are configured in your project dashboard under Settings. You can set automatic deletion for recordings older than a specified number of days (e.g., 30, 60, or 90 days).
A cleanup worker automatically runs periodically to delete old recordings that exceed the retention period. Both the database record and the S3 file are removed during cleanup.
Storage Location
Recordings are stored in BaxCloud's S3-compatible storage. Files are organized by project and room name, with automatic CDN delivery for fast downloads.
Storage Costs
Configuration
Best Practices
Notify participants before recording
Always inform participants that recording is starting. Many jurisdictions legally require consent. Show a clear "Recording" indicator in your UI.
Choose appropriate quality settings
1080p at 30fps is sufficient for most meetings. Higher quality increases file size and processing time. For audio-only podcasts, 192kbps AAC provides excellent quality.
Set retention policies
Configure auto-deletion for recordings you don't need long-term. This saves storage costs and complies with data minimization principles.
Use meaningful filenames
Include date, topic, or meeting ID in recording filenames. This makes recordings easier to find and organize later.
Implement access controls
Restrict who can view and download recordings. Use signed URLs with expiration for secure sharing. Don't make recording URLs publicly accessible without authentication.
Monitor storage usage
Track recording storage consumption to avoid unexpected costs. Set up alerts when approaching storage limits.
Troubleshooting
Recording Won't Start
- Verify you have host/co-host role with recording permission
- Check that recording is enabled for your project
- Ensure at least one participant is publishing media
- Verify you haven't reached concurrent recording limit
Recording Failed During Processing
- Check recording duration wasn't too long (max 8 hours)
- Verify there was actual media to record (not empty room)
- Check webhook logs for error details
- Contact support if issue persists
Poor Recording Quality
- Increase video resolution and bitrate settings
- Check that participants had good network during call
- Verify source video quality was adequate
- For audio, increase bitrate to 192kbps or higher
Can't Download Recording
- Ensure recording status is 'completed' not 'processing'
- Check that recording hasn't been deleted
- Verify download URL hasn't expired (valid for 24 hours)
- Request new download URL if needed