#Designing a realtime audio/video conferencing service
## Features
Functionality to consider when considering tool/platform.
* topology
+ mesh (P2P)
all processing at end-points, participants limited by bandwidth
+ routing (SFU)
light server processing, participants limited by bandwidth
+ mixing (MCU)
heavy server processing
* stream efficiency - recipient
+ Support suspending select streams at receiving end
i.e. pause reception of stream (not just omit further processing it)
* stream efficiency - forwarding
+ Support [simulcast](https://webrtcglossary.com/simulcast/)
i.e. encode multiple streams that an SFU can "hop" between
+ Support spatial/temporal/quality [SVC](https://webrtcglossary.com/svc/)
i.e. encode a stream that an SFU can efficiently "slice" without recoding
* stream efficiency - source
+ Support suspending simulcast streams
+ Support [SCReAM](https://github.com/EricssonResearch/scream)
i.e. adapt encoding based on SCReAM feedback from stream remote end
* stream efficiency - conference admin or shared room setting
+ Skip video streams beyond a threshold of participants
+ Skip video streams tied to quiet audio streams
+ Skip streams of explicitly tagged non-speaker participants
+ Mix audio streams (not stream each individually)
* security
+ Support [PERC](https://webrtcglossary.com/perc/)
+ Support [ZRTP](https://en.wikipedia.org/wiki/ZRTP)
i.e. end-to-end encryption (not only client-to-server)
* meeting management
+ Personalized Meeting rooms
+ Scheduled/Meet-me Meetings
+ Instant/Direct Meetings
+ Presence Support
+ Recording
+ Text chat
+ Screen sharing
+ feedback on own audio level
+ feedback on encoding and streaming qualities
* conference management
+ Conference Recording
+ force-mute participants
+ "Raise a hand" for muted participants
* meeting room
+ Dual stream for dual screen
* Dial in from telephone
* Dial in from SIP audio-only
* Dial in from SIP with video
* Dial in from SIP with SIMPLE text chat
## See also
### Tools
[Janus Gateway](https://janus.conf.meetecho.com/)
WebRTC SFU/bridge/broker
written in C
[Mediasoup](https://mediasoup.org/)
WebRTC SFU
written in C
[Kurento](https://www.kurento.org/)
WebRTC MCU
written in C++
[drachtio](https://drachtio.org/)
SIP "SFU"
written in C++
[Licode](https://lynckia.com/licode/)
WebRTC MCU
written in C++
[Medooze SFU](https://github.com/medooze/sfu)
WebRTC SFU
written in Node.js
[Medooze WebRTC Media Server](https://github.com/medooze/media-server)
WebRTC/SIP MCU
written in C++
[SylkServer](https://sylkserver.com/)
SIP/XMPP Application Server
using Janus
written in Python
[Spreed WebRTC](https://github.com/strukturag/spreed-webrtc)
WebRTC SFU
written in NodeJS and Go
[Jitsi Videobridge](https://jitsi.org/jitsi-videobridge/)
XMPP SFU
written in Java
seems to require "plan B" SDP: https://github.com/jitsi/jitsi-meet/issues/4758
[Jigasi](https://jitsi.org/jitsi-meet/)
WebRTC bridge to Jitsi Videobridge
written in Java
[Red5 server](https://www.red5pro.com/)
WebRTC SFU
written in Java
[Ant Media Server](https://antmedia.io/)
WebRTC SFU
written in Java
(fork of Red5 server)
### Platforms
[multiparty-meeting](https://github.com/havfo/multiparty-meeting)
using Mediasoup
(and optionally drachtio and Kurento)
written in JavaScript
hosted at
[Jangouts](https://github.com/jangouts/jangouts)
using Janus
written in CoffeeScript
[tawk.space](https://github.com/invisible-college/tawk.space)
using Janus
written in CoffeeScript
hosted at
[SIP2SIP](https://ag-projects.com/sip2sip/)
using SylkServer and Janus
hosted at
and
[Roll Call](https://github.com/mikeal/roll-call)
audio-only
hosted at
[Spreed.ME](https://www.spreed.me/)
using Spreed WebRTC
[Nextcloud Talk](https://nextcloud.com/talk/)
using Spreed WebRTC
[Jitsi Meet](https://jitsi.org/jitsi-meet/)
using Jigasi and Jitsi Videobridge
hosted at
[Matrix](https://matrix.org/)
using Jigasi and Jitsi Videobridge
[BigBlueButton](https://bigbluebutton.org/)
using Kurento
written in Java
[mConf](http://mconf.org/)
using Kurento
written in Java and Ruby
[OpenMeeting](https://openmeetings.apache.org/)
written in Java
[Wire](https://wire.com/)
proprietary-protocol [Free Software](https://github.com/wireapp/wire) stack
written in Haskell, Rust, C
[Talky](https://about.talky.io/)
cloud SFU service
hosted at
[Me](https://join.me/)
cloud SFU service
GoToMeeting
cloud SFU service
[Zoom Meetings](https://zoom.us/)
cloud SFU service
supporting "up to 50 participants at once"
(but client bandwidth and resource demands and stability of such session is unknown)
Hangouts Meet
cloud SFU service
Webex Meetings
cloud SFU service
Wowza Streaming Cloud
cloud streaming service
Skype
cloud SFU service
suporting "up to 25 participants at once"
(but client bandwidth and resource demands and stability of such session is unknown)
MoxieMeet
cloud SFU service
requiring Google account
supporting "up to 32 users all on video together"
(but client bandwidth and resource demands and stability of such session is unknown)
TeamViewer
cloud SFU service