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

Video + Audio

Records both video and audio tracks. Output is MP4 file with H.264 video and AAC audio.

Audio Only

Records only audio tracks. Output is M4A or MP3 file. Perfect for podcasts and voice calls.

Individual Tracks

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

1

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

Recording events (`recording.started`, `recording.completed`, `recording.failed`) are automatically sent to your configured webhooks in the dashboard if webhooks are enabled for your project.
2

Stop a Recording

Stop an active recording

Stop an active recording using the egress ID from `startRecording()`:

1await client.stopRecording(recording.egressId);
3

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);
4

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);
5

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);
6

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

To receive recording events, configure webhooks in your project dashboard under Settings → Webhooks. Ensure the events 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

BaxCloud S3 Storage (Default)

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

Recordings consume storage space which may incur additional costs depending on your plan. Configure appropriate retention policies in your dashboard to automatically clean up old recordings and manage storage costs.
💡

Configuration

Storage and retention policies are configured in your project dashboard, not via the SDK. Navigate to your project Settings → Recordings to configure retention periods and view storage usage.

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