Skip to main content
← Back to Migration Guides

Migrate from Mux to WAVE

Complete migration guide with API mapping, cost savings, and automated tools

2-4 hours
Easy
40% Cost Savings

Feature Compatibility Matrix

How Mux features map to WAVE equivalents

Mux FeatureWAVE EquivalentCompatibilityNotes
Live StreamsLive Streams
100%
Full compatibility with enhanced protocols
Video on DemandRecordings + VOD
100%
Auto-convert live to VOD
Data APIAnalytics API
95%
Enhanced metrics available
WebhooksWebhooks
100%
Same event structure
Player EmbedPlayer Embed
100%
Drop-in replacement
HLS PlaybackHLS Playback
100%
Industry standard
RTMP IngestRTMP + SRT + WebRTC
100%+
More protocol options
Thumbnail GenerationThumbnail Generation
100%
Automatic + custom
Signed URLsSigned URLs
100%
JWT-based security
Low-LatencyUltra-Low Latency
100%+
<100ms with OMT

Cost Comparison

Estimated savings when migrating from Mux to WAVE

ServiceMux PricingWAVE PricingSavings
Streaming (per GB)$0.01$0.00640%
Encoding (per minute)$0.01$0.00730%
Storage (per GB/month)$0.03$0.0233%
Delivery (per GB)$0.15$0.0940%
Live streaming viewersIncluded (100)UnlimitedUnlimited

API Endpoint Mapping

Direct API equivalents for easy migration

Create Live Stream

Mux API:

POST https://api.mux.com/video/v1/live-streams
{
  "playback_policy": ["public"],
  "new_asset_settings": {
    "playback_policy": ["public"]
  }
}

WAVE API:

POST https://api.wave.inc/v1/streams
{
  "title": "My Stream",
  "protocol": "rtmp",
  "recording": { "enabled": true }
}

Get Stream Details

Mux API:

GET https://api.mux.com/video/v1/live-streams/{STREAM_ID}

WAVE API:

GET https://api.wave.inc/v1/streams/{STREAM_ID}

Delete Stream

Mux API:

DELETE https://api.mux.com/video/v1/live-streams/{STREAM_ID}

WAVE API:

DELETE https://api.wave.inc/v1/streams/{STREAM_ID}

Step-by-Step Migration Guide

Follow these steps to migrate from Mux to WAVE

1

Export Mux Configuration

Use Mux API to export your current streams, assets, and configuration:

# Export all live streams
curl https://api.mux.com/video/v1/live-streams \
  -H "Authorization: Basic $(echo -n MUX_TOKEN_ID:MUX_TOKEN_SECRET | base64)" \
  > mux-streams.json

# Export all assets
curl https://api.mux.com/video/v1/assets \
  -H "Authorization: Basic $(echo -n MUX_TOKEN_ID:MUX_TOKEN_SECRET | base64)" \
  > mux-assets.json
2

Set Up WAVE Account

Create your WAVE account and generate API keys:

  • Sign up at wave.inc/signup
  • Navigate to API Keys in your dashboard
  • Generate a new API key with streams:write scope
  • Store your API key securely
3

Migrate Live Streams

Use our migration script to recreate streams in WAVE:

import { WaveClient } from '@wave/api-client';
import muxStreams from './mux-streams.json';

const wave = new WaveClient({ apiKey: 'wave_live_xxxxx' });

for (const muxStream of muxStreams.data) {
  const waveStream = await wave.streams.create({
    title: muxStream.id, // or custom title
    protocol: 'rtmp', // or 'webrtc' for lower latency
    recording: { enabled: muxStream.new_asset_settings !== null }
  });

  console.log(`Migrated ${muxStream.id} -> ${waveStream.id}`);
  console.log(`New RTMP URL: ${waveStream.ingest.rtmp.url}`);
}
4

Migrate VOD Assets

Transfer existing video assets to WAVE:

import muxAssets from './mux-assets.json';

import { DesignTokens, getContainer, getSection } from '@/lib/design-tokens';
for (const asset of muxAssets.data) {
  // Download from Mux (or use direct playback URL)
  const playbackUrl = `https://stream.mux.com/${asset.playback_ids[0].id}.m3u8`;

  // Upload to WAVE
  const waveAsset = await wave.vod.create({
    source_url: playbackUrl,
    title: asset.id
  });

  console.log(`Migrated asset ${asset.id} -> ${waveAsset.id}`);
}
5

Update Webhooks

Configure WAVE webhooks to match your Mux webhook handlers:

await wave.webhooks.create({
  url: 'https://yourapp.com/webhooks/wave',
  events: [
    'stream.started',    // was: video.live_stream.active
    'stream.ended',      // was: video.live_stream.idle
    'recording.ready',   // was: video.asset.ready
    'recording.failed'   // was: video.asset.errored
  ]
});
6

Test & Validate

Verify everything works before switching production:

  • Test stream creation and playback
  • Verify recording functionality
  • Check webhook delivery
  • Test analytics API endpoints
  • Validate player embed codes
7

Switch Production Traffic

Once validated, update your application to use WAVE:

  • Update API endpoints from Mux to WAVE
  • Switch encoder RTMP/stream URLs
  • Update player embed codes
  • Monitor for 24-48 hours before decommissioning Mux

Common Migration Issues

Playback URLs don't work immediately

VOD assets need time to transcode. Check the asset status via the API before sharing playback URLs.

const status = await wave.vod.get(assetId);
console.log(status.state); // 'processing' or 'ready'

Analytics data is different

WAVE provides more detailed metrics. Map Mux's aggregated metrics to WAVE's granular analytics.

→ See Analytics API documentation

Signed URLs format is different

WAVE uses JWT-based signed URLs instead of Mux's signing scheme. Update your URL generation logic.

→ See Signed URLs guide

Migrate from Mux to WAVE | Migration Guide | WAVE