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.
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.
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
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_EMAILfirstname.lastname@example.org
These will be used to generate SSL certs in the automated setup that runs next.
Step 5. Start the app
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.
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.