{"id":1184,"date":"2026-07-02T09:45:50","date_gmt":"2026-07-02T02:45:50","guid":{"rendered":"https:\/\/liveapi.com\/blog\/cloudflare-stream\/"},"modified":"2026-07-02T09:46:20","modified_gmt":"2026-07-02T02:46:20","slug":"cloudflare-stream","status":"publish","type":"post","link":"https:\/\/liveapi.com\/blog\/cloudflare-stream\/","title":{"rendered":"What Is Cloudflare Stream? Features, Pricing, and Alternatives (2026)"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\">10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><p>Adding video to an app used to mean stitching together an encoder, a storage bucket, a transcoding pipeline, and a CDN \u2014 then keeping all of it running. Cloudflare Stream collapses that stack into a single API and a usage-based bill, which is why so many developers reach for it when they need to ship a video feature quickly.<\/p>\n<p>Cloudflare Stream is Cloudflare&#8217;s managed video platform for uploading, storing, live streaming, and delivering video through the same global network that powers its CDN and security products. You hand it a file or an RTMPS feed, and it handles encoding, adaptive bitrate packaging, playback, and analytics.<\/p>\n<p>This guide covers what Cloudflare Stream is, how it works under the hood, its full 2026 pricing model, features, advantages, and limitations. You&#8217;ll also see how to get started with the API and how Stream compares to alternatives like Mux, Bunny Stream, and API-first platforms \u2014 so you can decide whether it fits your project or whether another approach makes more sense.<\/p>\n<h2>What Is Cloudflare Stream?<\/h2>\n<p>Cloudflare Stream is a video hosting and live streaming service that handles encoding, storage, adaptive bitrate delivery, and playback through Cloudflare&#8217;s global edge network. It gives developers a single API to upload on-demand videos or ingest live streams, then serves them as <a href=\"https:\/\/liveapi.com\/blog\/adaptive-bitrate-streaming\/\" target=\"_blank\">adaptive bitrate streaming<\/a> over HLS and DASH to any device.<\/p>\n<p>The product sits inside Cloudflare&#8217;s developer platform alongside Workers, R2, and Images. Instead of billing for bandwidth, storage, and compute separately, Stream charges on two simple dimensions: minutes of video stored and minutes of video delivered. Encoding and ingest are free.<\/p>\n<p>Stream exists because building video infrastructure in-house is expensive and slow. A typical team spends months wiring together an encoding cluster, an origin store, a packaging layer, and a CDN \u2014 and then owns the maintenance forever. Stream abstracts all of that behind REST and GraphQL APIs so a developer can add video without becoming a video engineer.<\/p>\n<p>Here&#8217;s a quick snapshot of what Cloudflare Stream offers:<\/p>\n<table>\n<thead>\n<tr>\n<th>Attribute<\/th>\n<th>Cloudflare Stream<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Type<\/td>\n<td>Managed video hosting + live streaming API<\/td>\n<\/tr>\n<tr>\n<td>Ingest (live)<\/td>\n<td>RTMPS, SRT<\/td>\n<\/tr>\n<tr>\n<td>Upload (VOD)<\/td>\n<td>Dashboard, TUS resumable, direct creator uploads, upload from URL<\/td>\n<\/tr>\n<tr>\n<td>Output formats<\/td>\n<td>HLS, DASH, MP4 download<\/td>\n<\/tr>\n<tr>\n<td>Codec<\/td>\n<td>H.264 (AAC audio)<\/td>\n<\/tr>\n<tr>\n<td>Adaptive bitrate<\/td>\n<td>Automatic (360p\u20131080p)<\/td>\n<\/tr>\n<tr>\n<td>Player<\/td>\n<td>Built-in iframe player + any HLS\/DASH player<\/td>\n<\/tr>\n<tr>\n<td>Pricing model<\/td>\n<td>$5 per 1,000 minutes stored + $1 per 1,000 minutes delivered<\/td>\n<\/tr>\n<tr>\n<td>Free tier<\/td>\n<td>None (ingest and encoding are free)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>How Does Cloudflare Stream Work?<\/h2>\n<p>Cloudflare Stream follows the same pipeline whether you send it a recorded file or a live feed: ingest, encode, package, deliver. The difference is where the video comes from and how quickly it needs to reach viewers.<\/p>\n<ol>\n<li><strong>Ingest.<\/strong> You upload a video file (up to 30 GB) using the dashboard, the TUS resumable protocol, a direct creator upload URL, or an import from a link. For live, you push an <a href=\"https:\/\/liveapi.com\/blog\/what-is-rtmp\/\" target=\"_blank\">RTMP<\/a>-over-TLS (<a href=\"https:\/\/liveapi.com\/blog\/rtmp-vs-rtmps\/\" target=\"_blank\">RTMPS<\/a>) or <a href=\"https:\/\/liveapi.com\/blog\/srt-protocol\/\" target=\"_blank\">SRT<\/a> feed from OBS or a hardware encoder to a live input you created via the API.<\/li>\n<li><strong>Encode.<\/strong> Stream transcodes the source into multiple H.264 renditions \u2014 typically 360p, 480p, 720p, and 1080p. This step is free and happens automatically, with no encoding settings to tune.<\/li>\n<li><strong>Package.<\/strong> The renditions are packaged into <a href=\"https:\/\/liveapi.com\/blog\/what-is-hls\/\" target=\"_blank\">HLS<\/a> and <a href=\"https:\/\/liveapi.com\/blog\/mpeg-dash\/\" target=\"_blank\">MPEG-DASH<\/a> manifests so players can switch quality levels based on the viewer&#8217;s connection.<\/li>\n<li><strong>Deliver.<\/strong> Video is served from Cloudflare&#8217;s edge network in hundreds of cities. Playback happens through the built-in Stream Player, a custom HLS\/DASH player, or native mobile players.<\/li>\n<li><strong>Record (live only).<\/strong> If you enable automatic recording, a live broadcast is saved as an on-demand video the moment it ends, with DVR-style rewind available during the stream.<\/li>\n<\/ol>\n<p>The key architectural detail is that ingest and encoding cost nothing \u2014 you only pay once video is stored and once it&#8217;s delivered to a viewer. That pricing shape rewards apps with large catalogs and predictable viewership, and it removes the separate egress fees that make many CDN bills unpredictable.<\/p>\n<h2>Cloudflare Stream Features<\/h2>\n<p>Stream packs a full video workflow into one API. These are the capabilities that matter most when you&#8217;re evaluating it for a real project.<\/p>\n<h3>Live Streaming with RTMPS and SRT<\/h3>\n<p>You create a live input through the <code>POST \/live_inputs<\/code> endpoint, get back a stream key, and push to it from any RTMPS or SRT encoder. Stream supports automatic recording to VOD, DVR rewind, simulcasting to YouTube, Twitch, and Facebook, and a beta low-latency HLS mode. Live recordings are capped at seven days.<\/p>\n<h3>Adaptive Bitrate and Multi-Device Playback<\/h3>\n<p>Every upload is encoded into multiple quality levels automatically, so viewers on slow connections get 360p while those on fast ones get 1080p \u2014 with no extra storage charge for the extra renditions. Playback works across the built-in player, hls.js, Shaka Player, Video.js, native iOS AVPlayer, and Android ExoPlayer.<\/p>\n<h3>The Built-In Stream Player<\/h3>\n<p>Stream ships an iframe-embeddable <a href=\"https:\/\/liveapi.com\/blog\/video-player-api\/\" target=\"_blank\">video player<\/a> that works on any domain, whether or not the site runs on Cloudflare. Dropping in the Cloudflare Stream embed code takes a single <code>&lt;iframe&gt;<\/code> tag, and the player handles quality switching, captions, and thumbnails out of the box.<\/p>\n<h3>Signed URLs and Access Control<\/h3>\n<p>For private or paid content, Stream generates signed URLs with short-lived tokens. You can require signed access per video, associate videos with a creator ID, and restrict playback by domain. Note that Stream uses token-based access rather than full DRM \u2014 there&#8217;s no built-in <a href=\"https:\/\/liveapi.com\/blog\/widevine-drm\/\" target=\"_blank\">Widevine<\/a> or <a href=\"https:\/\/liveapi.com\/blog\/fairplay-drm\/\" target=\"_blank\">FairPlay<\/a> support.<\/p>\n<h3>Analytics and Webhooks<\/h3>\n<p>Server-side analytics expose views per video, geographic breakdowns, per-creator metrics, and real-time live viewer counts through the dashboard and a GraphQL API. <a href=\"https:\/\/liveapi.com\/blog\/webhook-vs-api\/\" target=\"_blank\">Webhooks<\/a> fire on processing-complete and error events so you can automate post-upload workflows.<\/p>\n<h3>Downloads, Thumbnails, and Captions<\/h3>\n<p>Stream can generate downloadable MP4 files for offline viewing, produce still-frame thumbnails and animated GIF previews, and accept caption tracks and additional audio tracks through the API.<\/p>\n<h2>Cloudflare Stream Pricing<\/h2>\n<p>Cloudflare Stream pricing is built on two metered dimensions, which makes it easier to forecast than bandwidth-based billing. According to <a href=\"https:\/\/developers.cloudflare.com\/stream\/pricing\/\" target=\"_blank\" rel=\"nofollow\">Cloudflare&#8217;s pricing documentation<\/a>, the rates as of 2026 are:<\/p>\n<table>\n<thead>\n<tr>\n<th>Dimension<\/th>\n<th>Price<\/th>\n<th>Billing model<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Storage<\/td>\n<td>$5 per 1,000 minutes stored<\/td>\n<td>Prepaid, in $5 increments<\/td>\n<\/tr>\n<tr>\n<td>Delivery<\/td>\n<td>$1 per 1,000 minutes delivered<\/td>\n<td>Post-paid, usage-based<\/td>\n<\/tr>\n<tr>\n<td>Ingest (upload)<\/td>\n<td>Free<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<tr>\n<td>Encoding<\/td>\n<td>Free<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A few details shape the real cost of Cloudflare Stream pricing per minute:<\/p>\n<ul>\n<li><strong>Storage<\/strong> is billed on the total duration of every uploaded video plus live recordings, regardless of how many quality renditions Stream generates. Extra bitrates don&#8217;t add storage cost.<\/li>\n<li><strong>Delivery<\/strong> counts minutes watched across the Stream Player, HLS\/DASH playback, MP4 downloads, and live simulcast outputs. Client-side buffering is billable, but replays served from the browser cache are not.<\/li>\n<li><strong>No separate egress fees.<\/strong> Bandwidth is included in the $1-per-1,000-delivered-minutes rate, which is the biggest difference from stitching together your own storage and CDN.<\/li>\n<li><strong>No free tier.<\/strong> Unlike some competitors, Stream has no perpetual free allowance \u2014 you buy storage before you can upload \u2014 though ingest and encoding never cost anything.<\/li>\n<\/ul>\n<p>As a quick example: hosting 1,000 minutes (about 16 hours) of video that gets watched 10,000 minutes per month would run roughly $5 in storage plus $10 in delivery, or about $15\/month. If you&#8217;re comparing options, our breakdown of <a href=\"https:\/\/liveapi.com\/blog\/video-hosting-costs\/\" target=\"_blank\">video hosting costs<\/a> walks through how these models add up at scale.<\/p>\n<h2>Advantages of Cloudflare Stream<\/h2>\n<p>Stream earns its popularity for a handful of concrete reasons.<\/p>\n<h3>Simple, Predictable Pricing<\/h3>\n<p>Two dimensions \u2014 storage and delivery \u2014 with no egress charges and free encoding. That makes it much easier to model costs than bandwidth-metered platforms where a viral video produces a surprise bill.<\/p>\n<h3>Global Edge Delivery<\/h3>\n<p>Video is served from Cloudflare&#8217;s network across hundreds of cities, so viewers connect to a nearby edge. That reach is the same infrastructure behind Cloudflare&#8217;s CDN, and it keeps <a href=\"https:\/\/liveapi.com\/blog\/what-is-video-latency\/\" target=\"_blank\">video latency<\/a> and rebuffering low without you managing a single CDN contract.<\/p>\n<h3>Low Barrier to Entry<\/h3>\n<p>There&#8217;s no subscription minimum and no sales call to start. You buy $5 of storage, call the API, and you&#8217;re live \u2014 a genuinely fast path from zero to a working video feature.<\/p>\n<h3>Free Encoding and Ingest<\/h3>\n<p>Transcoding a large back catalog costs nothing, and uploading never counts against your bill. You only pay once video sits in storage and once it&#8217;s actually watched.<\/p>\n<h3>Direct Creator Uploads<\/h3>\n<p>Stream can issue one-time upload URLs so your end users upload video straight to Cloudflare without ever touching your API tokens \u2014 useful for any UGC or creator platform.<\/p>\n<h3>Developer-Friendly Tooling<\/h3>\n<p>A REST API, a GraphQL analytics API, webhooks, and support for every major HLS\/DASH player mean you&#8217;re not locked into a proprietary SDK. You can swap the player without leaving the platform.<\/p>\n<h2>Disadvantages of Cloudflare Stream<\/h2>\n<p>No platform fits every use case, and Stream has real trade-offs worth weighing.<\/p>\n<h3>No Full DRM<\/h3>\n<p>Stream protects content with signed URLs and tokens, not studio-grade DRM. If you distribute premium or licensed content that requires Widevine or FairPlay, you&#8217;ll need a platform that supports them \u2014 Stream&#8217;s access control won&#8217;t satisfy those contracts.<\/p>\n<h3>Limited Codec Support<\/h3>\n<p>Encoding is H.264 only. There&#8217;s no AV1 or HEVC output, so you can&#8217;t take advantage of the 30\u201350% bandwidth savings newer codecs offer on large-scale delivery. For most apps H.264 is fine, but bandwidth-sensitive catalogs may feel the ceiling.<\/p>\n<h3>Constraints on Live<\/h3>\n<p>Watermarking works for VOD but not live, live recordings are capped at seven days, and low-latency HLS is still in beta. Teams with demanding live requirements should test these limits before committing.<\/p>\n<h3>No Free Tier<\/h3>\n<p>You must purchase storage before uploading anything, so there&#8217;s no perpetual free plan to prototype on the way Bunny Stream or YouTube offer. The entry cost is low, but it isn&#8217;t zero.<\/p>\n<h3>Tied to a Single Provider<\/h3>\n<p>Delivery runs entirely on Cloudflare&#8217;s network. That&#8217;s a strength for reach, but it means no <a href=\"https:\/\/liveapi.com\/blog\/best-cdn-for-video-streaming\/\" target=\"_blank\">multi-CDN<\/a> redundancy \u2014 if you want traffic split across Akamai, Fastly, and Cloudflare for failover, Stream alone won&#8217;t do it.<\/p>\n<p>Now that you know what Cloudflare Stream does well and where it falls short, let&#8217;s get practical \u2014 how to start using it, how it stacks up against alternatives, and how to tell whether it&#8217;s the right fit for your build.<\/p>\n<h2>How to Get Started with Cloudflare Stream<\/h2>\n<p>Getting a video live on Stream takes only a few steps. Here&#8217;s the path from account to playback.<\/p>\n<h3>1. Create a Cloudflare Account and Enable Stream<\/h3>\n<p>Sign up for Cloudflare, open the Stream product in the dashboard, and purchase your first block of storage. You&#8217;ll grab your account ID and an API token, which every request needs.<\/p>\n<h3>2. Upload a Video or Create a Live Input<\/h3>\n<p>For on-demand video, send a file to the Stream API. A basic upload from a URL looks like this:<\/p>\n<pre><code class=\"language-bash\">curl -X POST \\\n  &quot;https:\/\/api.cloudflare.com\/client\/v4\/accounts\/{account_id}\/stream\/copy&quot; \\\n  -H &quot;Authorization: Bearer {api_token}&quot; \\\n  -H &quot;Content-Type: application\/json&quot; \\\n  --data &#x27;{&quot;url&quot;: &quot;https:\/\/example.com\/video.mp4&quot;, &quot;meta&quot;: {&quot;name&quot;: &quot;demo&quot;}}&#x27;<\/code><\/pre>\n<p>For live streaming, create a live input to get a stream key:<\/p>\n<pre><code class=\"language-bash\">curl -X POST \\\n  &quot;https:\/\/api.cloudflare.com\/client\/v4\/accounts\/{account_id}\/stream\/live_inputs&quot; \\\n  -H &quot;Authorization: Bearer {api_token}&quot; \\\n  -H &quot;Content-Type: application\/json&quot; \\\n  --data &#x27;{&quot;recording&quot;: {&quot;mode&quot;: &quot;automatic&quot;}}&#x27;<\/code><\/pre>\n<p>Then point OBS or your encoder at the returned RTMPS URL and key.<\/p>\n<h3>3. Wait for Encoding, Then Grab the Playback URL<\/h3>\n<p>Stream transcodes the upload automatically. When the <code>readyToStream<\/code> flag flips true (or a webhook fires), you get an HLS manifest URL, a DASH manifest URL, and an embed code.<\/p>\n<h3>4. Embed the Player<\/h3>\n<p>Drop the iframe into your page \u2014 this is the Cloudflare Stream embed code in its simplest form:<\/p>\n<pre><code class=\"language-html\">&lt;iframe\n  src=&quot;https:\/\/iframe.videodelivery.net\/{video_id}&quot;\n  style=&quot;border:none&quot;\n  allow=&quot;autoplay; fullscreen&quot;\n  allowfullscreen&gt;\n&lt;\/iframe&gt;<\/code><\/pre>\n<p>Or plug the HLS URL into your own player if you need a custom UI.<\/p>\n<h3>5. Consider Whether an API Fits Your Whole Stack<\/h3>\n<p>Stream is a strong fit for straightforward hosting and playback. But if your product needs multi-protocol ingest (RTMP, SRT, and RTSP), <a href=\"https:\/\/liveapi.com\/blog\/stream-to-multiple-platforms\/\" target=\"_blank\">multistreaming<\/a> to 30+ destinations, multi-CDN failover, or automatic <a href=\"https:\/\/liveapi.com\/live-streaming-api\/\" target=\"_blank\">live-to-VOD<\/a> with no seven-day cap, a dedicated streaming API can cover more of the workflow. LiveAPI is a <a href=\"https:\/\/liveapi.com\/blog\/video-hosting-api\/\" target=\"_blank\">video hosting API<\/a> built for exactly that \u2014 4K live streaming, RTMP\/SRT\/RTSP ingest, instant encoding, HLS output across Akamai, Fastly, and Cloudflare CDNs, and pay-as-you-grow pricing. Teams use it to launch full streaming apps in days instead of spending months on infrastructure.<\/p>\n<h3>6. Add Analytics and Webhooks<\/h3>\n<p>Wire up the GraphQL analytics API for view data and subscribe to webhooks so your backend reacts the moment a video is ready or a stream ends.<\/p>\n<h2>Cloudflare Stream vs Alternatives<\/h2>\n<p>Stream is one of several managed video platforms, and the right choice depends on what your app needs beyond basic hosting. Here&#8217;s how it compares to the main options developers evaluate.<\/p>\n<table>\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>Cloudflare Stream<\/th>\n<th>Mux<\/th>\n<th>Bunny Stream<\/th>\n<th>LiveAPI<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Live ingest<\/td>\n<td>RTMPS, SRT<\/td>\n<td>RTMP, SRT<\/td>\n<td>RTMP<\/td>\n<td>RTMP, SRT, RTSP<\/td>\n<\/tr>\n<tr>\n<td>Adaptive bitrate<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr>\n<td>Multistreaming<\/td>\n<td>Simulcast only<\/td>\n<td>Limited<\/td>\n<td>No<\/td>\n<td>30+ platforms<\/td>\n<\/tr>\n<tr>\n<td>Multi-CDN<\/td>\n<td>Cloudflare only<\/td>\n<td>Multi-region<\/td>\n<td>Bunny CDN<\/td>\n<td>Akamai, Fastly, Cloudflare<\/td>\n<\/tr>\n<tr>\n<td>DRM<\/td>\n<td>Signed URLs<\/td>\n<td>Widevine\/FairPlay<\/td>\n<td>Limited<\/td>\n<td>Video protection options<\/td>\n<\/tr>\n<tr>\n<td>Free tier<\/td>\n<td>No<\/td>\n<td>Limited<\/td>\n<td>Yes<\/td>\n<td>Free trial<\/td>\n<\/tr>\n<tr>\n<td>Pricing<\/td>\n<td>Storage + delivery<\/td>\n<td>Per-minute<\/td>\n<td>Per-GB<\/td>\n<td>Pay as you grow<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li><strong>Cloudflare Stream vs Mux:<\/strong> <a href=\"https:\/\/liveapi.com\/blog\/mux-alternative\/\" target=\"_blank\">Mux<\/a> has a more mature developer ecosystem and full DRM, but its per-minute delivery tends to cost more than Stream&#8217;s flat $1 per 1,000 minutes. Stream wins on price simplicity; Mux wins on advanced features.<\/li>\n<li><strong>Cloudflare Stream vs Bunny Stream:<\/strong> Bunny offers a free tier and low per-GB rates, appealing for cost-sensitive projects, but its API and analytics are lighter than Stream&#8217;s.<\/li>\n<li><strong>Cloudflare Stream vs LiveAPI:<\/strong> Stream is ideal when Cloudflare&#8217;s edge is all the delivery you need. LiveAPI is built for teams that want multi-protocol ingest, <a href=\"https:\/\/liveapi.com\/video-api\/\" target=\"_blank\">multistreaming<\/a> to social platforms, multi-CDN redundancy, and live-to-VOD as first-class features in one API. If your roadmap includes broadcasting to YouTube and Twitch simultaneously or failing over between CDNs, that breadth matters.<\/li>\n<\/ul>\n<p>For a wider view of the landscape, our guide on how to <a href=\"https:\/\/liveapi.com\/blog\/how-to-build-a-video-streaming-app\/\" target=\"_blank\">build a video streaming app<\/a> covers the full build-versus-buy decision.<\/p>\n<h2>Is Cloudflare Stream Right for Your Project?<\/h2>\n<p>Stream is an easy recommendation for many teams \u2014 and the wrong tool for a few. Use this checklist to decide.<\/p>\n<p><strong>Cloudflare Stream is a good fit if you:<\/strong><\/p>\n<ul>\n<li>Want predictable, two-dimensional pricing with no egress surprises<\/li>\n<li>Already use Cloudflare and want video on the same platform<\/li>\n<li>Need straightforward VOD hosting and basic live streaming<\/li>\n<li>Want free encoding for a large back catalog<\/li>\n<li>Run a UGC or creator platform that needs direct creator uploads<\/li>\n<li>Prefer a low-commitment, pay-as-you-go start<\/li>\n<\/ul>\n<p><strong>Cloudflare Stream may not fit if you:<\/strong><\/p>\n<ul>\n<li>Distribute premium content that requires Widevine or FairPlay DRM<\/li>\n<li>Need AV1 or HEVC encoding to cut bandwidth costs at scale<\/li>\n<li>Want multi-CDN failover across several providers<\/li>\n<li>Need to multistream to 30+ social platforms from one source<\/li>\n<li>Require live recordings longer than seven days<\/li>\n<\/ul>\n<p>If your project leans toward that second list, an API-first platform with broader ingest, multistreaming, and multi-CDN delivery \u2014 like LiveAPI \u2014 will cover more of your workflow without extra glue code.<\/p>\n<h2>Cloudflare Stream FAQ<\/h2>\n<h3>Is Cloudflare Stream free?<\/h3>\n<p>No, Cloudflare Stream is not free, but ingest and encoding cost nothing. You pay $5 per 1,000 minutes of video stored and $1 per 1,000 minutes delivered. There&#8217;s no perpetual free tier \u2014 you must buy storage before uploading.<\/p>\n<h3>How much does Cloudflare Stream cost per minute?<\/h3>\n<p>Storage is $0.005 per minute stored ($5 per 1,000 minutes) and delivery is $0.001 per minute watched ($1 per 1,000 minutes). Encoding and upload are free, and there are no separate bandwidth or egress fees.<\/p>\n<h3>Does Cloudflare Stream support live streaming?<\/h3>\n<p>Yes. You create a live input via the API and push an RTMPS or SRT feed from OBS or a hardware encoder. Stream supports automatic recording to VOD, DVR rewind, simulcasting, and a beta low-latency HLS mode, with live recordings capped at seven days.<\/p>\n<h3>Can you download videos from Cloudflare Stream?<\/h3>\n<p>You can&#8217;t download the original source file, but Stream can generate encoded MP4 files for offline viewing through its MP4 Download feature. You enable it per video via the API.<\/p>\n<h3>Can I embed Cloudflare Stream on any website?<\/h3>\n<p>Yes. The Cloudflare Stream embed code is a standard <code>&lt;iframe&gt;<\/code> that works on any domain, whether or not your site is hosted on Cloudflare. You can also use the HLS or DASH manifest in a custom player.<\/p>\n<h3>Does Cloudflare Stream support DRM?<\/h3>\n<p>Not full DRM. Stream uses signed URLs with short-lived tokens plus domain restrictions for access control, but it doesn&#8217;t offer Widevine or FairPlay. For studio-grade content protection, you&#8217;ll need a platform with dedicated DRM support.<\/p>\n<h3>What codecs does Cloudflare Stream use?<\/h3>\n<p>Stream encodes to H.264 video with AAC audio. It accepts many input formats (MP4, MKV, MOV, and more) but re-encodes everything to H.264. There&#8217;s no AV1 or HEVC output.<\/p>\n<h3>What is the maximum upload size for Cloudflare Stream?<\/h3>\n<p>The maximum file size is 30 GB per video, and you can run up to 120 concurrent uploads by default. Large files are best uploaded with the TUS resumable protocol.<\/p>\n<h2>The Bottom Line<\/h2>\n<p>Cloudflare Stream turns the entire video pipeline \u2014 encoding, storage, adaptive bitrate delivery, and playback \u2014 into a single API with pricing you can actually forecast: $5 per 1,000 minutes stored and $1 per 1,000 minutes delivered, with free encoding and no egress fees. For straightforward hosting and basic live streaming on Cloudflare&#8217;s global edge, it&#8217;s hard to beat on simplicity.<\/p>\n<p>The trade-offs come down to breadth. If you need full DRM, newer codecs, multi-CDN failover, or multistreaming to dozens of platforms, Stream&#8217;s focused feature set will eventually push you toward more of your own glue code \u2014 or a broader platform.<\/p>\n<p><strong>Ready to build a video app with more than hosting?<\/strong> LiveAPI gives you 4K live streaming, RTMP\/SRT\/RTSP ingest, instant encoding, multistreaming to 30+ platforms, and delivery across Akamai, Fastly, and Cloudflare \u2014 launch in days, not months. <a href=\"https:\/\/liveapi.com\/\" target=\"_blank\">Get started with LiveAPI<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\">10<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span> Adding video to an app used to mean stitching together an encoder, a storage bucket, a transcoding pipeline, and a CDN \u2014 then keeping all of it running. Cloudflare Stream collapses that stack into a single API and a usage-based bill, which is why so many developers reach for it when they need to ship [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1185,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_title":"Cloudflare Stream: Pricing, Features & Alternatives %%sep%% %%sitename%%","_yoast_wpseo_metadesc":"Learn what Cloudflare Stream is, how it works, its per-minute pricing, features, pros and cons, and the best alternatives for developers building video apps.","inline_featured_image":false,"footnotes":""},"categories":[35],"tags":[],"class_list":["post-1184","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-video-hosting"],"jetpack_featured_media_url":"https:\/\/liveapi.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-stream.jpg","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v15.6.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"description\" content=\"Learn what Cloudflare Stream is, how it works, its per-minute pricing, features, pros and cons, and the best alternatives for developers building video apps.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cloudflare Stream: Pricing, Features &amp; Alternatives - LiveAPI Blog\" \/>\n<meta property=\"og:description\" content=\"Learn what Cloudflare Stream is, how it works, its per-minute pricing, features, pros and cons, and the best alternatives for developers building video apps.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/\" \/>\n<meta property=\"og:site_name\" content=\"LiveAPI Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-02T02:45:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-02T02:46:20+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"14 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/liveapi.com\/blog\/#website\",\"url\":\"https:\/\/liveapi.com\/blog\/\",\"name\":\"LiveAPI Blog\",\"description\":\"Live Video Streaming API Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/liveapi.com\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/liveapi.com\/blog\/wp-content\/uploads\/2026\/07\/cloudflare-stream.jpg\",\"width\":1600,\"height\":1065,\"caption\":\"Photo by panumas nikhomkhai on Pexels\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/#webpage\",\"url\":\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/\",\"name\":\"Cloudflare Stream: Pricing, Features & Alternatives - LiveAPI Blog\",\"isPartOf\":{\"@id\":\"https:\/\/liveapi.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/#primaryimage\"},\"datePublished\":\"2026-07-02T02:45:50+00:00\",\"dateModified\":\"2026-07-02T02:46:20+00:00\",\"author\":{\"@id\":\"https:\/\/liveapi.com\/blog\/#\/schema\/person\/98f2ee8b3a0bd93351c0d9e8ce490e4a\"},\"description\":\"Learn what Cloudflare Stream is, how it works, its per-minute pricing, features, pros and cons, and the best alternatives for developers building video apps.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/liveapi.com\/blog\/cloudflare-stream\/\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/liveapi.com\/blog\/#\/schema\/person\/98f2ee8b3a0bd93351c0d9e8ce490e4a\",\"name\":\"govz\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/liveapi.com\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ab5cbe0543c0a44dc944c720159323bd001fc39a8ba5b1f137cd22e7578e84c9?s=96&d=mm&r=g\",\"caption\":\"govz\"},\"sameAs\":[\"https:\/\/liveapi.com\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/posts\/1184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/comments?post=1184"}],"version-history":[{"count":1,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions"}],"predecessor-version":[{"id":1186,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions\/1186"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/media\/1185"}],"wp:attachment":[{"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/media?parent=1184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/categories?post=1184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/liveapi.com\/blog\/wp-json\/wp\/v2\/tags?post=1184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}