Calculating Amazon EC2/S3 costs
I am looking at moving to Wowza for Amazon and would like to get some help in projecting costs.
We are basing our business plan on scaling up to having 1500 Axis cameras streaming live video to Wowza for recording. We are seeing about 90% incoming data and 10% outgoing with our current number of customers. We expect that to continue.
We currently average 19 Kps per camera or 47 GB per month and a storage need of 9 GB ongoing (we store 7 days of recordings).
This scales up to 70 TB of monthly bandwidth and 14 TB of storage for 1500 cameras.
How many instances of Wowza will we need to support 1500 simultaneous incoming streams and 150-200 outgoing streams.
If we had a need to support 2000+ outgoing streams on top of the incoming streams, how many instances of Wowza would we need?
It's been my hope that Wowza can support more than 1000 incoming streams per instance. But I have not been able to get enough cameras up and running to put Wowza under a measurable load.
Based on our experience (20 cameras) with our current customers, Wowza isn't using any measurable CPU. I went through the optimization steps and it is using 1.6 GB of RAM.
In your scenario, would it be possible to spread the incoming load across multiple servers? That seems to be the more sensible approach for scaling.
Although, at 19Kbps (really, that little?) per camera, 1000 cameras may be a bit of a stretch on a small instance, but could potentially work on a large or x-large instance.
I was surprised by the 19K as well. That's the total Bytes per second coming from Performance Monitor divided by the number of cameras. There's nothing else running on that server. So maybe people usually represent that value as bits per second which would be 152Kbps. That seems more reasonable.
I can spread the streams across multiple servers, but I am trying to figure out how few servers I will need.
Has anyone seen installations with say 500 streams per server?
150Kbps sounds about right for a camera.
I've routinely done 300 outbound streams at 650Kbps on a small instance.
Small instance starts struggling around 150-180Mbps.
Large can go to about 300Mbps.
So, rough back-of-the-napkin calculation, a small instance *might* be able to handle 1000 cameras coming in, but you'd be pushing it.
Some hosting providers can offer free inbound bandwidth, since they have a lot of capacity available, as users typically use outbound, this would definitely be cheaper than AWS.
Hey Bryan, did you ever get this working? Do you have RTSP streams from your cameras going to right to Wowza, or is the video going through an encoder first? I assumed since you push a stream to port 1935 on Wowza, only one camera/encoder could be using that port at a time. Or is it possible to configure Wowza to accept incoming streams on multiple ports at once?
Here is a guide to using an IP camera with Wowza.
Wowza pulls rtsp stream from IP cameras on port 554. You can pull from many cameras at the same time to the same application instance.
Wowza publishes each IP camera stream, making them available to clients over RTMP, RTSP or HTTP (iOS, Smooth and Flash HTTP) using port 1935 by default.
So this block of code in the docs:
The 'Server' directive is the address of the Wowza server where you want the video to be available, and the 'Stream' directive is the address of the camera's native RTSP feed, right? So for an Axis camera, for example, it would be something like:
And that server address is accessible to any client, and they'll receive the proper data stream for them? How does HTTP Live Streaming work with the rtmp:// protocol? Or do we just change that http:// for Live Streaming?
"Server" and "Stream" in this case is referring to the labels on the Wowza example players: SimpleVideoStreaming or LiveVideoStreaming players.