#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
### SFU
[Janus Gateway](https://janus.conf.meetecho.com/)
WebRTC SFU/bridge/broker
written in C
[Mediasoup](https://mediasoup.org/)
WebRTC SFU
written in C
[drachtio](https://drachtio.org/)
SIP "SFU"
written in C++
[Medooze SFU](https://github.com/medooze/sfu)
WebRTC SFU
written in Node.js
[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
### MCU
[Kurento](https://www.kurento.org/)
WebRTC MCU
written in C++
[Licode](https://lynckia.com/licode/)
WebRTC MCU
written in C++
[Medooze WebRTC Media Server](https://github.com/medooze/media-server)
WebRTC/SIP MCU
written in C++
[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)
### Bridge/management
[SylkServer](https://sylkserver.com/)
SIP/XMPP Application Server
using Janus
written in Python
[Jigasi](https://jitsi.org/jitsi-meet/)
WebRTC bridge to Jitsi Videobridge
written in Java
[Matrix](https://matrix.org/)
using Jigasi and Jitsi Videobridge
[BigBlueButton](https://bigbluebutton.org/)
using Kurento
written in Java
[OpenMeetings](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
### Web frontend
[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
[mConf](http://mconf.org/)
using Kurento
written in Java and Ruby
[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