Stream Delivery: Live Streaming (Help!)


I’d like to evaluate the Stream Delivery service assuming I can get answers to these questions:

  1. I can generate an RTMP stream and point it at some RTMP URL. In my use case, I’d like to point it to an Nginx at my origin server that’s compiled with the RTMP module and have it push the RTMP stream to some Cloudflare RTMP URL. Is that possible? if so, how do I generate the RTMP URL to use for each stream? I need to send many RTMP streams concurrently so I need a URL to be created for each stream so I can push each stream to their CF RTMP URL.

  2. Once I get the RTMP stream to CF, I’d like CF to process the stream including generating the HLS playlist and .ts files, and serve it using it either the CF player or HLS.js. Is that how it works?

  3. I have no need for storage beyond a temporary cache while the stream is playing. Once the live stream has finished I don’t need to replay it from storage. However, the setup process asks me to choose a storage option. I don’t have a use case for storing the streams other than just while the stream is live. I don’t even need any fragment but the latest. I dob’t want the ability to seek backwards through the stream. Should I simply choose Custom X and enter 0 for storage or do I need to purchase storage in order to serve a live stream?

  4. Let’s say I am pushing 10 RTMP streams to CF each of which lasts 10 minutes. My understanding is that I’ll be charged $0.10 for that. Is that correct?


In #1, I am assuming I can push the RTMP stream to CF. But how do I do it through an API such that each stream gets to be served at a different URL at my origin server’s address via CF? I have not seen any docs on how the live streaming works.

Thank you in advance.

Cloudflare Stream does not do live streaming currently (unfortunately), and doing something like hosting streams yourself but cached through CF requires an enterprise plan.

I’m happy to try out the Enterprise Plan. I can sign up if I know for sure that CF can be useful to my use case.

Can CF distribute a bunch of HLS streams LIVE as I produce them on some origin server? Can they consume my HLS streams from multiple origin servers? I have 10+ streams that I need to be doing simultaneously (for IP cam/security application) and I don’t think I can do RTMP-to-HLS encoding in one server, so I may have more than one origin server. Can it be under one Enterprise Plan?

I don’t need storage. I need scalable distribution. There can be hundreds of clients per stream.

At the least, if the above can’t be done even with an enterprise plan, then is there an API to load the full file to be transcoded and streamed? If so, do we get a URL per each file we upload if the upload via the aPI is successful? Are there any docs for the Enterprise features?

Happy to sign up if the Enterprise does meet my needs.

That sounds like something you could do with load balancing, but I’m not sure what exactly you mean. Do you want the same path to go to the closest server (is geo-based load balancing) or do you want there to be a different path/subdomain for each HLS stream?

Yes, Enterprise plans are contract-based so Cloudflare will only bill you based on what usage they expect to see from you and the features you ask to use; I haven’t heard of anyone with two different Enterprise contracts.

Also, if you want to look into CF proxying your actual RTMP endpoints for DDOS protection, see Spectrum:

I would highly suggest you click a “contact sales” button on one of those pages, the sales team can help explain how CF features work and are who you contact to get the Enterprise trial going.

1 Like

I will contact sales, but one more technical clarification so I’m not confusing the sales folks:

I plan to have several origin servers that are receiving RTMP streams and forwarding them to CF for (hopefully) chunked CMAF encoding and distribution (dash.js player or CF player)

For every stream I push to CF, I expect to get back a unique URL for where it will be accessed, mapped to my domain.

CF can load balance on their end. I only need to send it to the geo-nearest CF server. which I think is something that is transparent to me. I just just each stream to the same CF URL and they publish each on a different URL mapped to a URL on my domain.

Makes sense?

I don’t think Cloudflare does that; CF is largely a “pull” CDN that pulls files from your origin(s) via HTTP. The Stream Delivery offering is more of a “solution” than a product where it showcases how well CF works for cached video content, so any files [eg dash/hls] you want to be served will need to be on an origin server somewhere. At that point, you just “proxy” those endpoints (eg. if you publish your stream at and CF will provide their caching and global CDN network.

Ah. Thank you Judge.