Providing a better solution for streaming your zoom recordings on your platform
Satendra Rawat
November 19, 2020

We recently got a problem statement from one of our clients. They have an education platform for which they are using Zoom to provide online tutoring and are availing the Zoom recording to students once the session is over.

They started with few institutes, but as the business grew up, there were few things that they had to consider.

The platform is providing two types of services:

  1. One-to-one tutoring.
  2. Institute bases tutoring.

The Problem statement

So let’s say 1 student takes 10 hours of sessions daily.
For a month it is 300 hours (10×30)
One hour zoom recording is approximately 300MB
So 300 hours of recording is 90,000MB.
ie ~ 100GB storage / month / student
Or ~ 1200GB storage / year / student

Now let’s assume each session can have around 100 students
So total storage is 12,000GB / year / class
ie. 12TB / year / class

Last but not the least, we can have multiple classes.

The impact

  1. The storage cost is comparatively high.
  2. There are some constraints of the header that is required to stream the recording in the iframe.

Proposed solution

For the problem statement, we came to a solution to have our own storage (it could be AWS S3 or DigitalOcean Spaces Object Storage) and stream the recordings from there itself.

So, the next question is how we are going to move the recording from zoom storage? And this is not a single time migration, we need to move the recordings after each session/class.

So, the desired solution was a microservice that will be responsible for migrating each and every recording as soon as it is available at the zoom storage.

Here is the high-level architecture of the flow.

The workflow will be as

  1. The main application is communicating with the zoom currently, so we will fetch a downloadable URL from the zoom and store it in the application database.
  2. In step 2, the microservice makes a call to the main application for the new recordings which we didn’t move yet.
  3. In step 3, the microservice will be using the downloadable URL to download the recording to its file system.
  4. Once the download is complete,  the microservice will push it to the targeted storage space (AWS S3 / DigitalOcean SOS / other storage providers).
  5. Once the upload finish, fetch the last uploaded recording details and pass it to the main application to use the new URL.