
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Fri, 10 Apr 2026 00:27:28 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Make your apps truly interactive with Cloudflare Realtime and RealtimeKit ]]></title>
            <link>https://blog.cloudflare.com/introducing-cloudflare-realtime-and-realtimekit/</link>
            <pubDate>Wed, 09 Apr 2025 14:05:00 GMT</pubDate>
            <description><![CDATA[ Announcing Cloudflare Realtime and RealtimeKit, a complete toolkit for shipping real-time audio and video apps in days with SDKs for Kotlin, React Native, Swift, JavaScript, and Flutter. ]]></description>
            <content:encoded><![CDATA[ <p>Over the past few years, we’ve seen developers push the boundaries of what’s possible with real-time communication — tools for collaborative work, massive online watch parties, and interactive live classrooms are all exploding in popularity.</p><p>We use AI more and more in our daily lives. Text-based interactions are evolving into something more natural: voice and video. When users interact with the applications and tools that AI developers create, we have high expectations for response time and connection quality. Complex applications of AI are built on not just one tool, but a combination of tools, often from different providers which requires a well connected cloud to sit in the middle for the coordination of different AI tools.</p><p>Developers already use <a href="https://developers.cloudflare.com/workers/"><u>Workers</u></a>, <a href="https://developers.cloudflare.com/workers-ai/"><u>Workers AI</u></a>, and our WebRTC <a href="https://developers.cloudflare.com/calls/"><u>SFU</u></a> and <a href="https://developers.cloudflare.com/calls/turn/"><u>TURN</u></a> services to build powerful apps without needing to think about coordinating compute or media services to be closest to their user. It’s only natural for there to be a singular <a href="https://blog.cloudflare.com/best-place-region-earth-inference/"><u>"Region: Earth"</u></a> for real-time applications.</p><p>We're excited to introduce <a href="https://realtime.cloudflare.com"><u>Cloudflare Realtime</u></a> — a suite of products to help you make your apps truly interactive with real-time audio and video experiences. Cloudflare Realtime now brings together our SFU, STUN, and TURN services, along with the new RealtimeKit.</p>
    <div>
      <h2>Say hello to RealtimeKit</h2>
      <a href="#say-hello-to-realtimekit">
        
      </a>
    </div>
    <p>RealtimeKit is a collection of mobile SDKs (iOS, Android, React Native, Flutter), SDKs for the Web (React, Angular, vanilla JS, WebComponents), and server side services (recording, coordination, transcription) that make it easier than ever to build real-time voice, video, and AI applications. RealtimeKit also includes user interface components to build interfaces quickly. </p><p>The amazing team behind <a href="https://dyte.io/"><u>Dyte</u></a>, a leading company in the real-time ecosystem, joined Cloudflare to accelerate the development of RealtimeKit. The Dyte team spent years focused on making real-time experiences accessible to developers of all skill levels, and had a deep understanding of the developer journey — they built abstractions that hid WebRTC's complexity without removing its power.</p><p>Already a user of Cloudflare’s products, Dyte was a perfect complement to Cloudflare’s existing real-time infrastructure spanning 300+ cities worldwide. They built a developer experience layer that made complex media capabilities accessible. We’re incredibly excited for their team to join Cloudflare as we help developers define the future of user interaction for real-time applications as one team.</p>
    <div>
      <h2>Interactive applications shouldn't require WebRTC expertise </h2>
      <a href="#interactive-applications-shouldnt-require-webrtc-expertise">
        
      </a>
    </div>
    <p>For many developers, what starts as "let's add video chat" can quickly escalate into weeks of technical deep dives into WebSockets and WebRTC. While we are big believers in the <a href="https://blog.cloudflare.com/tag/webrtc/"><u>potential of WebRTC</u></a>, we also know that it comes with real challenges when building for the first time. Debugging WebRTC sessions can require developers to learn about esoteric new concepts such as navigating <a href="https://webrtcforthecurious.com/docs/03-connecting/#ice"><u>ICE candidate failures</u></a>, <a href="https://webrtcforthecurious.com/docs/03-connecting/#turn"><u>TURN server configurations</u></a>, and <a href="https://webrtcforthecurious.com/docs/03-connecting/#turn"><u>SDP negotiation issues</u></a>.</p><p>The challenges of building a WebRTC app for the first time don’t stop there. Device management adds another layer of complexity. Inconsistent camera and microphone APIs across browsers and mobile platforms introduce unexpected behaviors in production. Chrome handles resolution switching one way, Safari another, and Android WebViews break in uniquely frustrating ways. We regularly see applications that function perfectly in testing environments fail mysteriously when deployed to certain devices or browsers.</p><p>Systems that work flawlessly with 5 test users collapse under the load of 50 real-world participants. Bandwidth adaptation falters, connection management becomes unwieldy, and maintaining consistent quality across diverse network conditions proves nearly impossible without specialized expertise. </p><p>What starts as a straightforward feature becomes a multi-month project requiring low-level engineering to solve problems that aren’t core to your business.</p><p>We realized that we needed to extend our products to client devices to help solve these problems.</p>
    <div>
      <h2>RealtimeKit SDKs for Kotlin, React Native, Swift, JavaScript, Flutter</h2>
      <a href="#realtimekit-sdks-for-kotlin-react-native-swift-javascript-flutter">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/20EM65tMDpRznldLcfRYSo/90db0a5576bcecf0eaa3d28f7feaa65e/Final.png" />
          </figure><p>RealtimeKit is our toolkit for building real-time applications without common WebRTC headaches. The core of RealtimeKit is a set of cross-platform SDKs that handle all the low-level complexities, from session establishment and media permissions to NAT traversal and connection management. Instead of spending weeks implementing and debugging these foundations, you can focus entirely on creating unique experiences for your users.</p><p>Recording capabilities come built-in, eliminating one of the most commonly requested yet difficult-to-implement features in real-time applications. Whether you need to capture meetings for compliance, save virtual classroom sessions for students who couldn't attend live, or enable content creators to archive their streams, RealtimeKit handles the entire media pipeline. No more wrestling with MediaRecorder APIs or building custom recording infrastructure — it just works, scaling alongside your user base.</p><p>We've also integrated voice AI capabilities from providers like ElevenLabs directly into the platform. Adding AI participants to conversations becomes as simple as a function call, opening up entirely new interaction models. These AI voices operate with the same low latency as human participants — tens of milliseconds across our global network — creating truly synchronous experiences where AI and humans converse naturally. Combined with RealtimeKit's ability to scale to millions of concurrent participants, this enables entirely new categories of applications that weren't feasible before.</p>
    <div>
      <h2>The Developer Experience</h2>
      <a href="#the-developer-experience">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7GAxgCMn36QUgxSlF7m0xL/34574d1d1ba3da305e46b41bc455e769/2.png" />
          </figure><p>RealtimeKit focuses on what developers want to accomplish, rather than how the underlying protocols work. Adding participants or turning on recording are just an API call away. SDKs handle device enumeration, permission requests, and UI rendering across platforms. Behind the scenes, we’re solving the thorny problems of media orchestration and state management that can be challenging to debug.</p><p>We’ve been quietly working towards launching the Cloudflare RealtimeKit for years. From the very beginning, our global network has been optimized for minimizing latency between our network and end users, which is where the majority of network disruptions are introduced.</p><p>We developed a <a href="https://blog.cloudflare.com/cloudflare-calls-anycast-webrtc/"><u>Selective Forwarding Unit (SFU)</u></a> that intelligently routes media streams between participants, dynamically adjusting quality based on network conditions. Our <a href="https://blog.cloudflare.com/lt-lt/webrtc-turn-using-anycast/"><u>TURN infrastructure</u></a> solves the <a href="https://webrtchacks.com/an-intro-to-webrtcs-natfirewall-problem/"><u>complex problem of NAT traversal</u></a>, allowing connections to be established reliably behind firewalls. With Workers AI, we brought inference capabilities to the edge, minimizing latency for AI-powered interactions. Workers and Durable Objects provided the WebSockets coordination layer necessary for maintaining consistent state across participants.</p>
    <div>
      <h2>SFU and TURN services are now Generally Available</h2>
      <a href="#sfu-and-turn-services-are-now-generally-available">
        
      </a>
    </div>
    <p>We’re also announcing the General Availability of our SFU and TURN services for WebRTC developers that need more control and a low-level integration with the Cloudflare network.</p><p>SFU now supports simulcast, a very common feature request. Simulcast allows developers to select media streams from multiple options, similar to selecting the quality level of an online video, but for WebRTC. Users with different network qualities are now able to receive different levels of quality, either automatically defined by the SFU or manually selected.</p><p>Our TURN service now offers advanced analytics with insight into regional, country, and city level usage metrics. Together with <a href="https://developers.cloudflare.com/calls/turn/replacing-existing/#tag-users-with-custom-identifiers"><u>Custom Identifiers</u></a>, and revocable tokens, Cloudflare’s TURN service offers an in-depth view into usage and helps avoid abuse.</p><p>Our SFU and TURN products continue to be one of the most affordable ways to build WebRTC apps at scale, at 5 cents per GB after 1,000 GB of free usage each month.</p>
    <div>
      <h2>Partnering with Hugging Face to make realtime AI communication seamless</h2>
      <a href="#partnering-with-hugging-face-to-make-realtime-ai-communication-seamless">
        
      </a>
    </div>
    <p><a href="https://fastrtc.org/"><u>FastRTC</u></a> is a lightweight Python library from Hugging Face that makes it easy to stream real-time audio and video into and out of AI models using WebRTC. TURN servers are a critical part of WebRTC infrastructure and ensure that media streams can reliably connect across firewalls and NATs. For users of FastRTC, setting up a globally distributed TURN server can be complex and expensive.  </p><p>Through our new partnership with Hugging Face, FastRTC users now have free access to Cloudflare’s TURN Server product, giving them reliable connectivity out of the box. Developers get 10 GB of TURN bandwidth each month using just a Hugging Face access token — no setup, no credit card, no servers to manage. As projects grow, they can easily switch to a Cloudflare account for more capacity and a larger free tier.</p><p>This integration allows AI developers to focus on building voice interfaces, video pipelines, and multimodal apps without worrying about NAT traversal or network reliability. FastRTC simplifies the code, and Cloudflare ensures it works everywhere. See these <a href="https://huggingface.co/fastrtc"><u>demos</u></a> to get started.</p>
    <div>
      <h2>Ship AI-powered realtime apps in days, not weeks</h2>
      <a href="#ship-ai-powered-realtime-apps-in-days-not-weeks">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1b4lK5Qvq1ImlBa3lFEH7l/bf212f51a1f178285747e759c1365ec9/3.png" />
          </figure><p>With RealtimeKit, developers can now implement complex real-time experiences in hours. The SDKs abstract away the most time-consuming aspects of WebRTC development while providing APIs tailored to common implementation patterns. Here are a few of the possibilities: </p><ul><li><p><b>Video conferencing</b>: Add multi-participant video calls to your application with just a few lines of code. RealtimeKit handles the connection management, bandwidth adaptation, and device permissions that typically consume weeks of development time.</p></li><li><p><b>Live streaming</b>: Build interactive broadcasts where hosts can stream to thousands of viewers while selectively bringing participants on-screen. The SFU automatically optimizes media routing based on participant roles and network conditions.</p></li><li><p><b>Real-time synchronization</b>: Implement watch parties or collaborative viewing experiences where content playback stays synchronized across all participants. The timing API handles the complex delay calculations and adjustments traditionally required.</p></li><li><p><b>Voice AI integrations</b>: Add transcription and AI voice participants without building custom media pipelines. RealtimeKit's media processing APIs integrate with your existing authentication and storage systems rather than requiring separate infrastructure.</p></li></ul><p>When we’ve seen our early testers use the RealtimeKit, it doesn't just accelerate their existing projects, it fundamentally changes which projects become viable. </p>
    <div>
      <h2>Get started with RealtimeKit</h2>
      <a href="#get-started-with-realtimekit">
        
      </a>
    </div>
    <p>Starting today, you'll notice a new <a href="https://dash.cloudflare.com/?to=/:account/realtime"><u>Realtime section in your Cloudflare Dashboard</u></a>. This section includes our TURN and SFU products alongside our latest product, RealtimeKit. </p><p>RealtimeKit is currently in a closed beta ready for select customers to start kicking the tires. There is currently no cost to test it out during the beta. Request early access <a href="https://www.cloudflare.com/cloudflare-realtimekit-signup/"><u>here</u></a> or via the link in your <a href="https://dash.cloudflare.com/?to=/:account/realtime"><u>Cloudflare dashboard</u></a>. We can’t wait to see what you build. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/53RI7RZhs5Y0zHMHKg6fLh/e155081853355a7714e052ff23db6269/4.png" />
          </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[WebRTC]]></category>
            <category><![CDATA[Cloudflare Calls]]></category>
            <category><![CDATA[Real-time]]></category>
            <category><![CDATA[TURN Server]]></category>
            <guid isPermaLink="false">opC8hYtVRkyCEv7Yze4R0</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
            <dc:creator>Will Allen</dc:creator>
            <dc:creator>Abhishek Kankani</dc:creator>
        </item>
        <item>
            <title><![CDATA[What’s new with Cloudflare Media: updates for Calls, Stream, and Images]]></title>
            <link>https://blog.cloudflare.com/whats-next-for-cloudflare-media/</link>
            <pubDate>Thu, 04 Apr 2024 13:00:40 GMT</pubDate>
            <description><![CDATA[ With Cloudflare Calls in open beta, you can build real-time, serverless video and audio applications. Cloudflare Stream lets your viewers instantly clip from ongoing streams ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Our customers use Cloudflare Calls, Stream, and Images to build live, interactive, and real-time experiences for their users. We want to reduce friction by making it easier to get data into our products. This also means providing transparent pricing, so customers can be confident that costs make economic sense for their business, especially as they scale.</p><p>Today, we’re introducing four new improvements to help you build media applications with Cloudflare:</p><ul><li><p>Cloudflare Calls is in open beta with transparent pricing</p></li><li><p>Cloudflare Stream has a Live Clipping API to let your viewers instantly clip from ongoing streams</p></li><li><p>Cloudflare Images has a pre-built upload widget that you can embed in your application to accept uploads from your users</p></li><li><p>Cloudflare Images lets you crop and resize images of people at scale with automatic face cropping</p></li></ul>
    <div>
      <h3>Build real-time video and audio applications with Cloudflare Calls</h3>
      <a href="#build-real-time-video-and-audio-applications-with-cloudflare-calls">
        
      </a>
    </div>
    <p>Cloudflare Calls is now in open beta, and you can activate it from your dashboard. Your usage will be free until May 15, 2024. Starting May 15, 2024, customers with a Calls subscription will receive the first terabyte each month for free, with any usage beyond that charged at $0.05 per real-time gigabyte. Additionally, there are no charges for inbound traffic to Cloudflare.</p><p>To get started, read the <a href="https://developers.cloudflare.com/calls/">developer documentation for Cloudflare Calls</a>.</p>
    <div>
      <h3>Live Instant Clipping: create clips from live streams and recordings</h3>
      <a href="#live-instant-clipping-create-clips-from-live-streams-and-recordings">
        
      </a>
    </div>
    <p>Live broadcasts often include short bursts of highly engaging content within a longer stream. Creators and viewers alike enjoy being able to make a “clip” of these moments to share across multiple channels. Being able to generate that clip rapidly enables our customers to offer instant replays, showcase key pieces of recordings, and build audiences on social media in real-time.</p><p>Today, <a href="https://www.cloudflare.com/products/cloudflare-stream/">Cloudflare Stream</a> is launching Live Instant Clipping in open beta for all customers. With the new Live Clipping API, you can let your viewers instantly clip and share moments from an ongoing stream - without re-encoding the video.</p><p>When planning this feature, we considered a typical user flow for generating clips from live events. Consider users watching a stream of a video game: something wild happens and users want to save and share a clip of it to social media. What will they do?</p><p>First, they’ll need to be able to review the preceding few minutes of the broadcast, so they know what to clip. Next, they need to select a start time and clip duration or end time, possibly as a visualization on a timeline or by scrubbing the video player. Finally, the clip must be available quickly in a way that can be replayed or shared across multiple platforms, even after the original broadcast has ended.</p><p>That ideal user flow implies some heavy lifting in the background. We now offer a manifest to preview recent live content in a rolling window, and we provide the timing information in that response to determine the start and end times of the requested clip relative to the whole broadcast. Finally, on request, we will generate on-the-fly that clip as a standalone video file for easy sharing as well as an HLS manifest for embedding into players.</p><p>Live Instant Clipping is available in beta to all customers starting today! Live clips are free to make; they do not count toward storage quotas, and playback is billed just like minutes of video delivered. To get started, check out the <a href="https://developers.cloudflare.com/stream/stream-live/live-instant-clipping/">Live Clipping API in developer documentation</a>.</p>
    <div>
      <h3>Integrate Cloudflare Images into your application with only a few lines of code</h3>
      <a href="#integrate-cloudflare-images-into-your-application-with-only-a-few-lines-of-code">
        
      </a>
    </div>
    <p>Building applications with user-uploaded images is even easier with the upload widget, a pre-built, interactive UI that lets users upload images directly into your Cloudflare Images account.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1MVN5ibd1UGnokaEm7f1Vq/8efedb285ec93d52867d78ca63cb454b/image3-9.png" />
            
            </figure><p>Many developers use <a href="https://www.cloudflare.com/developer-platform/cloudflare-images/">Cloudflare Images</a> as an end-to-end image management solution to support applications that center around user-generated content, from AI photo editors to social media platforms. Our APIs connect the frontend experience – where users upload their images – to the storage, optimization, and delivery operations in the backend.</p><p>But building an application can take time. Our team saw a huge opportunity to take away as much extra work as possible, and we wanted to provide off-the-shelf integration to speed up the development process.</p><p>With the upload widget, you can seamlessly integrate Cloudflare Images into your application within minutes. The widget can be integrated in two ways: by embedding a script into a static HTML page or by installing a package that works with your favorite framework. We provide a ready-made Worker template that you can deploy directly to your account to connect your frontend application with Cloudflare Images and authorize users to upload through the widget.</p><p>To try out the upload widget, <a href="https://forms.gle/vBu47y3638k8fkGF8">sign up for our closed beta</a>.</p>
    <div>
      <h3>Optimize images of people with automatic face cropping for Cloudflare Images</h3>
      <a href="#optimize-images-of-people-with-automatic-face-cropping-for-cloudflare-images">
        
      </a>
    </div>
    <p>Cloudflare Images lets you dynamically manipulate images in different aspect ratios and dimensions for various use cases. With face cropping for Cloudflare Images, you can now crop and resize images of people’s faces at scale. For example, if you’re building a social media application, you can apply automatic face cropping to generate profile picture thumbnails from user-uploaded images.</p><p>Our existing gravity parameter uses saliency detection to set the focal point of an image based on the most visually interesting pixels, which determines how the image will be cropped. We expanded this feature by using a machine learning model called RetinaFace, which classifies images that have human faces. We’re also introducing a new zoom parameter that you can combine with face cropping to specify how closely an image should be cropped toward the face.</p><p>To apply face cropping to your image optimization, <a href="https://forms.gle/2bPbuijRoqGi6Qn36">sign up for our closed beta</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6JFNk182dDZHu0sxIySMC5/d3821e2f911b7e31bb411addcc10bdb6/image2-10.png" />
            
            </figure><p><i>Photo by</i> <a href="https://unsplash.com/@eyeforebony?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash"><i>Eye for Ebony</i></a> <i>on</i> <a href="https://unsplash.com/photos/photo-of-woman-wearing-purple-lipstick-and-black-crew-neck-shirt-vYpbBtkDhNE?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash"><i>Unsplash</i></a></p>
            <pre><code>https://example.com/cdn-cgi/image/fit=crop,width=500,height=500,gravity=face,zoom=0.6/https://example.com/images/picture.jpg</code></pre>
            
    <div>
      <h3>Meet the Media team over Discord</h3>
      <a href="#meet-the-media-team-over-discord">
        
      </a>
    </div>
    <p>As we’re working to build the next set of media tools, we’d love to hear what you’re building for your users. Come <a href="https://discord.gg/cloudflaredev">say hi to us on Discord</a>. You can also learn more by visiting our developer documentation for <a href="https://developers.cloudflare.com/calls/">Calls</a>, <a href="https://developers.cloudflare.com/stream/">Stream</a>, and <a href="https://developers.cloudflare.com/images/">Images</a>.</p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Live Streaming]]></category>
            <category><![CDATA[Cloudflare Images]]></category>
            <category><![CDATA[Image Optimization]]></category>
            <category><![CDATA[Image Resizing]]></category>
            <category><![CDATA[Image Storage]]></category>
            <category><![CDATA[Cloudflare Calls]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">4fOMOrJU6Bg9JNkRAThc7c</guid>
            <dc:creator>Deanna Lam</dc:creator>
            <dc:creator>Taylor Smith</dc:creator>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Lights, Camera, Action! Business and Pro customers get bundled streaming video]]></title>
            <link>https://blog.cloudflare.com/stream-for-pro-biz-customers/</link>
            <pubDate>Fri, 30 Sep 2022 13:00:00 GMT</pubDate>
            <description><![CDATA[ If you have a Business or Pro subscription, soon you will receive a free allocation of Cloudflare Stream. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Beginning December 1, 2022, if you have a Business or Pro subscription, you will receive a complimentary allocation of Cloudflare Stream. Here’s what this means:</p><ul><li><p>All Cloudflare customers with a Biz or Pro domain will be able to store up to 100 minutes of video content and deliver up to 10,000 minutes of video content each month at <i>no additional cost</i></p></li><li><p>If you need additional storage or delivery beyond the complimentary allocation, you will be able to upgrade to a paid Stream subscription from the <a href="https://dash.cloudflare.com/?to=/:account/stream">Stream Dashboard</a>.</p></li></ul><p>Cloudflare Stream simplifies storage, encoding and playback of videos. You can use the free allocation of Cloudflare Stream for various use cases, such as background/hero videos, e-commerce product videos, how-to guides and customer testimonials.</p>
    <div>
      <h3>Upload videos with no code</h3>
      <a href="#upload-videos-with-no-code">
        
      </a>
    </div>
    <p>To upload your first video Stream, simply visit the Stream Dashboard and drag-and-drop the video file:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2Ngq1qsTkBRCPRk5tCFFUa/da505b7d31a84659210258ddc1314d86/image1-83.png" />
            
            </figure><p>Once you upload a video, Stream will store and encode your video. Stream automatically optimizes your video uploads by creating multiple versions of it at different quality levels. This happens behind-the-scenes and requires no extra effort from your side. The Stream Player automatically selects the optimal quality level based on your website visitor’s Internet connection using a technology called <i>adaptive-bit rate encoding</i>.</p><p>Your uploaded video will appear on the Dashboard:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ysjmverw5Lxb1oFl5cuKt/e1b70a15e953ac69d6a60e697742a679/image3-51.png" />
            
            </figure><p>Click on the video in the list of videos to watch a preview, change settings or to grab the embed code:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4yhaNOupXKHQ3xFI786f4L/740f1865050219a1e6a4eae571c31447/image6-14.png" />
            
            </figure>
    <div>
      <h3>Built-in Stream Player</h3>
      <a href="#built-in-stream-player">
        
      </a>
    </div>
    <p>Stream provides an embed code that can be used to place your uploaded videos onto your website. The embed code can be found under the <i>Embed</i> tab:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6COvthPh21mNvKIbXIJJCP/12b4e673d9cdc34420e7ebb90b2b419f/image4-29.png" />
            
            </figure><p>To include the video on your website, simply copy-and-paste the embed code.</p><p>You’ll notice in the screenshot above that the Embed tab lets you customize the viewing experience. It supports the following optional properties:</p><ul><li><p><b><b><b>Poster:</b></b></b> The “poster image” is what appears on the video player before the user has started playing the video. By default, the poster image is set to the first frame in the video. However, you can change it by specifying another point in time <i>or</i> by specifying a URL to an image.</p></li><li><p><b><b><b>Start Time:</b></b></b> Let’s say you have a 10-minute instructional video and your customer writes in with a question that is answered in that video at the 8-minute mark. You can use the <i>Start Time</i> property to have the video playback begin at the 8-minute mark, so your customer with a specific question does not need to watch 8 minutes of the video wondering “when will it answer my question?”. Instead, you can share a link with the customer that begins the video playback at the 8-minute mark.</p></li><li><p><b><b><b>Default Text Track:</b></b></b> You can upload caption files for multiple languages for a given video. By default, captions are turned off. But if you want the captions to <i>always</i> render when the video plays, you can choose the default language from the Default Text Track dropdown.</p></li><li><p><b><b><b>Primary Color:</b></b></b> You can choose your brand’s primary color and have it applied to various elements within the player, including the play button and the seek bar. Here is an example of the Stream Player with the Primary Color property configured to the Cloudflare orange:</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4ygIXB54RyohFgVt1n6xKd/85e83140939afe89ef78087cec5b4ad0/image2-67.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3Ni8EfEhC56phN7kpzHxE6/40091b5f5a07f551a6967fa3223b69c6/image5-26.png" />
            
            </figure>
    <div>
      <h3>Much, much more…</h3>
      <a href="#much-much-more">
        
      </a>
    </div>
    <p>We live in a video-first world. Many Cloudflare customers already upload their videos to free video hosting services for marketing purposes. However, when you embed a video on your website that is hosted on a free video sharing service, your users often have to engage with unwelcomed ads and pixel trackers. Our hope is that by offering a free tier of Stream to Biz and Pro customers, you can use video to show off your products in a way that respects your users’ privacy and reflects your brand identity.</p><p>In addition to the features described in this announcement, Cloudflare Stream includes many more features including:</p><ul><li><p>Dynamic Thumbnail Generation</p></li><li><p>Multi-language Captions</p></li><li><p>Live Streaming</p></li><li><p>Analytics</p></li></ul><p>For a comprehensive list of features and how to use them, check out the <a href="https://developers.cloudflare.com/stream">Cloudflare Stream Docs</a>.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Video]]></category>
            <category><![CDATA[eCommerce]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">3VFf0XrUuH4TmLskNymhpa</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Build real-time video and audio apps on the world’s most interconnected network]]></title>
            <link>https://blog.cloudflare.com/announcing-cloudflare-calls/</link>
            <pubDate>Tue, 27 Sep 2022 13:00:00 GMT</pubDate>
            <description><![CDATA[ We are announcing Cloudflare Calls, a new product that lets developers build real-time audio and video apps ]]></description>
            <content:encoded><![CDATA[ <p></p><p>In the last two years, there has been a rapid rise in real-time apps that help groups of people get together virtually with near-zero latency. User expectations have also increased: your users expect real-time video and audio features to work flawlessly. We found that developers building real-time apps want to spend less time building and maintaining low-level infrastructure. Developers also told us they want to spend more time building features that truly make their idea special.</p><p>So today, we are announcing a new product that lets developers build real-time audio/video apps. Cloudflare Calls exposes a set of APIs that allows you to build things like:</p><ul><li><p>A video conferencing app with a custom UI</p></li><li><p>An interactive conversation where the moderators can invite select audience members “on stage” as speakers</p></li><li><p>A privacy-first group workout app where only the instructor can view all the participants while the participants can only view the instructor</p></li><li><p>Remote 'fireside chats' where one or multiple people can have a video call with an audience of 10,000+ people in real time (&lt;100ms delay)</p></li></ul><p>The protocol that makes all this possible is WebRTC. And Cloudflare Calls is the product that abstracts away the complexity by turning the Cloudflare network into a “super peer,” helping you build reliable and secure real-time experiences.</p>
    <div>
      <h3>What is WebRTC?</h3>
      <a href="#what-is-webrtc">
        
      </a>
    </div>
    <p>WebRTC is a peer-to-peer protocol that enables two or more users’ devices to talk to each other <i>directly</i> and without leaving the browser. In a native implementation, peer-to-peer typically works well for 1:1 calls with only two participants. But as you add additional participants, it is common for participants to experience reliability issues, including video freezes and participants getting out of sync. Why? Because as the number of participants increases, the coordination overhead between users’ devices also increases. Each participant needs to send media to each other participant, increasing the data consumption from each computer exponentially.</p><p>A selective forwarding unit (SFU) solves this problem. An SFU is a system that connects users with each other in real-time apps by intelligently managing and routing video and audio data between the participants. Apps that use an SFU reduce the data capacity required from each user because each user doesn’t have to send data to every other user. SFUs are required parts of a real-time application when the applications need to determine who is currently speaking or when they want to send appropriate resolution video when WebRTC simulcast is used.</p>
    <div>
      <h3>Beyond SFUs</h3>
      <a href="#beyond-sfus">
        
      </a>
    </div>
    <p>The centralized nature of an SFU is also its weakness. A centralized WebRTC server needs a region, which means that it will be slow in most parts of the world for most users while being fast for only a few select regions.</p><p>Typically, SFUs are built on public clouds. They consume a lot of bandwidth by both receiving and sending high resolution media to many devices. And they come with significant devops overhead requiring your team to manually configure regions and scalability.</p><p>We realized that merely offering an SFU-as-a-service wouldn’t solve the problem of cost and bandwidth efficiency.</p>
    <div>
      <h3>Biggest WebRTC server in the world</h3>
      <a href="#biggest-webrtc-server-in-the-world">
        
      </a>
    </div>
    <p>When you are on a five-person video call powered by a classic WebRTC implementation, each person’s device talks directly with each other. In WebRTC parlance, each of the five participants is called a <i>peer.</i> And the reliability of the five-person call will only be as good as the reliability of the person (or peer) with the weakest Internet connection.</p><p>We built Calls with a simple premise: <i>“What if Cloudflare could act as a WebRTC peer?”.</i>  Calls is a “super peer” or a “giant server that spans the whole world” allows applications to be built beyond the limitations of the lowest common denominator peer or a centralized SFU. Developers can focus on the strength of their app instead of trying to compensate for the weaknesses of the weakest peer in a p2p topology.</p><p>Calls does not use the traditional SFU topology where every participant connects to a centralized server in a single location. Instead, each participant connects to their local Cloudflare data center. When another participant wants to retrieve that media, the datacenter that homes that original media stream is found and the tracks are forwarded between datacenters automatically. If two participants are physically close their media does not travel around the world to a centralized region, instead they use the same datacenter, greatly reducing latency and improving reliability.</p><p>Calls is a configurable, global, regionless WebRTC server that is the size of Cloudflare's ever-growing network. The WebRTC protocol enables peers to send and receive <i>media tracks.</i> When you are on a video call, your computer is typically sending <i>two</i> tracks: one that contains the audio of you speaking and another that contains the video stream from your camera. Calls implements the WebRTC <a href="https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection">RTCPeerConnection</a> API across the Cloudflare Network where users can push media tracks. Calls also exposes an API where other media tracks can be requested within the same Peer Connection context.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/55LIoL4VrFNTx2wTimkShk/473c3054a27deac146389dc237c45a08/image2-41.png" />
            
            </figure><p>Cloudflare Calls will be a good solution if you operate your own WebRTC server such as Janus or MediaSoup. Cloudflare Calls can also replace existing deployments of Janus or MediaSoup, especially in cases where you have clients connecting globally to a single, centralized deployment.</p>
    <div>
      <h2>Region: Earth</h2>
      <a href="#region-earth">
        
      </a>
    </div>
    <p>Building and maintaining your own real-time infrastructure comes with unique architecture and scaling challenges. It requires you to answer and constantly revise your answers to thorny questions such as <i>“which regions do we support?”</i>, “<i>how many users do we need to justify spinning up more infrastructure in yet another cloud region?</i>”, <i>“how do we scale for unplanned spikes in usage?”</i> and <i>“how do we not lose money during low-usage hours of our infrastructure?”</i> when you run your own WebRTC server infrastructure.</p><p>Cloudflare Calls eliminates the need to answer these questions. Calls uses <a href="https://www.cloudflare.com/learning/cdn/glossary/anycast-network/">anycast</a> for every connection, so every packet is always routed to the closest Cloudflare location. It is global by nature: your users are automatically served from a location close to them. Calls scales with your use and your team doesn’t have to build its own auto-scaling logic.</p><p>Calls runs on every Cloudflare location and every single Cloudflare server. Because the Cloudflare network is within 10 milliseconds of 90% of the world’s population, it does not add any noticeable latency.</p>
    <div>
      <h2>Answer “where’s the problem?”, only faster</h2>
      <a href="#answer-wheres-the-problem-only-faster">
        
      </a>
    </div>
    <p>When we talk to customers with existing WebRTC workloads, there is one consistent theme: customers wish it was easier to troubleshoot issues. When a group of people are talking over a video call, the stakes are much higher when users experience issues. When a web page fails to load, it is common for users to simply retry after a few minutes. When a video call is disruptive, it is often the end of the call.</p><p>Cloudflare Calls’ focus on observability will help customers get to the bottom of the issues faster. Because Calls is built on Cloudflare’s infrastructure, we have end-to-end visibility from all layers of the OSI model.</p><p>Calls provides a server side view of the <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_Statistics_API">WebRTC Statistics API</a>, so you can drill into issues each Peer Connection and the flow of media within without depending only on data sent from clients. We chose this because the Statistics API is a standardized place developers are used to getting information about their experience. It is the same API available in browsers, and you might already be using it today to gain insight into the performance of your WebRTC connections.</p>
    <div>
      <h3>Privacy and security at the core</h3>
      <a href="#privacy-and-security-at-the-core">
        
      </a>
    </div>
    <p>Calls eliminates the need for participants to share information such as their IP address with each other. Let’s say you are building an app that connects therapists and patients via video calls. With a traditional WebRTC implementation, both the patient and therapist’s devices would talk directly with each other, leading to exposure of potentially sensitive data such as the IP address. Exposure of information such as the IP address can leave your users vulnerable to denial-of-service attacks.</p><p>When using Calls, you are still using WebRTC, but the individual participants are connecting to the Cloudflare network. If four people are on a video call powered by Cloudflare Calls, each of the four participants' devices will be talking only with the Cloudflare network. To your end users, the experience will feel just like a peer-to-peer call, only with added security and privacy upside.</p><p>Finally, all video and audio traffic that passes through Cloudflare Calls is encrypted by default. Calls leverages existing Cloudflare products including Argo to route the video and audio content in a secure and efficient manner. Calls API enables granular controls that cannot be implemented with vanilla WebRTC alone. When you build using Calls, you are only limited by your imagination; not the technology.</p>
    <div>
      <h3>What’s next</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>We’re releasing Cloudflare Calls in closed beta today. To try out Cloudflare Calls, <a href="https://www.cloudflare.com/cloudflare-calls-signup-page">request an invitation</a> and check your inbox in coming weeks.Calls will be free during the beta period. We're looking to work with early customers who want to take Calls from beta to generally available with us. If you are building a real-time video app today, having challenges scaling traditional WebRTC infrastructure, or just have a great idea you want to explore, <a href="https://www.cloudflare.com/cloudflare-calls-signup-page">leave a comment</a> when you are requesting an invitation, and we’ll reach out.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[WebRTC]]></category>
            <category><![CDATA[Video]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">4PEbQjLrYQwj2Hj7O4b3ah</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
            <dc:creator>Renan Dincer</dc:creator>
        </item>
        <item>
            <title><![CDATA[Closed Caption support coming to Stream Live]]></title>
            <link>https://blog.cloudflare.com/stream-live-captions/</link>
            <pubDate>Fri, 13 May 2022 12:59:15 GMT</pubDate>
            <description><![CDATA[ Soon, Stream will auto-detect embedded captions and include it in the live stream delivered to your viewers ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Building inclusive technology is core to the Cloudflare mission. Cloudflare Stream has supported captions for on-demand videos for several years. Soon, Stream will auto-detect embedded captions and include it in the live stream delivered to your viewers.</p><p>Thousands of Cloudflare customers use the Stream product to build video functionality into their apps. With live caption support, Stream customers can better serve their users with a more comprehensive viewing experience.</p>
    <div>
      <h3>Enabling Closed Captions in Stream Live</h3>
      <a href="#enabling-closed-captions-in-stream-live">
        
      </a>
    </div>
    <p>Stream Live scans for CEA-608 and CEA-708 captions in incoming live streams ingested via SRT and RTMPS.  Assuming the live streams you are pushing to Cloudflare Stream contain captions, you don’t have to do anything further: the captions will simply get included in the manifest file.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/oV2EUCKfVZe2OgGxO0o3s/d4f202b76449027e7ec774e3f327620f/image3-23.png" />
            
            </figure><p>If you are using the Stream Player, these captions will be rendered by the Stream Player. If you are using your own player, you simply have to configure your player to display captions.  </p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3qguZaQmzwoCcAbXp5llE9/9788316cc5a72b0df6931422e7b0ddeb/image2-30.png" />
            
            </figure><p>Currently, Stream Live supports captions for a single language during the live event. While the support for captions is limited to one language <i>during</i> the live stream, you can upload captions for multiple languages once the event completes and the live event becomes an on-demand video.</p>
    <div>
      <h3>What is CEA-608 and CEA-708?</h3>
      <a href="#what-is-cea-608-and-cea-708">
        
      </a>
    </div>
    <p>When captions were first introduced in 1973, they were <i>open</i> captions. This means the captions were literally overlaid on top of the picture in the video and therefore, could not be turned off. In 1982, we saw the introduction of <i>closed</i> captions during live television. Captions were no longer imprinted on the video and were instead passed via a separate feed and rendered on the video by the television set.</p><p>CEA-608 (also known as Line 21) and CEA-708 are well-established standards used to transmit captions. CEA-708 is a modern iteration of CEA-608, offering support for nearly every language and text positioning–something not supported with CEA-608.</p>
    <div>
      <h3>Availability</h3>
      <a href="#availability">
        
      </a>
    </div>
    <p>Live caption support will be available in closed beta next month. To request access, <a href="https://www.cloudflare.com/closed-caption-live-stream-private-beta/">sign up for the closed beta</a>.</p><p>Including captions in any video stream is critical to making your content more accessible. For example, the majority of live events are watched on mute and thereby, increasing the value of captions. While Stream Live does not generate live captions yet, we plan to build support for automatic live captions in the future.</p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Video]]></category>
            <guid isPermaLink="false">10MfzmJyCzaEh070t4CqBU</guid>
            <dc:creator>Mickie Betz</dc:creator>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Bring your own ingest domain to Stream Live]]></title>
            <link>https://blog.cloudflare.com/bring-your-own-ingest-domain-to-stream-live/</link>
            <pubDate>Fri, 13 May 2022 12:59:10 GMT</pubDate>
            <description><![CDATA[ Starting today, every Stream account can configure its own domain in the Stream dashboard. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>The last two years have given rise to hundreds of live streaming platforms. Most live streaming platforms enable their creators to go live by providing them with a server and an RTMP/SRT key that they can configure in their broadcasting app.</p><p>Until today, even if your live streaming platform was called <i>live-yoga-classes.com</i>, your users would need to push the RTMPS feed to <i>live.cloudflare.com</i>. Starting today, every Stream account can configure its own domain in the Stream dashboard. And your creators can broadcast to a domain such as <i>push.live-yoga-classes.com</i>.</p><p>This feature is available to all Stream accounts, including self-serve customers at no additional cost. Every Cloudflare account with a Stream subscription can add up to five ingest domains.</p>
    <div>
      <h3>Secure CNAMEing for live video ingestion</h3>
      <a href="#secure-cnameing-for-live-video-ingestion">
        
      </a>
    </div>
    <p>Cloudflare Stream only supports encrypted video ingestion using RTMPS and SRT protocols. These are secure protocols and, similar to HTTPS, ensure encryption between the broadcaster and Cloudflare servers. Unlike non-secure protocols like RTMP, secure RTMP (or RTMPS) protects your users from monster-in-the-middle attacks.</p><p>In an unsecure world, you could simply CNAME a domain to another domain regardless of whether you own the domain you are sending traffic to. Because Stream Live intentionally does not support insecure live streams, you cannot simply CNAME your domain to <code>live.cloudflare.com</code>. So we leveraged other Cloudflare products such as Spectrum to natively support custom-branded domains in the Stream Live product <i>without</i> making the live streams less private for your broadcasters.</p>
    <div>
      <h3>Configuring Custom Domain for Live Ingestion</h3>
      <a href="#configuring-custom-domain-for-live-ingestion">
        
      </a>
    </div>
    <p>To begin configuring your custom domain, add the domain to your Cloudflare account as a regular zone.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7rYWhOUOIX5TOW7OSfx7VX/2446ba42647f82c9fef5e2cd3b385432/image5-11.png" />
            
            </figure><p><i>Add a zone to your Cloudflare account</i></p><p>Next, CNAME the domain to live.cloudflare.com.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/d2DA80TGOJLsbHGkmk2om/b6e00aa44a07448115c4655bb0d644d0/image4-18.png" />
            
            </figure><p><i>CNAME the zone to live.cloudflare.com</i></p><p>Assuming you have a <a href="https://support.cloudflare.com/hc/en-us/articles/360017801091#1Hq8KLx5TCtkJhzJVMlEPL">Stream subscription</a>, visit the Inputs page and click on the Settings icon:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3SEqMpZ6iYrxwPBOjHpH9D/705b52a5961852de2767ffeed3575e4e/image2-29.png" />
            
            </figure><p><i>Click on Settings icon on Live Inputs page</i></p><p>Next, add the domain you configured in the previous step as a Live Ingest Domain:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3OlFEll8C4YiPHYgB7VqW/89250dd8918d1fe59775847022600c21/image3-22.png" />
            
            </figure><p><i>Add Custom Ingest Domain</i></p><p>If your domain is successfully added, you will see a confirmation:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/37ecPeYiNM7Qn8hP4Du7fL/d742b18b720106399fb7a10b824a9c0f/image1-37.png" />
            
            </figure><p><i>Confirmation of domain being added as an ingest domain</i></p><p>Once you’ve added your ingest domain, test it by changing your existing configuration in your broadcasting software to your ingest domain. You can read the complete docs and limitations in the <a href="https://developers.cloudflare.com/stream/stream-live/custom-domains/">Stream Live developer docs.</a></p>
    <div>
      <h3>What’s Next</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>Besides the branding upside —  you don’t have to instruct your users to configure a domain such as live.cloudflare.com — custom domains help you avoid vendor lock-in and seamless migration. For example, if you have an existing live video pipeline that you are considering moving to Stream Live, this makes the migration one step easier because you no longer have to ask your users to change any settings in their broadcasting app.</p><p>A natural next step is to support custom keys. Currently, your users must still use keys that are provided by Stream Live. Soon, you will be able to bring your own keys. Custom domains combined with custom keys will help you migrate to Stream Live with zero breaking changes for your end users.</p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Connectivity Cloud]]></category>
            <guid isPermaLink="false">5D5pUI0vc0G03a87rMm8xg</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
            <dc:creator>Ben Krebsbach</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Stream simplifies creator management for creator platforms]]></title>
            <link>https://blog.cloudflare.com/stream-creator-management/</link>
            <pubDate>Fri, 13 May 2022 12:59:08 GMT</pubDate>
            <description><![CDATA[ Many Stream customers track video usage on a per-creator basis. Today, we are announcing creator management to make usage tracking much easier ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Creator platforms across the world use Cloudflare Stream to rapidly build video experiences into their apps. These platforms serve a diverse range of creators, enabling them to share their passion with their beloved audience. While working with creator platforms, we learned that many Stream customers track video usage on a per-creator basis in order to answer critical questions such as:</p><ul><li><p><b><i>“Who are our fastest growing creators?”</i></b></p></li><li><p><b><i>“How much do we charge or pay creators each month?”</i></b></p></li><li><p><b><i>“What can we do more of in order to serve our creators?”</i></b></p></li></ul>
    <div>
      <h3>Introducing the Creator Property</h3>
      <a href="#introducing-the-creator-property">
        
      </a>
    </div>
    <p>Creator platforms enable artists, teachers and hobbyists to express themselves through various media, including video. We built Cloudflare Stream for these platforms, enabling them to rapidly build video use cases without needing to build and maintain a video pipeline at scale.</p><p>At its heart, every creator platform must manage ownership of user-generated content. When a video is uploaded to Stream, Stream returns a video ID. Platforms using Stream have traditionally had to maintain their own index to track content ownership. For example, when a user with internal user ID <code>83721759</code> uploads a video to Stream with video ID <code>06aadc28eb1897702d41b4841b85f322</code>, the platform must maintain a database table of some sort to keep track of the fact that Stream video ID <code>06aadc28eb1897702d41b4841b85f322</code> belongs to internal user <code>83721759</code>.</p><p>With the introduction of the creator property, platforms no longer need to maintain this index. Stream already has a direct creator upload feature to enable users to upload videos directly to Stream using tokenized URLs and without exposing account-wide auth information. You can now set the creator field with your user’s internal user ID at the time of requesting a tokenized upload URL:</p>
            <pre><code>curl -X POST "https://api.cloudflare.com/client/v4/accounts/023e105f4ecef8ad9ca31a8372d0c353/stream/direct_upload" \
     -H "X-Auth-Email: user@example.com" \
     -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \
     -H "Content-Type: application/json" \
     --data '{"maxDurationSeconds":300,"expiry":"2021-01-02T02:20:00Z","creator": "&lt;CREATOR_ID&gt;", "thumbnailTimestampPct":0.529241,"allowedOrigins":["example.com"],"requireSignedURLs":true,"watermark":{"uid":"ea95132c15732412d22c1476fa83f27a"}}'</code></pre>
            <p>When the user uploads the video, the creator property would be automatically set to your internal user ID and can be leveraged for operations such as pulling analytics data for your creators.</p>
    <div>
      <h3>Query By Creator Property</h3>
      <a href="#query-by-creator-property">
        
      </a>
    </div>
    <p>Setting the creator property on your video uploads is just the beginning. You can now filter Stream Analytics via the Dashboard or the GraphQL API using the creator property.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/AL3kZM4W7vpwNEmeuTAvO/86e0c2c72d73319007c02bef85d94c59/kGrcO1JYFhPo8gGDBCqvgLsaJO3Ky0lGQhiqoq92CJtWSFMQ0dgCod0smGH2ET9les1c3C2SXf6NFoizfKLKn8TwOExFIfEazIJrSMzDVqY42EavfavcDMrUg_O4.png" />
            
            </figure><p><i>Filter Stream Analytics in the Dashboard using the Creator property</i></p><p>Previously, if you wanted to generate a monthly report of all your creators and the number of minutes of watch time recorded for their videos, you’d likely use a scripting language such as Python to do the following:</p><ol><li><p>Call the Stream GraphQL API requesting a list of videos and their watch time</p></li><li><p>Traverse through the list of videos and query your internal index to determine which creator each video belongs to</p></li><li><p>Sum up the video watch time for each creator to get a clean report showing you video consumption grouped by the video creator</p></li></ol><p>The creator property eliminates this three step manual process. You can make a single API call to the GraphQL API to request a list of creators and the consumption of their videos for a given time period. Here is an example GraphQL API query that returns minutes delivered by creator:</p>
            <pre><code>query {
  viewer {
    accounts(filter: { accountTag: "&lt;ACCOUNT_ID&gt;" }) {
      streamMinutesViewedAdaptiveGroups(
        limit: 10
        orderBy: [sum_minutesViewed_DESC]
        filter: { date_lt: "2022-04-01", date_gt: "2022-04-31" }
      ) {
        sum {
          minutesViewed
        }
        dimensions {
          creator
        }
      }
    }
  }
}</code></pre>
            <p>Stream is focused on helping creator platforms innovate and scale. Matt Ober, CTO of NFT media management platform <a href="https://www.pinata.cloud/">Piñata</a>, says "By allowing us to upload and then query using creator IDs, large-scale analytics of Cloudflare Stream is about to get a lot easier."</p>
    <div>
      <h3>Getting Started</h3>
      <a href="#getting-started">
        
      </a>
    </div>
    <p><a href="https://developers.cloudflare.com/stream/uploading-videos/creator-id/">Read the docs</a> to learn more about setting the creator property on new and previously uploaded videos. You can also set the creator property on live inputs, so the recorded videos generated from the live event will already have the creator field populated.</p><p>Being able to filter analytics is just the beginning. We can’t wait to enable more creator-level operations, so you can spend more time on what makes your idea unique and less time maintaining table stakes infrastructure.</p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Video]]></category>
            <guid isPermaLink="false">3NQRPsoJomsksaoLFEGlTk</guid>
            <dc:creator>Ben Krebsbach</dc:creator>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Serverless Live Streaming with Cloudflare Stream]]></title>
            <link>https://blog.cloudflare.com/stream-live/</link>
            <pubDate>Thu, 30 Sep 2021 12:59:23 GMT</pubDate>
            <description><![CDATA[ You can now use Cloudflare to do serverless end-to-end live-streaming. Stream Live offers video ingestion, encoding, recording and a player in a single product. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We’re excited to introduce the open beta of Stream Live, an end-to-end scalable <a href="https://www.cloudflare.com/developer-platform/solutions/live-streaming/">live-streaming platform</a> that allows you to focus on growing your live video apps, not your codebase.</p><p>With Stream Live, you can painlessly grow your streaming app to scale to millions of concurrent broadcasters and millions of concurrent users. Start sending live video from mobile or desktop using the industry standard RTMPS protocol to millions of viewers instantly. Stream Live works with the most popular live video broadcasting software you already use, including ffmpeg, <a href="https://obsproject.com/">OBS</a> or Zoom. Your broadcasts are automatically recorded, optimized and delivered using the Stream player.</p><p>When you are building your live infrastructure from scratch, you have to answer a few critical questions:</p><ol><li><p>“<i>Which codec(s) are we going to use to encode the videos?”</i></p></li><li><p><b><i>“Which protocols are we going to use to ingest and deliver videos?”</i></b></p></li><li><p><b><i>“How are the different components going to impact latency?”</i></b></p></li></ol><p>We built Stream Live, so you don’t have to think about these questions and spend considerable engineering effort answering them. Stream Live abstracts these pesky yet important implementation details by automatically choosing the most compatible codec and streaming protocol for the client device. There is no limit to the number of live broadcasts you can start and viewers you can have on Stream Live. Whether you want to make the next viral video sharing app or securely broadcast all-hands meetings to your company, Stream will scale with you without having to spend months building and maintaining video infrastructure.</p>
    <div>
      <h3>Built-in Player and Access Control</h3>
      <a href="#built-in-player-and-access-control">
        
      </a>
    </div>
    <p>Every live video gets an embed code that can be placed inside your app, enabling your users to watch the live stream. You can also use your own player with included support for the two major HTTP streaming formats — HLS and DASH — for a granular control over the user experience.</p><p>You can limit who can view your live videos with self-expiring tokenized links for each viewer. When generating the tokenized links, you can define constraints <a href="https://developers.cloudflare.com/stream/viewing-videos/securing-your-stream">including time-based expiration, geo-fencing and IP restrictions</a>. When building an online learning site or a video sharing app, you can put videos behind authentication, so only logged-in users can view your videos. Or if you are building a live concert platform, you may have agreements to only allow viewers from specific countries or regions. Stream’s signed tokens help you comply with complex and custom rulesets.</p>
    <div>
      <h3>Instant Recordings</h3>
      <a href="#instant-recordings">
        
      </a>
    </div>
    <p>With Stream Live, you don’t have to wait for a recording to be available after the live broadcast ends. Live videos automatically get converted to recordings in less than a second. Viewers get access to the recording instantly, allowing them to catch up on what they missed.</p>
    <div>
      <h3>Instant Scale</h3>
      <a href="#instant-scale">
        
      </a>
    </div>
    <p>Whether your platform has one active broadcaster or ten thousand, Stream Live scales with your use case. You don’t have to worry about adding new compute instances, setting up availability zones or negotiating additional software licenses.</p><p>Legacy live video pipelines built in-house typically ingest and encode the live stream continents away in a single location. Video that is ingested far away makes video streaming unreliable, especially for global audiences. All Cloudflare locations run the necessary software to ingest live video <i>in</i> and deliver video <i>out</i>. Once your video broadcast is in the Cloudflare network, Stream Live uses the <a href="/250-cities-is-just-the-start/">Cloudflare backbone</a> and <a href="https://www.cloudflare.com/products/argo-smart-routing/">Argo</a> to transmit your live video with increased reliability.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3aUAddowRRZXNaqyepq9ey/8509043e6a1a063ee30152199de0e287/unnamed--1--2.png" />
            
            </figure>
    <div>
      <h3>Broadcast with 15 second latency</h3>
      <a href="#broadcast-with-15-second-latency">
        
      </a>
    </div>
    <p>Depending on your video encoder settings, the time between you broadcasting and the video displaying on your viewer’s screens can be as low as fifteen seconds with Stream Live. Low latency allows you to build interactive features such as chat and Q&amp;A into your application. This latency is good for broadcasting meetings, sports, concerts, and worship, but we know it doesn’t cover all uses for live video.</p><p>We’re on a mission to reduce the latency Stream Live adds to near-zero. The Cloudflare network is now <a href="/250-cities-is-just-the-start/">within 50ms for 95% of the world’s population</a>. We believe we can significantly reduce the delay from the broadcaster to the viewer in the coming months. Finally, in the world of live-streaming, latency is only meaningful once you can assume reliability. By using the Cloudflare network spanning over 250 locations, you get unparalleled reliability that is critical for live events.</p>
    <div>
      <h3>Simple and predictable pricing</h3>
      <a href="#simple-and-predictable-pricing">
        
      </a>
    </div>
    <p>Stream Live is available as a pay-as-you-go service based on the duration of videos recorded and duration of video viewed.</p><ul><li><p>It costs $5 per 1,000 minutes of video storage capacity per month. Live-streamed videos are automatically recorded. There is no additional cost for ingesting the live stream.</p></li><li><p>It costs $1 per 1,000 minutes of video viewed.</p></li><li><p>There are no surprises. You never have to pay hidden costs for video ingest, compute (encoding), egress or storage found in legacy video pipelines.</p></li><li><p>You can control how much you spend with Stream using billing alerts and restrict viewing by creating signed tokens that only work for authorized viewers.</p></li></ul><p>Cloudflare Stream encodes the live stream in multiple quality levels at no additional cost. This ensures smooth playback for your viewers with varying Internet speed. As your viewers move from Wi-Fi to mobile networks, videos continue playing without interruption. Other platforms that offer live-streaming infrastructure tend to add extra fees for adding quality levels that caters to a global audience.</p><p>If your use case consists of thousands of concurrent broadcasters or millions of concurrent viewers, <a href="https://www.cloudflare.com/plans/enterprise/contact/">reach out</a> to us for volume pricing.</p>
    <div>
      <h3>Go live with Stream</h3>
      <a href="#go-live-with-stream">
        
      </a>
    </div>
    <p>Stream works independent of any domain on Cloudflare. If you already have a Cloudflare account with a Stream subscription, you can begin using Stream Live by clicking on the “Live Input” tab on the <a href="https://dash.cloudflare.com/?to=/:account/stream">Stream Dashboard</a> and creating a new input:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1iLtxKiyHyGsDb9zkLra2e/804f1abf6a30a86cd214dcc048685705/Stream-Screen.png" />
            
            </figure><p>If you are new to Cloudflare, <a href="https://dash.cloudflare.com/sign-up/stream">sign up for Cloudflare Stream.</a></p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Live Streaming]]></category>
            <category><![CDATA[WebRTC]]></category>
            <category><![CDATA[Video]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Serverless]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">18F1qaXrHhAozgDsfcwjHJ</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare Images Now Available to Everyone]]></title>
            <link>https://blog.cloudflare.com/announcing-cloudflare-images/</link>
            <pubDate>Wed, 15 Sep 2021 13:02:00 GMT</pubDate>
            <description><![CDATA[ Today, we are launching Cloudflare Images for all customers. Images provides a single product to store, resize and serve images. We built Cloudflare Images, so customers of all sizes can build a scalable and affordable image pipeline with a fraction of the effort. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today, we are launching Cloudflare Images for all customers. Images is a single product that stores, resizes, optimizes and serves images. We built <a href="https://www.cloudflare.com/products/cloudflare-images/">Cloudflare Images</a> so customers of all sizes can build a scalable and affordable image pipeline in minutes.</p>
    <div>
      <h2>Store images efficiently</h2>
      <a href="#store-images-efficiently">
        
      </a>
    </div>
    <p>Many legacy image pipelines are architected to take an image and create multiple copies of it to account for different sizes and formats. These copies are then stored in a storage bucket and delivered using a <a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/">CDN</a>. This architecture can be hard to maintain and adds infrastructure cost in unpredictable ways.</p><p>With Cloudflare Images, you don’t need to worry about <i>creating</i> and <i>storing</i> multiple versions of the same image in different sizes and formats. Cloudflare Images makes a clear distinction between your stored images and the variants. Once you upload an image, you can apply any defined variant to the uploaded image. The variants and different formats don’t count towards your stored images quota.</p><p>This means that when a user uploads a picture that you need to resize in three different ways and serve in two different formats, you pay for <i>one</i> stored image instead of seven different images (the original, plus three variants for each of the two formats.)</p>
    <div>
      <h2>Built-in access control</h2>
      <a href="#built-in-access-control">
        
      </a>
    </div>
    <p>Every image that is uploaded to Cloudflare Images can be marked private, so it can only be accessed using an expiring signed URL token. This is ideal for use cases like membership sites that sell premium content.</p><p>Signed URLs give you the flexibility to validate if someone is a paying member using your custom logic and only give them access to the set of images they have paid for.</p>
    <div>
      <h2>Eliminate egress costs</h2>
      <a href="#eliminate-egress-costs">
        
      </a>
    </div>
    <p>Egress cost is the cost of getting your data out of a storage provider. The most common case being when you serve an image from storage you pay for the bits transmitted. And you end up paying every, single time that same image is displayed. It is easy to not account for this cost when you are doing cost-benefit analysis between different solutions. But egress costs add up rapidly, and it is not uncommon for customers to pay their storage provider a <i>very large multiple</i> of their total storage cost in egress.</p><p>When you use a multi-vendor solution for your image pipeline, you might use vendor A for storage, vendor B for resizing the images and vendor C for delivering the images. At face value, this solution might appear cheaper because you think “<i>we’ve picked the most affordable option for each piece of our image pipeline</i>.” But in this setup, the resizing service (vendor B) and the CDN (vendor C) still need to request images from vendor A.</p><p>With Cloudflare Images, you never have to worry about egress costs because the images are stored, optimized and delivered by a single product. And you will see only two line items on your bill for Cloudflare Images. You pay \$5/month for every 100,000 stored images and \$1 per 100,000 delivered images. There are no additional resizing, compute or egress costs.</p>
    <div>
      <h2>Uploading Images</h2>
      <a href="#uploading-images">
        
      </a>
    </div>
    <p>Cloudflare Images offers multiple ways to upload your images. We accept all the common file formats including JPEG, GIF and WEBP. Each image uploaded to Images can be up to 10 MB.</p><p>If you only have a few images or simply want a taste of the product, you can use the <a href="https://dash.cloudflare.com/?to=/:account/images">Images Dashboard</a>. Simply drag and drop one or more images:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/69R4SCilBZZo0HZXoxcQcb/2ea6038f76a3076a892505638092892b/image1-10.png" />
            
            </figure><p><i>Cloudflare Images Dashboard</i></p><p>If you have an app that lets your users upload images, you can use the Direct Creator Uploads feature of Cloudflare Images.</p><p>The Direct Creator Uploads API lets you request single-use tokens. These one-time upload URLs can be used by your app to upload your user’s submissions without exposing your API Key or Token. Here is an example cURL that returns a one-use upload url:</p>
            <pre><code>curl --request POST \
  --url https://api.cloudflare.com/client/v4/accounts/:account_id/images/v1/direct_upload \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer :token'</code></pre>
            <p>If the call is successful, you’ll receive a response that looks like this:</p>
            <pre><code>{
  "result": {
    "id": "2cdc28f0-017a-49c4-9ed7-87056c839c2",
    "uploadURL": "https://upload.imagedelivery.net/2cdc28f0-017a-49c4-9ed7-87056c839c2"
  },
  "result_info": null,
  "success": true,
  "errors": [],
  "messages": []
}</code></pre>
            <p>Your client-side app can now upload the image directly to the <code>uploadURL</code> without exposing your account credentials to the client.</p>
    <div>
      <h2>Resizing with Variants</h2>
      <a href="#resizing-with-variants">
        
      </a>
    </div>
    <p>Cloudflare Images lets you define variants and apply them to your uploaded images. You can define up to 20 different variants to support different use cases. Each variant has properties including the width and height of resized images.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4VVAvrN7YhsBzMG8AtBcQf/c615f98838d50a88d26537fe3f31f6a0/image4-11.png" />
            
            </figure><p><i>Configure variants in Cloudflare Images</i></p><p>You can also configure the fit property to describe how the width and height dimensions should be interpreted.</p><p>Fit Option</p><p>Behavior</p><p>Scale Down</p><p>Image will be shrunk in size to fully fit within the given width or height, but won’t be enlarged.</p><p>Contain</p><p>Image will be resized (shrunk or enlarged) to be as large as possible within the given width or height while preserving the aspect ratio.</p><p>Cover</p><p>Image will be resized to exactly fill the entire area specified by width and height, and will be cropped if necessary.</p><p>Crop</p><p>Image will be shrunk and cropped to fit within the area specified by width and height. The image won’t be enlarged. For images smaller than the given dimensions it’s the same as scale-down. For images larger than the given dimensions, it’s the same as cover.</p><p>Pad</p><p>Image will be resized (shrunk or enlarged) to be as large as possible within the given width or height while preserving the aspect ratio, and the extra area will be filled with a background color (white by default)</p><p>We plan to add more properties to give you maximum flexibility. If there is a particular property you’d love to see, <a href="https://docs.google.com/forms/d/1UmltETYpHIt0C9cZkr607ofcNUt53jgqk18Dh8vHxyU">let us know</a>.</p><p>Once you define your variants, you can begin using them with any image. From the Dashboard, simply click on Variants to quickly preview how any image would be rendered using each of your variants.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1IOsQ2YJ2gIoUUFu6vKNcX/2b279f4a21f1f315956685b5f329fcf9/image2-18.png" />
            
            </figure><p><i>Previewing variants in Cloudflare Images</i></p>
    <div>
      <h2>Optimized image delivery</h2>
      <a href="#optimized-image-delivery">
        
      </a>
    </div>
    <p>Once you’ve uploaded your first image, you will see the Image Delivery URL in your Images Dashboard:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5HAG3KwRzFyPM0ons8zdWs/6c71517b29b09416a46501104be5199e/image5-9.png" />
            
            </figure><p><i>Serving images with Cloudflare Images</i></p><p>A typical Image Delivery URL looks like this:</p><p><a href="https://imagedelivery.net/ZWd9g1K7eljCn_KDTu_OWA/:image_id/:variant_name"><code>https://imagedelivery.net/ZWd9g1K7eljCn_KDTu_OWA/:image_id/:variant_name</code></a></p><p>You can use this url template to form the final URL that returns any image and variant combination.</p><p>When a client requests an image, Cloudflare Images will pick the optimal format between WebP, PNG, JPEG and GIF. The format served to the eyeball is determined by client headers and the image type. Cloudflare Images will soon support AVIF, offering further compression. One of the best parts of using Cloudflare Images is that when we add support for newer formats such as AVIF, you will get the upside without needing to make any changes to your codebase.</p>
    <div>
      <h2>What’s next</h2>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>All Cloudflare customers can <a href="https://dash.cloudflare.com/?to=/:account/images">sign up to use Cloudflare Images</a> this week. We built Cloudflare Images for developers. Check out the <a href="https://developers.cloudflare.com/images/">Cloudflare Images developer docs</a> for examples of implementing common use-cases such as letting your users upload images directly to Images and using signed URLs to implement access control.</p><p>We’re just getting started with Cloudflare Images. Here are some of the features we plan to support soon:</p><ul><li><p>AVIF support for even smaller file sizes and faster load times.</p></li><li><p>Variants that add a blur effect to your images.</p></li><li><p>Analytics to better understand your use of Images.</p></li></ul>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div><p></p> ]]></content:encoded>
            <category><![CDATA[Speed Week]]></category>
            <category><![CDATA[Image Resizing]]></category>
            <category><![CDATA[Image Optimization]]></category>
            <guid isPermaLink="false">46UovjCfOrGDiglTVokHXJ</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Announcing Cloudflare Images beta to simplify your image pipeline]]></title>
            <link>https://blog.cloudflare.com/announcing-cloudflare-images-beta/</link>
            <pubDate>Tue, 20 Apr 2021 17:00:00 GMT</pubDate>
            <description><![CDATA[ Today, we are announcing the beta of Cloudflare Images: a simple service to store, resize, optimize, and deliver images at scale.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today, we are announcing the beta of Cloudflare Images: a simple service to store, resize, optimize, and deliver images at scale.</p><p>In 2018, we launched Stream to provide a single product that could be used to store, encode, and deliver videos. With Cloudflare Images, we are doing for images what Stream did for videos. Just like Stream, Cloudflare Images eliminates the need to think about storage buckets, egress costs, and many other common problems that are solved for you out of the box. Whether you are building an ecommerce platform with millions of high-res product pictures and videos or a new app for creators, you can build your entire media pipeline by combining Cloudflare Images and Stream.</p>
    <div>
      <h2>Fundamental questions for storing and serving images</h2>
      <a href="#fundamental-questions-for-storing-and-serving-images">
        
      </a>
    </div>
    <p>Any time you are building infrastructure for image storage and processing, there are four fundamental questions you must answer:</p><ol><li><p>“Where do we store images?”</p></li><li><p>“How do we secure, resize, and optimize the images for different use cases?”</p></li><li><p>“How do we serve the images to our users reliably?”</p></li><li><p>“How do we do all of these things at scale while having predictable and affordable pricing, especially during spikes?”</p></li></ol><p>Cloudflare Images has a straightforward set of APIs and simple pricing structure that answers all of these pesky questions. We built Images so your team can spend less energy maintaining infrastructure and more time focusing on what makes your product truly special.</p>
    <div>
      <h2>Current state of image infrastructure</h2>
      <a href="#current-state-of-image-infrastructure">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3JMlXeae2Kmb12pBqL8UqD/cd736adf75910be35d4d471ce9c32005/image4-12.png" />
            
            </figure><p>We talked to many Cloudflare customers who are using Cloudflare to serve millions of images every day. We heard two recurring themes. First, customers wished there was a simpler way for them to securely store, resize, and serve the images. Their current infrastructure generally involves using product A for storage, product B for resizing, and product C for the actual delivery. Combining these products together (often from multiple vendors) quickly becomes messy with multiple points of failure. Moreover, maintaining this infrastructure requires ongoing monitoring and tweaks.</p><p>Second, we heard that customers often end up with an ever-growing egress bill due to multiple vendors and products. It blew our minds that the egress bill can be a multiple of the storage cost itself. Every time your pictures move from <i>product A</i> (storage provider) to <i>product B</i> (resizing service) to <i>product C</i> (the CDN), you generally pay an egress cost which can quickly add up depending on the number of pictures and their variants. Multiplied by tens of millions of images and variants, this cost can add up to tens of thousands of dollars per month.</p>
    <div>
      <h2>Why Cloudflare Images</h2>
      <a href="#why-cloudflare-images">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2kvSceRgjdPwh6wa0SLOiE/0c599be3620370c6a69065551b40d181/image2-27.png" />
            
            </figure>
    <div>
      <h3>Eliminate egress cost and storage bucket hell</h3>
      <a href="#eliminate-egress-cost-and-storage-bucket-hell">
        
      </a>
    </div>
    <p>Each time you upload an image to Cloudflare Images, you receive an <i>:image_id</i>. There are no buckets and folders to manage the originals and the variants. And because of Images built-in support for resizing and delivery, there is no egress cost. If you have internal metadata that you’d like to associate with a picture, you can set the <i>meta</i> field for every upload to any arbitrary JSON value.</p>
    <div>
      <h3>Simple APIs catered to your needs</h3>
      <a href="#simple-apis-catered-to-your-needs">
        
      </a>
    </div>
    <p>When talking to customers we saw two main patterns of how customers would like to deliver images:</p><ol><li><p>Upload an image and get an <code>:image_uid</code> back that allows future operations on the image. In this case, the image URL would be <a href="https://imagedelivery.net/small-thumbnail/:image_uid">https://imagedelivery.net/small-thumbnail/:image_uid</a></p></li><li><p>Upload images with the filename as their main identifier, e.g. filename reflects SKU.In this case, it is up to you to make sure there are no duplicate filenames, as they would be rejected.</p></li></ol><p>Here the image URL would be <a href="https://imagedelivery.net/small-thumbnail/:account_hash/:filename">https://imagedelivery.net/small-thumbnail/:account_hash/:filename</a></p>
    <div>
      <h3>Resize and secure your pictures with Variants</h3>
      <a href="#resize-and-secure-your-pictures-with-variants">
        
      </a>
    </div>
    <p>Cloudflare Images supports Variants. When you create a variant, you can define properties including variant name, width, height, and whether the variant should be publicly accessible. You can then associate an image with one or more variants using the UI or the API.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6SdAe27QQBBqkyogHVRKP2/875638cbcfbf4ba7d56fc150505ef9a2/image1-33.png" />
            
            </figure><p>Let’s say you are storing user profile pictures. You could define a variant called “<i>profile-thumbnail</i>” and configure that variant to serve images of a fixed width and height. Once you have a variant, you can associate the profile pictures with the <i>profile-thumbnail</i> variant. Whenever you need to display a profile picture in your app, you simply call <a href="https://imagedelivery.net/profile-thumbnail/:image_uid">https://imagedelivery.net/profile-thumbnail/:image_uid</a> or <a href="https://imagedelivery.net/profile-thumbnail/:account_hash/:filename">https://imagedelivery.net/profile-thumbnail/:account_hash/:filename</a>.</p><p>Variants also offer access control. You might only want logged-in users to view the larger version of the profile pictures. You could create another variant called <i>large-profile-picture</i> and make it require a signed URL token. When a user tries to access the large profile picture with a URL such as <a href="https://imagedelivery.net/large-profile-picture/:image_uid">https://imagedelivery.net/large-profile-picture/:image_uid</a>, the request will fail because there is no valid token provided.</p><p>An indirect upside of using variants is that your organization has a single source of truth for the different ways you are using images across your apps. Different teams can create variants for their use cases, enabling you to audit the security and optimization settings for different types of pictures from one central place. We learned that as our customers' products grow in complexity, separate teams may be responsible for handling various aspects of the product. For example, one team may be responsible for user profile pictures and the different variants associated with it. Another team may be responsible for creator uploads and maintaining different variations that are available to the public and to paid members. Over time, organizations can lose track of this logic with no single source of truth. With variants, this logic is clearly laid out and can serve as the source of truth for all the ways you are securing and optimizing different types of image uploads in your product.</p><p>There is no additional cost for using variants. Every picture uploaded to Images can be associated with up to five variants. You will be able to associate an image with a variant using the UI or the API.</p>
    <div>
      <h3>Intelligent delivery for every device and use case</h3>
      <a href="#intelligent-delivery-for-every-device-and-use-case">
        
      </a>
    </div>
    <p>Cloudflare Images automatically serves the most optimized version of the image. You no longer need to worry about things like file extensions. When a client requests a picture hosted on Cloudflare Images, we automatically identify the ideal supported format at the Cloudflare edge and serve it to the client from the edge. For example, 93.55% of all users use a web browser that supports webp. For those users, Images would automatically serve webp images. To the remaining users, Images would serve PNGs (and in very rare cases where neither webp or PNGs are supported, it would serve JPGs). In future, we plan to automatically support AVIF for highly-requested images.</p><p>When you use Images, you no longer need to worry about cache hit rates, image file types, configuring origins for your image assets.</p>
    <div>
      <h2>Simple pricing</h2>
      <a href="#simple-pricing">
        
      </a>
    </div>
    <p>To use Cloudflare Images, you will pay a fixed monthly fee for every 100,000 images stored in Cloudflare Images (up to 10MB per image). And at the end of each month, you pay for the number of images served. There are no additional costs for resizing, egress, or optimized routing.</p>
    <div>
      <h2>Request an Invite</h2>
      <a href="#request-an-invite">
        
      </a>
    </div>
    <p>If you want to be part of Cloudflare Images beta, <a href="https://docs.google.com/forms/d/1x1caSSYQn10dRjxNLJlG-MdHgLnUa2mnR6iUpa2ahxI">request an invite</a>. We will start inviting a limited set of users to try out Cloudflare Images in the coming weeks. Pricing and developer docs for Images will be posted at the time we start sending invites.</p><p>We can’t wait to see what you build using Cloudflare Images!</p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Cloudflare Images]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">1FAshpEwIB7Rsm85VyRF89</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
            <dc:creator>Marc Lamik</dc:creator>
        </item>
        <item>
            <title><![CDATA[Live stream to multiple platforms with Stream Connect]]></title>
            <link>https://blog.cloudflare.com/restream-with-stream-connect/</link>
            <pubDate>Mon, 12 Apr 2021 13:00:00 GMT</pubDate>
            <description><![CDATA[ We are announcing Stream Connect, a service that enables creators and creator platforms to push RTMPS feeds to the Cloudflare edge and have it restreamed to your audience on popular platforms including Twitch, Facebook, and YouTube. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today, we are announcing the Stream Connect beta, the first step towards supporting end-to-end live broadcasting on Cloudflare. You can use Stream Connect to push RTMPS feeds to the Cloudflare edge and have it restreamed to your audience on any platform that supports RTMPS such as Facebook, YouTube and Twitch.</p>
    <div>
      <h2>What is restreaming?</h2>
      <a href="#what-is-restreaming">
        
      </a>
    </div>
    <p>Facebook, YouTube and Twitch are great platforms for creators to broadcast live video to reach billions. They each have their own unique communities and benefits for creators. If you have a band and want to broadcast a live performance for your fans, broadcasting to only one platform limits your reach. Restreaming enables you to push the live video to multiple platforms at the same time so you can meet your fans on their preferred platform.</p><p>Live video platforms accept incoming connections using a protocol called RTMP or RTMPS. Stream Connect allows you to continue using the same protocol as before. However, instead of using your local connection to send the video feed to multiple platforms, you only send it to Stream Connect. Connect uses the Cloudflare network to send your live feed to the configured media platforms.</p>
    <div>
      <h2>How Stream Connect increases reliability and lowers latency</h2>
      <a href="#how-stream-connect-increases-reliability-and-lowers-latency">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6cZIZ1zNpJVp2Kz9Bt95wl/3147329455db4c83482a47095bbaf8fc/image2-5.png" />
            
            </figure>
    <div>
      <h3>Eliminating the upload bandwidth bottleneck</h3>
      <a href="#eliminating-the-upload-bandwidth-bottleneck">
        
      </a>
    </div>
    <p>When you are using your phone to do a live broadcast, your bandwidth is always a bottleneck. If you are simply sending video to one platform only this might not be an issue. Concurrently pushing your live video from your phone to Facebook, Twitch and YouTube can put a strain on your connection resulting in increased latency,dropped frames or forcing you to stream at lower quality.</p><p>Stream Connect removes the bandwidth bottleneck. When you use Stream Connect, your device sends one copy of the RTMPS feed to the Cloudflare edge. Cloudflare then redistributes the feed to the destinations that you have configured. This reduces the load on your local connection and improves the video quality.</p>
    <div>
      <h3>Configuring the right ingest servers</h3>
      <a href="#configuring-the-right-ingest-servers">
        
      </a>
    </div>
    <p>It is common for third-party platforms to provide a list of geographic locations and servers so their end users can pick the location closest to them. For example, Twitch has a page <a href="https://stream.twitch.tv/ingests/">listing recommended ingestion endpoints</a>. This requires users to <i>manually</i> pick the optimal location. This can get challenging, especially if you have to do this with multiple platforms or you’re travelling and have to change your server often.</p><p>Stream Connect continually evaluates the health and connection speeds from all Cloudflare data centers to all major video platforms and chooses the best ingest endpoints automatically. This eliminates the manual steps required to find the Twitch ingest server closest to you.</p>
    <div>
      <h3>Solving unpredictable routing with Argo</h3>
      <a href="#solving-unpredictable-routing-with-argo">
        
      </a>
    </div>
    <p>When you broadcast a live video from your computer or phone, it travels over the public Internet. This introduces variability in network conditions that can particularly impact end-user experience. Due to the nature of live broadcasting, even brief or small levels of network congestion can result in increased latency, increased buffer times or dropped frames.</p><p>Cloudflare’s Anycast network allows your video stream to enter the Cloudflare network at the closest point wherever you are in the world or whether you travel or not. Once your live video enters the Cloudflare network, it will be intelligently routed to 3rd party platforms. Connect uses the Cloudflare Network with Argo to lower latency and network errors. After the video hits the Cloudflare network at the closest point to the broadcaster, Stream Connect utilizes Argo Smart Routing to improve reliability and latency to the destination. Your live broadcasts become less prone to degraded end-user experience due to network congestion.</p>
    <div>
      <h2>Join the Beta</h2>
      <a href="#join-the-beta">
        
      </a>
    </div>
    <p>Stream Connect Beta will be available on invite-only basis in mid-May. You can reserve your spot <a href="https://docs.google.com/forms/d/1rpRFKDTZTnh0LxysM2_Rky5pYt_rs9pUdSoJr_Ix2pk">here</a>.</p><p>It will be free for beta users during the beta phase. We will publish pricing details and developer docs when we begin inviting users to the beta.</p><p><b>Update</b> [20 July 2021]: Stream Connect is now available to all customers.</p> ]]></content:encoded>
            <category><![CDATA[Developer Week]]></category>
            <category><![CDATA[Restreaming]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <guid isPermaLink="false">2kEOT7TfRh8FdLtVEFxL57</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Remote Work Isn’t Just Video Conferencing: How We Built CloudflareTV]]></title>
            <link>https://blog.cloudflare.com/remote-work-isnt-just-video-conferencing-how-we-built-cloudflaretv/</link>
            <pubDate>Fri, 20 Mar 2020 12:00:00 GMT</pubDate>
            <description><![CDATA[ At Cloudflare, we produce all types of video content, ranging from recordings of our Weekly All-hands to product demos. Being able to stream video on demand has two major advantages when compared to live video. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>At Cloudflare, we produce all types of video content, ranging from recordings of our Weekly All-Hands to product demos. Being able to <a href="https://www.cloudflare.com/developer-platform/solutions/video-on-demand/">stream video on demand</a> has two major advantages when compared to live video:</p><ol><li><p>It encourages asynchronous communication within the organization</p></li><li><p>It extends the life time value of the shared knowledge</p></li></ol><p>Historically, we haven’t had a central, secure repository of all video content that could be easily accessed from the browser. Various teams choose their own platform to share the content. If I wanted to find a recording of a product demo, for example, I’d need to search Google Drive, Gmail and Google Chat with creative keywords. Very often, I would need to reach out to individual teams to finally locate the content.</p><p>So we decided we wanted to build CloudflareTV, an internal Netflix-like application that can only be accessed by Cloudflare employees and has all of our videos neatly organized and immediately watchable from the browser.</p><p>We wanted to achieve the following when building CloudflareTV:</p><ul><li><p>Security: make sure the videos are access controlled and not publicly accessible</p></li><li><p>Authentication: ensure the application can only be accessed by Cloudflare employees</p></li><li><p>Tagging: allow the videos to be categorized so they can be found easily</p></li><li><p>Originless: build the entire backend using <a href="https://workers.cloudflare.com/">Workers</a> and <a href="https://www.cloudflare.com/products/cloudflare-stream/">Stream</a> so we don’t need separate infrastructure for encoding, storage and delivery</p></li></ul>
    <div>
      <h3>Securing the videos using signed URLs</h3>
      <a href="#securing-the-videos-using-signed-urls">
        
      </a>
    </div>
    <p>Every video uploaded to Cloudflare Stream can be locked down by requiring signed URLs. A Stream video can be marked as requiring signed URLs using the UI or by making an API call:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/19J2fu6de5Cg5lmf5fAIVX/328a6648871b2a79b71ab2a0cbb763f3/2-2.png" />
            
            </figure><p>Once locked down in this way videos can’t be accessed directly. Instead, they can only be accessed using a temporary token.</p><p>In order to create signed tokens, we must first make an <a href="https://support.cloudflare.com/hc/en-us/articles/200167836-Managing-API-Tokens-and-Keys#12345682">API call</a> to create a key:</p>
            <pre><code>curl -X POST -H "X-Auth-Email: {$EMAIL}" -H "X-Auth-Key: {$AUTH_KEY}"  "https://api.cloudflare.com/client/v4/accounts/{$ACCOUNT_ID}/media/keys"</code></pre>
            <p>The API call will return a JSON object similar to this:</p>
            <pre><code>{
  "result": {
    "id": "...",
    "pem": "...",
    "jwk": "...",
    "created": "2020-03-10T18:17:00.075188052Z"
  },
  "success": true,
  "errors": [],
  "messages": []
}</code></pre>
            <p>We can use the <b>id</b> and <b>pem</b> values in a Workers script that takes a video ID and returns a signed token that expires after 1 hour:</p>
            <pre><code>async function generateToken(video_id) {
var exp_time = Math.round((new Date()).getTime() / 1000)+3600;

    const key_data = {
        'id': '{$KEY_ID}',
        'pem': '{$PEM}',
        'exp': exp_time
    }

    let response = await fetch('https://util.cloudflarestream.com/sign/'+video_id, {
        method: 'POST',
        body: JSON.stringify(key_data)
    });
    let token_value = await response.text();
    return token_value;
}</code></pre>
            <p>The returned signed token should look something like this:</p>
            <pre><code>eyJhbGciOiJSUzI1NiIsImtpZCI6IjExZDM5ZjEwY2M0NGY1NGE4ZDJlMjM5OGY3YWVlOGYzIn0.eyJzdWIiOiJiODdjOWYzOTkwYjE4ODI0ZTYzMTZlMThkOWYwY2I1ZiIsImtpZCI6IjExZDM5ZjEwY2M0NGY1NGE4ZDJlMjM5OGY3YWVlOGYzIiwiZXhwIjoiMTUzNzQ2MDM2NSIsIm5iZiI6IjE1Mzc0NTMxNjUifQ.C1BEveKi4XVeZk781K8eCGsMJrhbvj4RUB-FjybSm2xiQntFi7AqJHmj_ws591JguzOqM1q-Bz5e2dIEpllFf6JKK4DMK8S8B11Vf-bRmaIqXQ-QcpizJfewNxaBx9JdWRt8bR00DG_AaYPrMPWi9eH3w8Oim6AhfBiIAudU6qeyUXRKiolyXDle0jaP9bjsKQpqJ10K5oPWbCJ4Nf2QHBzl7Aasu6GK72hBsvPjdwTxdD5neazdxViMwqGKw6M8x_L2j2bj93X0xjiFTyHeVwyTJyj6jyPwdcOT5Bpuj6raS5Zq35qgvffXWAy_bfrWqXNHiQdSMOCNa8MsV8hljQsh</code></pre>
            <p>Stream provides an embed code for each video. The “src” attribute of the embed code typically contains the video ID. But if the video is private, instead of setting the “src” attribute to the video ID, you set it to the signed token value:</p>
            <pre><code>&lt;stream src="eyJhbGciOiJSUzI1NiIsImtpZCI6IjExZDM5ZjEwY2M0NGY1NGE4ZDJlMjM5OGY3YWVlOGYzIn0.eyJzdWIiOiJiODdjOWYzOTkwYjE4ODI0ZTYzMTZlMThkOWYwY2I1ZiIsImtpZCI6IjExZDM5ZjEwY2M0NGY1NGE4ZDJlMjM5OGY3YWVlOGYzIiwiZXhwIjoiMTUzNzQ2MDM2NSIsIm5iZiI6IjE1Mzc0NTMxNjUifQ.C1BEveKi4XVeZk781K8eCGsMJrhbvj4RUB-FjybSm2xiQntFi7AqJHmj_ws591JguzOqM1q-Bz5e2dIEpllFf6JKK4DMK8S8B11Vf-bRmaIqXQ-QcpizJfewNxaBx9JdWRt8bR00DG_AaYPrMPWi9eH3w8Oim6AhfBiIAudU6qeyUXRKiolyXDle0jaP9bjsKQpqJ10K5oPWbCJ4Nf2QHBzl7Aasu6GK72hBsvPjdwTxdD5neazdxViMwqGKw6M8x_L2j2bj93X0xjiFTyHeVwyTJyj6jyPwdcOT5Bpuj6raS5Zq35qgvffXWAy_bfrWqXNHiQdSMOCNa8MsV8hljQsh" controls&gt;&lt;/stream&gt;
&lt;script data-cfasync="false" defer type="text/javascript" src="https://embed.videodelivery.net/embed/r4xu.fla9.latest.js"&gt;&lt;/script&gt;</code></pre>
            
    <div>
      <h3>Tagging videos</h3>
      <a href="#tagging-videos">
        
      </a>
    </div>
    <p>We would like to categorize videos uploaded to Stream by tagging them. This can be done by updating the video object’s meta field and passing it arbitrary JSON data. To categorize a video, we simply update the meta field with a comma-delimited list of tags:</p>
            <pre><code>curl -X POST  -d '{"uid": "VIDEO_ID", "meta": {"tags": "All Hands,Stream"}}' "https://api.cloudflare.com/client/v4/accounts/{$ACCOUNT_ID}/stream/{$VIDEO_ID}"  -H "X-Auth-Email: {$EMAIL}"  -H "X-Auth-Key: {$ACCOUNT_KEY}"  -H "Content-Type: application/json"</code></pre>
            <p>Later, we will create a <b>getVideos</b> Worker function to fetch a list of videos and all associated data so we can render the UI. The tagging data we just set for this video will be included in the video data returned by the Worker.</p>
    <div>
      <h3>Fetching Video Data using Workers</h3>
      <a href="#fetching-video-data-using-workers">
        
      </a>
    </div>
    <p>The heart of the UI is a list of videos. How do we get this list of videos programmatically? Stream provides an endpoint that returns all the videos and any metadata associated with them.</p><p>First, we set up environment variables for our Worker:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7gupv1LnhFeJ7X3rGOIcY7/9eed06310ca958eab862287b2730eb95/3-3.png" />
            
            </figure><p>Next, we wrote a simple Workers function to call the Stream API and return a list of videos, eliminating the need for an origin:</p>
            <pre><code>async function getVideos() {
    const headers = {
        'X-Auth-Key': CF_KEY,
        'X-Auth-Email': CF_EMAIL
    }

    let response = await fetch(“https://api.cloudflare.com/client/v4/accounts/” + CF_ACCOUNT_ID + '/stream', {
        headers: headers
    });
    let video_list = await response.text();
    return video_list;
}</code></pre>
            <p>Lastly, we set up a zone and within the zone, we set up a Worker routes pointing to our Workers script. This can be done from the Workers tab:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5rxhNxPv0rVfFTXofb8xOL/3238839da4f443931b00ef6feeec7e14/4-2.png" />
            
            </figure>
    <div>
      <h3>Authenticating using Cloudflare Access</h3>
      <a href="#authenticating-using-cloudflare-access">
        
      </a>
    </div>
    <p>Finally, we want to restrict access to CloudflareTV to people within the organization. We can do this using Cloudflare Access, available under the <b>Access</b> tab.</p><p>To restrict access to CloudflareTV, we must do two things:</p><ol><li><p>Add a new login method</p></li><li><p>Add an access policy</p></li></ol><p>To add a new login method, click the “+” icon and choose your identity provider. In our case, we chose Google:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/77wNmqDraVQTPuqrWKAL15/883ff1e404764adb80144a96ed921412/5-1.png" />
            
            </figure><p>You will see a pop up asking for information including <b>Client ID</b> and <b>Client Secret</b>, both key pieces of information required to set up Google as the identity provider.</p><p>Once we add an identity provider, we want to tell Access “who specifically should be allowed to access our application?” This is done by creating an <b>Access Policy.</b></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1lGE8NoPuruBdbJ62gOULQ/01b9ccf941a7b886857e733ebfbceda9/6-1.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/759SsaHGmEgN626KJKrj5j/3664a275496339dd42f3c5320c4b6b32/7.png" />
            
            </figure><p>We set up an Access Policy to only allow emails ending in our domain name. This effectively makes CloudflareTV only accessible by our team!</p>
    <div>
      <h3>What’s next?</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>If you have interesting ideas around video, Cloudflare Stream lets you focus on your idea while it handles storage, encoding and the viewing experience for your users. Coupled that with Access and Workers, you can build powerful applications. Here are the docs to help you get started:</p><ul><li><p><a href="https://developers.cloudflare.com/stream/getting-started/">Cloudflare Stream Developer Docs</a></p></li><li><p><a href="https://developers.cloudflare.com/access/setting-up-access/">Setting up Cloudflare Access</a></p></li><li><p><a href="https://developers.cloudflare.com/workers/quickstart">Workers Quick Start</a></p></li></ul> ]]></content:encoded>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Video]]></category>
            <guid isPermaLink="false">36J1Hy4Y9XIcy0h0OgWV7K</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
        <item>
            <title><![CDATA[Use Cloudflare Stream to build secure, reliable video apps]]></title>
            <link>https://blog.cloudflare.com/why-use-stream/</link>
            <pubDate>Tue, 07 Aug 2018 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare Stream is the best way for any founder or developer to deliver an extraordinary video experience to their viewers while cutting development time and costs, and as of today it is available to every Cloudflare customer. ]]></description>
            <content:encoded><![CDATA[ <p>It’s our pleasure to announce the general availability of <a href="https://www.cloudflare.com/products/cloudflare-stream/">Cloudflare Stream</a>. Cloudflare Stream is the best way for any founder or developer to deliver an extraordinary video experience to their viewers while cutting development time and costs, and as of today it is available to every Cloudflare customer.</p><p>If I had to summarize what we’ve learned as we’ve built Stream it would be: Video streaming is hard, but building a successful video streaming business is even harder. This is why our goal has been to take away the complexity of encoding, storage, and smooth delivery so you can focus on all the other critical parts of your business.</p>
    <div>
      <h3>Cloudflare Stream API</h3>
      <a href="#cloudflare-stream-api">
        
      </a>
    </div>
    <p>You call a single endpoint, Cloudflare Stream delivers a high-quality streaming experience to your visitors. Here’s how it works:</p><ol><li><p>Your app calls the /stream endpoint to upload a video. You can submit the contents of the video with the request or you can provide a URL to a video hosted elsewhere.</p></li><li><p>Cloudflare Stream encodes the stream in multiple resolutions to enable multi-bitrate streaming. We also automatically prepare DASH and HLS manifest files.</p></li><li><p>Cloudflare serves your video (in multiple resolutions) from our vast network of 150+ data centers around the world, as close as we can manage to every Internet-connected device on earth.</p></li><li><p>We provide you an embed code for the video which loads the unbranded and customizable Cloudflare Stream Player.</p></li><li><p>You place the embed code in your app, and you’re done.</p></li></ol>
    <div>
      <h3>Why Stream</h3>
      <a href="#why-stream">
        
      </a>
    </div>
    <p>Cloudflare Stream is a simple product by design. We are happy to say we don’t provide every configuration option. Instead we make the best choices possible, both on a player and network level, to deliver a high-quality experience to your visitors.</p>
    <div>
      <h4>Low Cost</h4>
      <a href="#low-cost">
        
      </a>
    </div>
    <p>Cloudflare Stream does not charge you for the intensive and complex job of encoding your video in different resolutions. You pay a dollar for every 1,000 minutes of streaming, and $5/mo for every 1,000 minutes of storage, and that’s it.</p><p>Behind the scenes we are driving costs so low by having both the most peered network in the world, and by intelligently serving your video from the data center which is fastest when the user has an empty buffer, and the most affordable when their buffer is full. This gives them the experience they need, while allowing you to serve video at a lower cost than you can find from platforms which can’t make these optimizations.</p>
    <div>
      <h4>Efficient Routing</h4>
      <a href="#efficient-routing">
        
      </a>
    </div>
    <p>Cloudflare touches as much as one in every ten web requests made over the Internet. If you read this blog you know how much energy and effort we put into optimizing that system to deliver resources faster. When applied to video, it means faster time to first frame and reduced buffering for your viewers than providers who operate at a smaller scale.</p>
    <div>
      <h4>Integrated Solution</h4>
      <a href="#integrated-solution">
        
      </a>
    </div>
    <p>The key innovation of Stream is looking at a video as not just a bunch of bytes to be served over the Internet, but as an experience for a user. Our encoding takes into account how files will be delivered from our data centers. Our player uses its knowledge of how we deliver to provide a better experience. All of this is only made possible through working with a partner who can see the entire user experience from developer to viewer.</p>
    <div>
      <h3>Common Use Cases</h3>
      <a href="#common-use-cases">
        
      </a>
    </div>
    <ul><li><p><a href="https://www.cloudflare.com/developer-platform/solutions/video-on-demand/"><b>Video-on-demand</b></a>: Whether you have 50 hours or 50,000 hours of video content, you can use Cloudflare Stream to make it streamable to the world.</p></li><li><p><b>Gaming</b>: Allow your users from around the world to upload and share videos of their gameplay.</p></li><li><p><b>eLearning</b>: Cloudflare Stream makes it a breeze to build eLearning applications that offer multi-bitrate streaming and other important features such as offline viewing and advance security tokens.</p></li><li><p><b>Video Ads</b>: Use the Cloudflare Player to stream video ads with the confidence that your stream will be optimized for your audience.</p></li><li><p><b><i>Your Idea</i></b>: We are here to help make the Internet better so you can build amazing things with it. Reach out with your ideas for how video can make your app, site, or service more powerful.</p></li></ul>
    <div>
      <h3>How to Get Started</h3>
      <a href="#how-to-get-started">
        
      </a>
    </div>
    <p>To get started, simply sign-up for Cloudflare and visit the Stream tab! As of today it is generally available for every Cloudflare user. If you’re an Enterprise customer, speak with your Cloudflare team.</p><p>Have a question or idea? Reach out in the <a href="https://community.cloudflare.com/tags/stream">community forum</a>.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Cloudflare Stream]]></category>
            <category><![CDATA[Video]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <guid isPermaLink="false">4nGReNw9sxxe3cQoFUlZ31</guid>
            <dc:creator>Zaid Farooqui</dc:creator>
        </item>
    </channel>
</rss>