Question

Self-Hosted Video Conferencing: Options, Pros and Cons, Setup Guides

Posted March 25, 2020 7.8k views
Applications

With COVID-19 forcing many of us to work from home, we are all using video-conferencing software a lot more nowadays.

I know of the “as a service” providers like ZOOM, Google Hangouts (or Meet) etc… But what are my options if I am interested in self-hosting video conferencing software?

To keep this structured, it would be great if for each answer: pick a specific software (Jitsi, Big Blue Button, more?) and cover:

  • Overview - what was your overall impression?
  • Pros and Cons - What strengths and weaknesses did it have?
  • Install Process - What was the setup process (even a quick walkthrough is fine)

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

×
2 answers

ION

I’ll cover a relatively new project called ion, it is described as a “Distributed RTC System using Go and Flutter”

GitHub Link: https://github.com/pion/ion

Here are some of the advantages of ion, as listed by one of the core contributors:

  • Distributed by default - Designed to allow running different workloads and scaling them out as you need
  • Flutter and JS SDK - Ready to be used on Web, Android and iOS!
  • Designed to be modified - Modify the UI/Backend so you can have custom experiences for your use cases. As long as you satisfy public APIs any piece can be swapped.
  • Easy to deploy - docker-compose with LetsEncrypt support. Spin up a conference server with on command
  • Performant - You can run multi person conference calls on AWS free tier instances
  • A joy to develop - Pure Go means quick builds, and a code base that anyone can contribute too!
  • Community owned - The only thing driving the project is the contributors and users

To test, I installed it on a $15 3 CPU/1GB RAM/60GB SSD Droplet with the DigitalOcean Docker One-Click image.

Prerequisites

Because the developers have containerized everything in Docker, the only software you need pre-installed is:

  • git - so you can clone the repo
  • docker - the app runs in docker containers
  • docker-compose - the app is started via a docker-compose script

The last prerequisite is *a domain *to point to your server. Without a domain, you can’t easily connect via HTTPS, and some browsers block audio/video features on HTTP connections.

Installation

here’s a 2 minute video walkthrough of installation

Step 1. Create a server

With git, Docker, and docker-compose installed. If you’re using DigitalOcean the Docker One-Click has all this, if you’re installing from scratch you can reference how to install git and how to install docker

Step 2. Point a domain to your server

One magical feature of ion is that if you are using a domain, the startup process uses Let’s Encrypt to automatically generate SSL certs for the app. This step is important because some modern browsers will block video/audio streaming on non-secure (HTTP) connections.

Step 3. Clone the ion repo

use git to clone the latest version of the ion codebase onto your server, once it is complete, move to the new ion directory.

  • git clone https://github.com/pion/ion
  • cd ion

Step 4. Set ENV Vars

Specify your domain and email address to use in the Let’s Encrypt registration process via environment variables

  • export WWW_URL=yourdomain.com
  • export ADMIN_EMAIL=your@email.com

These will be used to generate SSL certs in the automated setup that runs next.

Step 5. Start the app

via docker-compose:

  • docker-compose up

This will start the app and log all output of all containers to your commandline, exiting via the commandline will stop the app. If you want to run it in the background you can use docker-compose up -d for daemon mode.

Step 6. Access the app

Once you see in the logs that the app has been successfully initialized (sometimes the Let’s Encrypt process can take a couple minutes) access the site at https://yourdomain.com:8080. You should see a login screen where you enter a room name, and your nickname.

Depending on your browser, you’ll need to grant access to camera and microphone, and enable video autoplay.

At this point ion behaves very much like most video conferencing apps, you can generate a share link to send others, you can mute/unmute and turn video on and off, and message other participants via text.

Conclusion

ion looks very good, especially for those who are interested in developing something more on top of an open source video conferencing stack, and those who are interested in running video conferencing with limited resources.

Upon first impression, it stands out from the others in that the software uses very low amount of resources.

One part that I still need to dig into is how is the video streamed. When video conference software fully utilizes webRTC, each video stream is just going peer-to-peer instead of through the server, and conferences with more than 4 participants can quickly overwhelm a good internet connection.

  • Hey,

    I’ve deployed Ion as well on the basic $5 droplet and setup was a breeze. I am experiencing quality issues with even just 2-3 participants with hung video so I am looking into that. If you have any suggestions, please let me know.

    I didn’t quite understand your last point about streaming videos with more than 4 participants. Ion mentions that it can support 1000 participants. It seems to be using a SFU and should not be setting up so many peer to peer connections right?

    • Thanks for the reply @anantSeal - SFU is exactly the term and concept that I was missing.

      this site has an amazing explainer: https://webrtcglossary.com/sfu/

      I had no issues with 3 participants, but I’d be curious to see what cpu and network utilization looks like on the VM.

      I’ll run another test myself, but do let me know if you figure anything out!

Big Blue Button (BBB)

In my opinion, ZOOM is a great solution, it has a free option that lets you host meetings and it is quite intuitive to use. The downside of Zoom is the fact that it has a limit of 40 minutes in case you have a meeting with 3 or more people. In this case, if you want to have a longer meeting and not have your conference drop every 40 minutes you need to pay for a subscription.

On the other side there are opensource projects like BigBlueButton (BBB for short) which allow you to host your own conferencing solution and have better control over your conferences and not have to create a new meeting every 40 minutes.

Some of the features why I think it is worth giving BBB a try are:

  • Chat with public and private messages

  • Hosting visual meetings with your webcams

  • Screen sharing

  • Polling - ask your users questions at any time

  • Multi-user whiteboard - I think that this is amazing as you can draw together and have an actual interactive meetings

In my opinion, BigBlueButton is a great open-source web conferencing system that you can install on a Ubuntu 16.04 64-bit Droplet. The main downside is that it requires quite a bit of resources, for example, you need a Droplet with at least 4GB of RAM and even they recommend that it is much better to go for 8GB of RAM initially.

One of the great things about BBB is they provide you with an installation script that you could use to automate the deployment. The installation process usually takes around 30 minutes or so.

Prerequisites

Installation

I would recommend using the [bbb-install.sh](https://github.com/bigbluebutton/bbb-install) to let you have a server up and running within 30.

To do that, first SSH to your Droplet, and then run:

  • wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -v xenial-220 -a

This command would install BBB without an SSL certificate. If you would like to install BigBlueButton with an SSL you could use the following command instead:

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -v xenial-220 -s bbb.example.com -e info@example.com

Note that you would need to have your domain name pointed to your Droplet’s IP address in order for the above to work.

Note: This would work only on Ubuntu 16.04, if you try to run this on Ubuntu 18.04, for example, you will get the following error:

bbb-install: You must run this command on Ubuntu 16.04 server.

As described in their official documentation, the command above, will download the latest version of bbb-install.sh installation script, send it to the BASH shell interpreter, and pass the parameters -v xenial-220 which specifies you want to install the latest build BigBlueButton 2.2 version, and -a which specifies want to install the API demos (this makes it easy to do a few quick tests on the server).

The whole process could take up to 30 minutes, so you might want to run this in a screen session in case your SSH connection drops. You can take a look at this article on how to do that:

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-screen-on-an-ubuntu-cloud-server

For more information on the process you could take a look at the official documentation here:

https://github.com/bigbluebutton/bbb-install

There is actually an official video tutorial from BBB on how to install it on DigitalOcean:

Conclusion

This is one way of hosting your own video conferencing solution and having full control over your infrastructure. BigBlueButton is feature-rich solution that could help your organization or school have productive meetings during periods of social distancing like the current situation.

Feel free to share other self-hosted conferencing solutions as well!

Hope that this helps!
Regards,
Bobby

by Justin Ellingwood
In this article, we will discuss how to install and use "screen", a tool that allows you to manage multiple shell sessions inside a single terminal. The screen program is very useful for multi-tasking in an ssh environment, due to its ability to resume terminal sessions and perform multiple-concurrent tasks.
edited by AHA
Submit an Answer