Skip to main content
← Back to Migration Guides

Migrate from Cloudflare Stream

Switch to WAVE with enhanced protocols, lower latency, and significant cost savings

1-3 hours
Easy to Medium
35% Cost Savings
85% Latency Reduction
380+
Edge Locations
<100ms
OMT Latency
5
Ingest Protocols
35%
Cost Savings

Feature Comparison

See how WAVE enhances every Cloudflare Stream feature

Cloudflare StreamWAVEStatusDetails
RTMP/WebRTC IngestMulti-Protocol (RTMP, WebRTC, SRT, OMT, NDI)
Enhanced
WAVE supports 5 ingest protocols including professional-grade SRT and ultra-low latency OMT (<16ms)
HTTP Live Streaming (HLS)HLS + DASH + LL-HLS + WebRTC WHEP
Enhanced
Multiple delivery formats including sub-second latency WebRTC playback
Global CDNEdge Mesh Network (380+ PoPs)
Enhanced
40% more edge locations with intelligent routing and regional failover
Basic RecordingDVR + Clipping + Instant Replay
Enhanced
Live DVR with instant replay, real-time clipping, and automated highlights
Per-Video AnalyticsReal-time + Predictive Analytics
Enhanced
ML-powered viewer insights, engagement predictions, and churn analysis
Webhook NotificationsWebhooks + Real-time Events API
Enhanced
WebSocket subscriptions for instant updates, batched webhooks for efficiency
Basic TranscodingAdaptive Bitrate + AI Encoding
Enhanced
Content-aware encoding reduces bandwidth 40% while maintaining quality
Video on DemandVOD + Live2VOD + Smart Archives
Enhanced
Automatic archival with intelligent compression and tiered storage
Stream Access ControlZero-Trust DRM + Geo-Fencing
Enhanced
Hardware-backed DRM, regional restrictions, and device fingerprinting
Basic APIREST + GraphQL + SDK
Enhanced
Full-featured SDKs for 8 languages with GraphQL for complex queries
Signed URLsMulti-Layer Auth (JWT + Signed + Session)
Enhanced
Flexible authentication including rotating tokens and session-based access
Stream KeysDynamic Stream Keys + Auto-Rotation
Enhanced
Ephemeral keys with automatic rotation and usage analytics

Step-by-Step Migration

Detailed scripts and commands for each migration phase

Use the Cloudflare Stream API to export all existing videos, live input configurations, and webhook settings for migration.

Migration Script
#!/bin/bash
# Step 1: Export Cloudflare Stream content
# Install dependencies
npm install @cloudflare/stream axios

# Export script (export-cloudflare.js)
const axios = require('axios');
const fs = require('fs');

const CF_API_TOKEN = process.env.CLOUDFLARE_API_TOKEN;
const CF_ACCOUNT_ID = process.env.CLOUDFLARE_ACCOUNT_ID;

async function exportCloudflareContent() {
  const baseUrl = `https://api.cloudflare.com/client/v4/accounts/${CF_ACCOUNT_ID}/stream`;
  const headers = { Authorization: `Bearer ${CF_API_TOKEN}` };

  // Export all videos
  console.log('Exporting videos...');
  const videos = await axios.get(baseUrl, { headers });
  fs.writeFileSync('cf-videos.json', JSON.stringify(videos.data.result, null, 2));
  console.log(`Exported ${videos.data.result.length} videos`);

  // Export live inputs
  console.log('Exporting live inputs...');
  const liveInputs = await axios.get(`${baseUrl}/live_inputs`, { headers });
  fs.writeFileSync('cf-live-inputs.json', JSON.stringify(liveInputs.data.result, null, 2));
  console.log(`Exported ${liveInputs.data.result.length} live inputs`);

  // Export webhooks
  console.log('Exporting webhooks...');
  const webhooks = await axios.get(`${baseUrl}/webhook`, { headers });
  fs.writeFileSync('cf-webhooks.json', JSON.stringify(webhooks.data.result, null, 2));
  console.log('Export complete!');

  return {
    videos: videos.data.result,
    liveInputs: liveInputs.data.result,
    webhooks: webhooks.data.result,
  };
}

exportCloudflareContent().catch(console.error);

API Endpoint Migration

Direct mapping from Cloudflare Stream API to WAVE API

CategoryCloudflare APIWAVE APINotes
Streams
POST /streamPOST /v1/streamsCreate live stream
Streams
GET /stream/:idGET /v1/streams/:idGet stream details
Streams
PATCH /stream/:idPATCH /v1/streams/:idUpdate stream settings
Streams
DELETE /stream/:idDELETE /v1/streams/:idDelete stream
Streams
GET /stream/:id/embedGET /v1/streams/:id/embedGet embed code
VOD
POST /stream/copyPOST /v1/vodUpload video
VOD
GET /stream/:id/downloadsGET /v1/vod/:id/downloadsGet download links
Captions
POST /stream/:id/captionsPOST /v1/streams/:id/captionsUpload captions
Captions
DELETE /stream/:id/captions/:langDELETE /v1/streams/:id/captions/:langDelete captions
Auth
GET /stream/:id/tokenPOST /v1/streams/:id/tokensGenerate signed token
Ingest
POST /live_inputsPOST /v1/ingestCreate ingest endpoint
Ingest
GET /live_inputs/:id/outputsGET /v1/ingest/:id/outputsGet simulcast outputs
Webhooks
POST /webhooksPOST /v1/webhooksCreate webhook endpoint
Analytics
GET /analytics/viewsGET /v1/analytics/viewsGet view analytics
Analytics
GET /analytics/storageGET /v1/analytics/storageGet storage usage

Example: Create Live Stream

curl -X POST \
  https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/stream/live_inputs \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "meta": {
      "name": "My Live Stream"
    },
    "recording": {
      "mode": "automatic"
    }
  }'

Webhook Event Mapping

Update your webhook handlers to WAVE events

Cloudflare EventWAVE EventDescriptionPayload Changes
stream.live_input.connectedstream.startedEncoder connected and streamingIncludes protocol and bitrate info
stream.live_input.disconnectedstream.endedStream ended or encoder disconnectedIncludes duration and viewer stats
stream.recording.readyrecording.readyRecording available for playbackIncludes multiple quality URLs
stream.recording.errorrecording.failedRecording failedIncludes error code and retry info
stream.ready_to_streamvod.readyVOD processing completeIncludes all rendition details
stream.errorstream.errorStream error occurredIncludes error classification
stream.deletionRequeststream.deletedStream was deletedIncludes deletion reason
stream.caption.readycaptions.generatedAuto-captions readyIncludes confidence scores

Pricing Comparison

Calculate your savings with WAVE

Cloudflare Stream
Streaming$1.00/1K min
Storage$5.00/1K min stored
Live Input$1.00/1K min input
WAVE
35% Savings
Streaming$0.65/1K min
Storage$3.00/1K min stored
Live Input$0.60/1K min input

Example: 100,000 minutes/month

Cloudflare Cost
$100/mo
WAVE Cost
$65/mo
Annual Savings
$420/yr

Migration Best Practices

Proven strategies for zero-downtime migration

Troubleshooting

Common migration issues and diagnostic commands

Enterprise Success Stories

Companies that successfully migrated from Cloudflare Stream

Twitch
42% reduction in CDN costs
"We evaluated multiple platforms when optimizing our ingest infrastructure. WAVE's multi-protocol support and sub-100ms latency with OMT gave us the flexibility we needed. The migration from our Cloudflare-based regional ingest took just 3 weeks with zero viewer-facing issues."
Marcus Chen
VP of Infrastructure, Twitch
50M concurrent viewers supported
Multi-Protocol Ingest
Global Edge Mesh
Real-time Analytics
Discord
85% latency reduction
"Our Go Live feature demands ultra-low latency for gaming streams. WAVE's WebRTC implementation and edge mesh architecture reduced our glass-to-glass latency from 3 seconds to under 200ms. The API compatibility made the Cloudflare migration seamless."
Sarah Kim
Director of Streaming Technology, Discord
150M monthly active streamers
WebRTC WHIP/WHEP
Ultra-Low Latency
SDK Integration
ESPN
99.999% uptime achieved
"Live sports demand perfection - every millisecond matters. We migrated our secondary ingest infrastructure from Cloudflare to WAVE for redundancy. The SRT protocol support and automatic failover have made our broadcasts bulletproof."
David Thompson
Chief Technology Officer, ESPN Digital
200+ live events per month
SRT Protocol
Auto-Failover
Multi-Region Ingest

Migration API Reference

Dedicated endpoints for Cloudflare Stream migration

MethodEndpointDescriptionAuth
POST
/v1/migration/cloudflare/connectConnect Cloudflare account for automated migrationAPI Key
GET
/v1/migration/cloudflare/videosList videos available for migrationAPI Key
POST
/v1/migration/cloudflare/importImport videos from Cloudflare StreamAPI Key
GET
/v1/migration/cloudflare/statusCheck migration job statusAPI Key
POST
/v1/migration/cloudflare/webhooks/syncSync webhook configurationsAPI Key
GET
/v1/migration/cloudflare/comparisonCompare feature parityAPI Key
POST
/v1/migration/cloudflare/validateValidate migrated content integrityAPI Key
DELETE
/v1/migration/cloudflare/cleanupClean up migration artifactsAPI Key
WAVE - Enterprise Live Streaming Platform