From 0cef4b1c7886851397cfe24329b3b65d6e350534 Mon Sep 17 00:00:00 2001 From: Jonas Smedegaard Date: Tue, 24 Mar 2020 19:39:40 +0100 Subject: categorize options as good, bad, or ugly; move sections Features and Platforms to document DEVELOPMENT.md --- DEVELOP.md | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 182 +++++++++++++++++++------------------------------------------ 2 files changed, 235 insertions(+), 127 deletions(-) create mode 100644 DEVELOP.md diff --git a/DEVELOP.md b/DEVELOP.md new file mode 100644 index 0000000..ff67ed1 --- /dev/null +++ b/DEVELOP.md @@ -0,0 +1,180 @@ +#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 source efficiency + + 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 + + Support suspending simulcast streams + + + Support [SCReAM](https://github.com/EricssonResearch/scream) + * security + + Support [PERC](https://webrtcglossary.com/perc/) + + Support [ZRTP](https://en.wikipedia.org/wiki/ZRTP) + * stream forwarding efficiency + * meeting management + + Personalized Meeting rooms + + Scheduled/Meet-me Meetings + + Instant/Direct Meetings + + Presence Support + + Recording + + Text chat + + Screen sharing + * conference stream efficiency + + Skip video streams beyond a threshold of participants + + Skip video streams tied to quiet audio streams + + Skip streams of explicitly tagged non-speaker participants + * 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 WebRTC Media Server](https://github.com/medooze/media-server) +WebRTC/SIP MCU +written in C++ + +[SylkServer](https://sylkserver.com/) +SIP "SFU" +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 + +[Jigasi](https://jitsi.org/jitsi-meet/) +WebRTC bridge to Jitsi Videobridge +written in Java + +### 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 + +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 diff --git a/README.md b/README.md index 9923797..c37ffa6 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,18 @@ > Use for now, and try avoid more than 6 video streams +This is an overview of realtime audio/video conferencing option, +categorized as "good", "bad" or "ugly" +based on how recommendable they are +both politically, technically and practically. -## Recommendations -Ideal would be to self-host, -but no such solutions are readyly available in Debian yet. -Current recommendation is therefore to use a cloud service -built with Free software, light on resources, -and realistic to fully self-host later if needed. +## Good + +"Good" options use open standards and Free software, +is realistic to self-host on cheap, small computers +(even if concrete instance might be cloud-based), +and are readily usable. Generally most reliable is , so use that unless you need a specific feature unavailable there. @@ -57,6 +61,17 @@ Includes text chat (crucial in case of audio trouble). +## Bad + +"Bad" options use Free software, +but either uses non-standard protocols, +is too heavy for small-scale self-hosting, +or does not really work reliably. + +These are only relevant if you need some specific feature, +or for inspiration when exploring what is possible. + + ### tawk.space No login. @@ -76,181 +91,94 @@ Includes text-based scratch-space. Includes per-participant pointer. -## 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 source efficiency - + 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 - + Support suspending simulcast streams - - + Support [SCReAM](https://github.com/EricssonResearch/scream) - * security - + Support [PERC](https://webrtcglossary.com/perc/) - + Support [ZRTP](https://en.wikipedia.org/wiki/ZRTP) - * stream forwarding efficiency - * meeting management - + Personalized Meeting rooms - + Scheduled/Meet-me Meetings - + Instant/Direct Meetings - + Presence Support - + Recording - + Text chat - + Screen sharing - * conference stream efficiency - + Skip video streams beyond a threshold of participants - + Skip video streams tied to quiet audio streams - + Skip streams of explicitly tagged non-speaker participants - * 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 WebRTC Media Server](https://github.com/medooze/media-server) -WebRTC/SIP MCU -written in C++ - -[SylkServer](https://sylkserver.com/) -SIP "SFU" -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 - -[Jigasi](https://jitsi.org/jitsi-meet/) -WebRTC bridge to Jitsi Videobridge -written in Java - -### 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 [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 [Jitsi Meet](https://jitsi.org/jitsi-meet/) using Jigasi and Jitsi Videobridge hosted at + +### Matrix + [Matrix](https://matrix.org/) using Jigasi and Jitsi Videobridge + +### BigBlueButton + [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 [Wire](https://wire.com/) proprietary-protocol [Free Software](https://github.com/wireapp/wire) stack written in Haskell, Rust, C + +## Ugly + +"Ugly" options use proprietary software. + +Avoid them, they are bad for society. + +### Talky + [Talky](https://about.talky.io/) cloud SFU service hosted at +### Me + [Me](https://join.me/) cloud SFU service -GoToMeeting +### GoToMeeting + cloud SFU service +### Zoom + [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 + Hangouts Meet cloud SFU service +### Webex + Webex Meetings cloud SFU service +### Skype + 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 + 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 + TeamViewer cloud SFU service -- cgit v1.2.3