loading...
markdown guide
 

Hi Sarthak!

Jitsi, which is both a video conferencing app and a platform to build upon, is written mostly in Java (the server part). The rest is JavaScript, Obj-C, Kotlin... depending on the client.

Apache OpenMeetings is written in Java as well.

BigBlueButton is mostly written in Java and JavaScript (plus a Rails web frontend).

MConf seems to be mostly a fork of BigBlueButton

Zoom, video conferencing company, seems to be hiring C++ and Python developers for the server part.

Discord, AFAIK, uses Elixir, Python and Go on the server. Don't know which is used for what.

To keep things simple I think you could investigate WebRTC and use whatever you prefer on the server. The technology is built in the browsers, they need a server to signal their existence.

Google has a tutorial on how to build an app like that codelabs.developers.google.com/cod...

 

Well if you are making a web conference app, then you must learn WebRTC first to make it native and it's supported in all major browsers, android and IOS. (the languaje it's not really relevant atm)

So the next point you need to know is, how many people it's going to be in the conference one to one, one to many, many to many. The first, case one to one, it's the easiest solution, here you only need to set a STUN/TURN server and a signaling server, for the signaling server just use the backend you are more confortable to use, it's not a resource intensive work and you can find libraries for all the most famous frameworks and runtimes. In one to one all the communications it's peer to peer so not additional hardware it's required and bandwidth for users not requires to be very high.

Now for one to many and many to many, things starts to get complicated, since WebRtC network topology is fullmesh every user would upload (n-1) videos and recieve the same quantity if it's a many to many configuration. You start to see the problem here if the bandwidth of the video is 500 kbits/sec for a five people conference every user should upload 2 mbit/sec and download the same, its seems that it's not much but many internet providers slow down the upload speed, and mobile users would get insane costs.

For this cases a media server it's required, to use a SFU or a MCU topology, there are many open source servers in this area:

Janus gateway (SFU/C)
Kurento (SFU/MCU/Java)
Jitsi (SFU/JAVA) (comes with client)
MediaSoup (SFU/Node/C++)
etc..

The media server comes with many challenges, like scalabilty, since most of these projects you would require to manually make your media server horizontally scalable and it's not an easy task.

Also there are many saas solutions for media server like Twilio programmable video,tokbox etc.

So this it's just the background, so coming back to your question, for the client vanilla JS would be enough or you can use your favorite framework and webrtc library.

For the signaling server Node, Go, Elixir, etc.. It's a very easy task doesn't require big resources, easy to scale, you can use a third party like firebase, pusher or pubnub.

For the media server there are not may options C or Java, Mediasoup use Node/Js but the media server is in C++. Jitsi comes with docker images, so yo can make your app in seconds but when scalability hits, things start to get ugly, and you would look the same as others.

 

Awesome comment, thanks for the info. I was wondering as well about many to many which webrtc doesn't seem to cover easily.

Even the idea of horizontally scaling a media streaming server seems like a huge deal! How do you deal with session affinity for example? What about slow clients?

Very fascinating!

 

This is a bit of a vague question that probably would work with a bit more spec.

In the beginning, I would probably use a 3rd party service & wrap it in your own apps because the streaming part is pretty unreliable & hard to do good QA on. The biggest video conferencing services still have problems so smaller ones always will.

Then you can focus on the quality of the apps & the user experience more/spend less.

Maybe something like digitalsamba.com/oem

Expertise: Streaming, not conferencing (but seems the same to me).

 

Golang leveraging webRTC with pion!

Why golang?
Because it's πŸ’―!

Why webRTC?
Because it's the πŸš€!

Why pion?
Because it's a great library with an amazing community!

 

For the record, I wouldn't say I'm an "expert" per se. Just wanted to give some suggestions.

WebRTC is a great place to start in general because it's pretty much becoming the standard of peer-to-peer connections in the Web. Furthermore, most devices nowadays support this technology, which is great. πŸ‘

If you need a very quick prototype, JavaScript and the WebRTC API is definitely one of the best options out there.

Though, from experience, a many-to-many architecture for WebRTC isn't exactly fun to implement.

 

I would go for Dood advice exacly.. I implement this before and it is powerfull! Im using JavaScript back to front.

But... If you want some expert advice they maybe suggest you with Elixir. Discord, Netflix, Whatsapp use it.

About elixir its an OTP language runs on BEAM Erlang VM, known for its robustness on handling million connection per-instance. See their talk you maybe interested.

To be precisely language matters but the architecture could safe the language.

And my apps now somehow arent booming fail on bussines.. so yeah i dont have anything to brag sorry about that.

Bonus :

If you have money maybe AWS streaming platform could help you

 

I would go with MERN (MongoDB + ExpressJS + React + NodeJS) stack, and webRTC.
Why? Because its all well documented...

 

hey can you tell me where is the docuementation for the same?

 

I cant link a complete documentation, regarding your project, but with the MERN stack or other JS based framework you can build this app, but you need strong understanding the whole architecture, on serverside as well as on client side, and everything between. Give some ride on google, you can find useful tutorials.

itried it but not getting useful result please guide me

I found this close enough, this might be a good start, to understand what is waiting for you. link.medium.com/J93clLxw5Y

 

The web welcomes all, even Google Duo uses Web Assembly to port the existing Echo Reduction Binaries.

Classic DEV Post from Nov 14 '19

Share your CSS knowledge

Sarthak Sharma profile image
JavaScript NerdπŸ‘¨πŸ»β€πŸ’»| PhilosopherπŸ§˜πŸ»β€β™‚οΈ | Life HackerπŸ”§ | Health enthusiastπŸ‹πŸ»β€β™‚οΈ

dev.to now has dark theme. 🌝

Go to the "misc" section of your settings and select night theme

P.S. It's the best move you can make for your dev career.