Skip to main content
← Back to Quickstart Guides

Stream Recordings

Automatic recording, processing, and storage via Cloudflare Stream + R2

50PB+
Recordings Stored
99.999%
Storage Durability
<30s
Processing Start
$0
Egress with R2

Recording API Integration

Complete SDK examples for all platforms

import { WaveClient } from '@wave/sdk';

const wave = new WaveClient({
  apiKey: process.env.WAVE_API_KEY,
});

// Start recording with full configuration
async function startRecording(streamId: string) {
  const recording = await wave.recordings.start(streamId, {
    format: 'mp4',
    quality: '1080p',
    storage: {
      destination: 'cloudflare_r2',
      bucket: 'my-recordings',
      path: 'streams/{stream_id}/{date}/{time}',
    },
    options: {
      autoStopOnDisconnect: true,
      generateThumbnails: true,
      thumbnailInterval: 60,
      createHlsVod: true,
      maxDurationHours: 8,
      splitEveryHours: 2, // Split long recordings
    },
    metadata: {
      title: 'My Live Stream',
      description: 'Weekly broadcast',
      tags: ['live', 'weekly'],
    },
  });

  console.log('Recording started:', recording.id);
  return recording;
}

Recording Formats

Choose the right format for your use case

FormatExtensionCompatibilityBest ForFile Size
MP4 (H.264)
Recommended
.mp4UniversalWeb playback, social sharing, general distributionMedium
MP4 (H.265/HEVC)
.mp4Modern devices4K content, storage optimization, premium archivesSmall (50% reduction)
WebM (VP9)
.webmWeb browsersWeb-first distribution, royalty-free codecSmall
HLS Segments
.m3u8 + .tsStreaming playersOn-demand streaming, adaptive bitrate VODLarge (multiple qualities)
Original Transport
.ts/.flvProfessionalArchival, re-encoding, broadcast backupLarge

Quality Presets

Resolution, bitrate, and storage estimates by quality level

PresetResolutionBitrateFrame RateStorage/HourAvailability
4K Ultra HD3840x216015-25 Mbps30/60~6.75 GB/hour
Enterprise
1440p QHD2560x14408-12 Mbps30/60~3.6 GB/hour
Professional
1080p Full HD1920x10804.5-8 Mbps30/60~2.25 GB/hour
All tiers
720p HD1280x7202.5-4 Mbps30/60~1.12 GB/hour
All tiers
480p SD854x4801-2 Mbps30~0.56 GB/hour
All tiers
Audio OnlyN/A128-320 KbpsN/A~0.14 GB/hour
All tiers

Storage Destinations

Where your recordings are stored

Cloudflare R2

Recommended

Zero egress fees, global edge delivery

  • No egress charges
  • S3-compatible API
  • Global CDN integration
  • Automatic geo-replication

Amazon S3

Industry-standard object storage

  • Lifecycle policies
  • Cross-region replication
  • Glacier archival
  • Fine-grained IAM

Google Cloud Storage

Unified storage with BigQuery integration

  • Multi-regional
  • BigQuery analytics
  • Nearline/Coldline tiers
  • Strong consistency

Custom S3-Compatible

Backblaze B2, MinIO, DigitalOcean Spaces

  • Bring your own storage
  • Cost optimization
  • Data sovereignty
  • Custom retention

Configure Custom Storage

// Configure S3-compatible storage destination
curl -X POST https://api.wave.com/v1/storage/destinations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-backblaze-storage",
    "type": "s3_compatible",
    "config": {
      "endpoint": "https://s3.us-west-001.backblazeb2.com",
      "bucket": "wave-recordings",
      "region": "us-west-001",
      "access_key_id": "YOUR_KEY_ID",
      "secret_access_key": "YOUR_SECRET_KEY",
      "path_prefix": "streams/",
      "storage_class": "STANDARD"
    },
    "lifecycle": {
      "transition_to_archive_days": 90,
      "delete_after_days": 365
    }
  }'

API Reference

Complete API endpoints for recording management

POST
/api/v1/streams/:id/recordings/start

Start recording a live stream

format
quality
storage_destination
filename_template
POST
/api/v1/streams/:id/recordings/stop

Stop an active recording

finalize_immediately
GET
/api/v1/streams/:id/recordings

List all recordings for a stream

status
limit
offset
sort
GET
/api/v1/recordings/:recording_id

Get recording details and status

GET
/api/v1/recordings/:recording_id/download

Get signed download URL

expires_in
filename
DELETE
/api/v1/recordings/:recording_id

Delete a recording permanently

confirm
POST
/api/v1/recordings/:recording_id/transcode

Create additional quality variants

target_qualities
output_format
PATCH
/api/v1/recordings/:recording_id

Update recording metadata

title
description
tags
visibility

Auto-Recording Configuration

Automatically record streams when they go live

// Enable auto-recording for a stream
curl -X PATCH https://api.wave.com/v1/streams/{stream_id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recording": {
      "auto_record": true,
      "default_format": "mp4",
      "default_quality": "1080p",
      "storage_destination": "cloudflare_r2",
      "filename_template": "{stream_title}_{date}_{time}",
      "max_duration_hours": 8,
      "options": {
        "generate_thumbnails": true,
        "thumbnail_interval_seconds": 60,
        "create_hls_vod": true,
        "notify_on_ready": true
      }
    }
  }'

Filename Template Variables

Available variables: {stream_id},{stream_title},{date},{time},{timestamp},{recording_id}

Webhook Events

Real-time notifications for recording lifecycle events

recording.started

Recording has begun capturing

recording_id
stream_id
started_at
format
quality
recording.stopped

Recording capture has stopped

recording_id
stream_id
stopped_at
duration_seconds
recording.processing

Recording is being processed/transcoded

recording_id
progress_percent
estimated_completion
recording.ready

Recording is available for download

recording_id
download_url
file_size_bytes
duration_seconds
recording.failed

Recording failed due to an error

recording_id
error_code
error_message
failed_at
recording.deleted

Recording was permanently deleted

recording_id
deleted_by
deleted_at

Best Practices

Optimize your recording workflow for reliability and cost

Troubleshooting

Common issues and diagnostic commands

Customer Success Stories

How leading companies use WAVE recordings

Coursera

E-Learning

WAVE's recording infrastructure handles our 100,000+ hours of course content with 99.999% availability. The automatic transcoding to multiple qualities reduced our processing time by 78% while the R2 integration cut our egress costs to zero.

DP
David Park
VP of Engineering
127K+
Hours Recorded
67%
Cost Savings
4x faster
Processing Speed

ESPN+

Sports Broadcasting

For live sports, you get one chance to capture the moment. WAVE's recording system has never failed us across 15,000+ live events. The instant replay integration with sub-second clip extraction is a game-changer for our production workflow.

RT
Rachel Thompson
Director of Streaming Technology
15K+
Events Recorded
100%
Reliability
<1s
Clip Extraction

Vimeo

Video Platform

Migrating to WAVE from our legacy recording system was seamless. The S3-compatible API meant zero code changes, but we gained 3x transcoding speed and the intelligent storage tiering saves us $2.3M annually.

MC
Michael Chen
Principal Architect
340M+
Videos Stored
$2.3M
Annual Savings
3x faster
Transcoding

Storage Cost Estimator

Estimate your monthly recording storage costs

Hours/Month720p Storage1080p Storage4K StorageR2 Cost*
10 hours11.2 GB22.5 GB67.5 GB~$1.01
50 hours56 GB112.5 GB337.5 GB~$5.06
200 hours224 GB450 GB1.35 TB~$20.25
1000 hours1.12 TB2.25 TB6.75 TB~$101.25

* Cloudflare R2 pricing: $0.015/GB/month storage. Zero egress fees. Prices are estimates based on 1080p quality.

WAVE - Enterprise Live Streaming Platform