/ion

Distributed RTC System by pure Go and Flutter

Primary LanguageGoMIT LicenseMIT

ION is a distributed real-time communication system, the goal is to chat anydevice, anytime, anywhere!

MITBuild StatusGo Report CardGitHub go.mod Go versionGitHub tag (latest SemVer pre-release)Docker PullsFinancial Contributors on Open Collective GitHub contributorsTwitter Followslack


Distributed Real-time Communication System

  • ION is a secure, self-hosted WebRTC video conferencing SFU (what is an SFU?), that you can host today in the cloud or on-premise.
  • This ION repository contains the backend cluster services, so you also need to deploy the web app or install a flutter client for web, desktop or mobile
  • ION's mission is to deliver world-class tools for creating communication systems, and many people build their projects on top of it:
    • ION Cluster (This project!) is composed of two services biz + ISLB (see glossary) and uses NATS, etcd and redis as databases to administer room membership, manage text chat, verify JWT authentication and assign clients to the proper SFU in a multi-datacenter architecture. ION Cluster also builds its own version of ion-sfu binary, which is lightly adapted to use NatsRPC for signaling (which is how biz and ISLB trade messages internally).
    • ion-sfu (external), which handles WebRTC streams, can be used as a standalone SFU for designing custom chat experiences or implementing your own scaling architecture. ion-sfu is equally capable of forwarding Video, Audio and DataChannel tracks, and can handle arbitrary non-media data transport.
    • ion-avp Audio/Video Processing (WIP) is a sidecar utility for running realtime AV processing jobs, including write-to-disk, ffmpeg and openCV
    • ion-live LIVE node (planned) - A feed streaming gateway for supporting publishing to and from SIP/RTMP/HLS/RTSP endpoints
  • All built with pion and golang, ION is fast and efficient
  • ION is a young project, under active development; some people run ION in production, but it's not for everyone (yet)
  • ION is a community effort and relies on volunteers like you and me!

Roadmap

NOV24 STATUS UPDATE: The ion project has been undergoing a major restructuring for a few months! If you want to build on top of ion today, you should start with ion-sfu! You can still deploy ion:0.4.6 as a ready-to-go conference demonstration.

arch

❤️Sponsor to help this awsome project go faster!🚀

(https://opencollective.com/pion-ion)

You can vote for feature if you are a sponsor.

Features: https://github.com/pion/ion/projects/2

Quick-Start (LOCALHOST ONLY)

NOTE: Do not attempt to run this example on a VPS, it only works on localhost. Make sure you read the docs; WebRTC requires some specific network configuration for the SFU service (depending on your host), and the JavaScript GetUserMedia() API can only request camera access on pages with SSL (or localhost). If you are not running on localhost, you MUST configure networking for SFU and enable HTTPS for ion-app-web.

1. Run Ion Backend Services

After cloning the folder, create a docker network (we use this so ion-app-web can communicate securely with the backend):

docker network create ionnet

docker-compose up

3. Expose Ports

Ensure the ports 5000-5200/udp are exposed or forwarded for the SFU service;

4. UI (optional)

Head over to Ion Web App to bring up the front end.

The web app repo also contains examples of exposing the ion biz websocket via reverse proxy with automatic SSL.

For dev and more options see the wiki

Documentation

Architecture

arch

Maintainers

Contributors

Original Author: adwpc cloudwebrtc

Community Hero: Sean-Der