Background: We need to deliver a video heavy e-learning course to a classroom of ~15 users. This video will be MP4 delivered via HTML5 video so progressive download. As from what I can gather you can't stream to HTML5 Video.
These 15 users will be in the same room, sharing an internet connection.
The video will be lots and lots of short (30 sec) clips, about 9 MB each. These files will be delivered from Amazon Cloudfront (CDN)
With progressive downloads, does each "client" download as fast as it can?
Is this theory correct or way off?
- user A is the first to download a clip, and starts downloading at near-full speed
- user B and C then get to the same stage, so they start downloading but there isn't much bandwidth so they download REALLY SLOWLY
- users D-P are screwed!
How can I advise my client what internet connection he will need to guarantee smooth playback?
Any thoughts/advice?
This is simpler than you think, a 9MB 30-second clip is 300KBps right, you have 15 of them - thus you need to be able to stream 4.5MBps, so roughly 45Mbps. A single 100Mbps link from the server to your classroom should be fine. The webserver, so long as it's not memory-starved, will easily manage to read the files once and cache them thus reducing any random-read requirements.
The worst case-scenario for web server random read would be all 15 users starting different non-cached videos at once, so 15 x 9MB, 135MB. Given these are inherently sequential files any decent disk controller would start streaming all 15 videos in less than a second or two from the cheapest of single disks.
Basically run a 100Mbps link and ensure your web server has enough memory and relax :)
Short answer: 2.4 Mbit (9 MB * 8 bits/byte / 30 seconds) * 15 (clients) = 36Mbit for smooth playback always. You could probably do with less than that if not everyone will download at once, or if you're ok with a bit of load time. They could do much much better by having a local cache (Squid, for example) to make sure they only download those files once.
The long answer is "it depends on lots of things" :)
Also, clients will equalize usage if they're all on similar machines and downloading the same thing. So students D-P aren't in trouble, they'll all slow down equally (all other things in the environment being equal).
Personally I would use a caching "server" (f.e. Squid) for the classroom, so you only need to download it once if the video is always the same for 15 users.
see for example this question on serverfault:
Configuring Squid to cache media streams
This could dramatically lower your bandwidth needs, if you know beforehand you could even cache them at off-times so you could use the current available bandwidth without the need for an additional expensive Line.
Depending on the Licence of the Videos and the location your client is sitting there might be some legal issues you need to face though.