@prefix adms: . @prefix dc: . @prefix dcat: . @prefix doap: . @prefix doap-deps: . @prefix foaf: . @prefix owl: . @prefix rdfs: . @prefix skos: . @prefix spdx: . #This document uses turtle-flavored markdown comments: #Lines beginning with "# " is markdown, modulo those characters. #Markdown "[QName]" considers homepage-ish nodes of QName for linking. #Markdown "[:QName]" expands to RDF nodes of QName as human sentences. #Markdown "[SELECT {...}]" expands to SPARQL result as human paragraphs. #Markdown "[{...}]" expands to "[SELECT * WHERE {...}]", human sorted. # # WebRTC # WebRTC is the contemporary open standard for realtime media streaming. # # This document identifies WebRTC parts and integrations # and their qualities related to usability and sustainability. # # ## Usability # # WebRTC consists of multiple parts, # each crucial for a good user experience. # # A good user experience should not only be here and now, # but also into the future and for everyone. # Qualities related to sustainability include # collaboration (Free software and open standards), # resilience and maintainability (e.g. software distribution integration), # and footprint (e.g. electricity, memory, and computation consumption). :component a skos:Concept; skos:prefLabel "WebRTC Component"; dc:description """ Tool or service doing a specific task, e.g. transcoding RTP streaming between WebRTC-compatible and other formats. """. :framework a skos:Concept; skos:prefLabel "WebRTC Framework"; dc:description """ Set of tools and/or integrations with external components, for providing a coherent developer interface for building platforms and/or services. """. :platform a skos:Concept; skos:prefLabel "WebRTC Platform"; dc:description """ Set of tools and/or integrations with external components, for providing a coherent user-facing application as a service. """. :service a skos:Concept; skos:prefLabel "WebRTC Service"; dc:description """ Coherent user-facing application provided as a service. """. # ### Services # # [:service] # # [{ ?project doap:category :service }] # ### Platforms # #TODO: generate short "see above" entries instead # [:platform] # See also above for platforms also provided as a service. # # [{ ?project doap:category :mixing MINUS { ?project doap:category :routing } }] :janus a dcat:Dataset, doap:Project; doap:name "Janus"; doap:shortdesc "general purpose WebRTC server/gateway"; doap:category :framework; doap:homepage ; doap:download-page ; doap:license :gpl_3; doap:programming-language "C", "JavaScript"; doap:implements :sfu. :mediasoup a dcat:Dataset, doap:Project; doap:name "Mediasoup"; doap:shortdesc "WebRTC selective forwarding unit (SFU)"; doap:category :framework; doap:homepage ; doap:download-page ; rdfs:seeAlso ; doap:license :isc; doap:programming-language "C++", "TypeScript"; doap:implements :cc-remb, :sfu. :medooze a dcat:Dataset, doap:Project; doap:name "Medooze SFU"; doap:shortdesc "WebRTC selective forwarding unit (SFU)"; doap:category :framework; doap:homepage ; doap:download-page ; doap:license :expat; doap:programming-language "C++", "JavaScript"; doap:implements :sfu, :mcu. :spreed a dcat:Dataset, doap:Project; doap:name "Spreed WebRTC"; doap:shortdesc "WebRTC audio/video call and conferencing server"; doap:category :routing; doap:download-page ; doap:license :agpl_3; doap:programming-language "Go", "JavaScript"; doap:implements :sfu. :jitsi-videobridge a dcat:Dataset, doap:Project; doap:name "Jitsi Videobridge"; doap:shortdesc "WebRTC compatible video router or SFU"; dc:comment "Seems biased towards XMPP-based signalling.", "Seems biased towards [plan B][legacy-planb]."; doap:category :routing; doap:homepage ; doap:download-page ; rdfs:seeAlso , ; doap:license :apache_2; doap:programming-language "Java", "JavaScript"; doap:implements :cc-gcc, :sfu, :xmpp-colibri. :kurento-kms a dcat:Dataset, doap:Project; doap:name "Kurento Media Server"; doap:shortdesc "WebRTC Media Server"; doap:category :framework; doap:homepage ; doap:download-page ; rdfs:seeAlso ; doap:license :apache_2; doap:programming-language "C++"; doap:implements :mcu, :sfu. :licode a dcat:Dataset, doap:Project; doap:name "Licode"; doap:shortdesc "WebRTC Communications Platform"; doap:category :framework; doap:homepage ; doap:download-page ; doap:license :expat; doap:programming-language "C++", "JavaScript"; doap:implements :mcu, :sfu. :openvidu a dcat:Dataset, doap:Project; doap:name "OpenVidu"; doap:shortdesc "platform to facilitate the addition of video calls in your web or mobile application"; doap:category :platform; doap:homepage ; doap:download-page ; doap:license :apache_2; adms:includedAsset :kurento-kms; doap:programming-language "Java", "TypeScript"; doap:implements :sfu. :red5 a dcat:Dataset, doap:Project; doap:name "Ant Media Server"; doap:shortdesc "WebRTC SFU"; doap:category :component; doap:homepage ; doap:download-page ; doap:license :apache_2; doap:programming-language "Java"; doap:implements :sfu. :ant a dcat:Dataset, doap:Project; doap:name "Red5 Server"; doap:shortdesc "WebRTC SFU"; dc:comment "Fork of [Red5 Server][red5]."; doap:category :component; doap:homepage ; doap:download-page ; doap:license :apache_2; doap:programming-language "Java"; doap:implements :sfu. :medooze a dcat:Dataset, doap:Project; doap:name "Medooze media-server"; doap:shortdesc "WebRTC media server"; doap:category :mixing; doap:homepage ; doap:download-page ; doap:license :gpl_2; doap:programming-language "C++", "JavaScript"; doap:implements :cc-transport, :priv-perc, :mcu. # ### Bridging # # [:bridging] # Tools also doing WebRTC streaming are excluded here # (see above listings). # # [{ ?project doap:category :mixing MINUS { ?project doap:category :routing . ?project doap:category :mixing } }] :sylk-server a dcat:Dataset, doap:Project; doap:name "SylkServer"; doap:shortdesc "SIP/XMPP Application Server"; dc:comment "Code is Python 2.x, a language dialect obsoleted upstream."; doap:category :platform; doap:homepage ; doap:download-page ; doap:license :gpl_3; adms:includedAsset :janus; doap:programming-language "Python"; doap:implements :sip, :xmpp, :sfu. :jitsi-jigasi a dcat:Dataset, doap:Project; doap:name "Jigasi"; doap:shortdesc "WebRTC bridge to Jitsi Videobridge"; doap:category :component; doap:download-page ; doap:license :apache_2; doap:programming-language "Java"; # doap:implements :webrtc-transcoder. :matrix-synapse a dcat:Dataset, doap:Project; doap:name "Matrix-Synapse"; doap:shortdesc "Federated text chat with WebRTC direct chat and optional WebRTC conferencing"; doap:category :platform; doap:download-page ; doap:license :apache_2; doap:programming-language "Python"; doap:implements :matrix, :webrtc-p2p. :bigbluebutton a dcat:Dataset, doap:Project; doap:name "BigBlueButton"; doap:shortdesc "web conferencing system for online learning"; dc:comment "Uses Kurento Media Server only for one-way streaming, and locally implemented SFU."; doap:category :platform; doap:homepage ; doap:download-page ; rdfs:seeAlso , ; doap:license :lgpl_3; adms:includedAsset :kurento-kms; doap:programming-language "Java"; doap:implements :sfu. :openmeetings a dcat:Dataset, doap:Project; doap:name "OpenMeetings"; doap:shortdesc "Collaboration Platform"; dc:comment """ Uses Kurento Media Server and Red5 only for one-way streaming, and locally implemented SFU. SFU was first introduced with release 5.0.0-M3 on 2019-12-16. """; doap:category :platform; doap:homepage ; doap:download-page ; rdfs:seeAlso , ; doap:license :apache_2; adms:includedAsset :kurento-kms, :red5; doap:programming-language "Java", "JavaScript"; doap:implements :sfu. Wire Audio Video Signaling - [Wire](https://wire.com/) Application Server using for [MLS](https://messaginglayersecurity.rocks/), and using internal FIXME for WebRTC SFU, written in Haskell, Rust, C, FIXME. ### Web frontend [mediasoup-demo](https://github.com/versatica/mediasoup-demo) using Mediasoup written in JavaScript hosted at [multiparty-meeting](https://edumeet.org/) at [Github](https://github.com/havfo/multiparty-meeting) using Mediasoup (and optionally drachtio and Kurento Media Server), written in JavaScript hosted at and [Jangouts](https://github.com/jangouts/jangouts) using Janus, written in CoffeeScript [Roomler](https://github.com/gjovanov/roomler) using Janus, written in VueJS hosted at [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 Media Server written in Java and Ruby [Veeting](https://veeting.com/) cloud SFU service using Janus hosted at (free trial at ) [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 # ## specs # ### Topology :sfu a doap:Specification; skos:prefLabel "Selective Forwarding Unit"; skos:altLabel "SFU"; rdfs:seeAlso . :mcu a doap:Specification; skos:prefLabel "Multipoint Conferencing Unit"; skos:altLabel "MCU"; rdfs:seeAlso . # ### Integration :xmpp-colibri a doap:Specification; skos:prefLabel "XMPP COLIBRI"; foaf:homepage . # ### Congestion Control :cc a skos:Concept; skos:prefLabel "Congestion Control"; rdfs:seeAlso , , , , . :cc-transport a doap:Specification; skos:prefLabel "RTP Transport-wide Congestion Control"; skos:altLabel "Google Transport-wide Congestion Control", "transport-cc", "TWCC"; dc:comment """ Supported for bundled streams in Gecḱo-based web browsers since mozilla/76. """; rdfs:seeAlso , ; foaf:homepage . # #### Sender side bitrate estimation :cc-gcc a doap:Specification; skos:prefLabel "Google Congestion Control"; skos:altLabel "GCC"; foaf:homepage . :cc-nada a doap:Specification; skos:prefLabel "Network-Assisted Dynamic Adaptation"; skos:altLabel "NADA"; sioc:previous_version ; foaf:homepage ; owl:sameAs . :cc-scream a doap:Specification; skos:prefLabel "Self-Clocked Rate Adaptation for Multimedia"; skos:altLabel "SCReAM"; rdfs:seeAlso ; sioc:previous_version ; foaf:homepage ; owl:sameAs . :cc-tmmbr a doap:Specification; skos:prefLabel "Temporary Maximum Media Stream Bit Rate Request"; skos:altLabel "TMMBR"; rdfs:seeAlso , ; foaf:page . # #### Receiver side bitrate estimation :cc-remb a doap:Specification; skos:prefLabel "Receiver Estimated Maximum Bitrate"; skos:altLabel "REMB"; skos:altLabel "goog-remb"; rdfs:comment: """ Seemingly abandoned in libwebrtc and dropped since Firefox 96. """ rdfs:seeAlso , ; foaf:homepage . # ### Codec :codec a skos:Concept; skos:prefLabel "Codec". :codec-vp8 a doap:Specification; skos:prefLabel "VP8"; dc:abstract "VP8 is a roualty-free video codec, mandatory part of the WebRTC specification."; rdfs:comment: """ Performance is notoriously weak on operating system iOS, likely related to Apple investments in the directly competing royalty-based codec H.264. """ rdfs:seeAlso , , . # ### Compatibility :legacy a skos:Concept; skos:prefLabel "Legacy". :legacy-blink a doap:Specification; skos:prefLabel "Legacy Blink"; dc:abstract "Adequate quirks to work around WebRTC violations in Blink" dc:comment """ The web browser engine Blink (used e.g. in Google Chrome and Chromium) introduced WebRTC before it was formally defined, and the later definition changed at several places where the Blink codebase didn't adjust even after 5-10 years. Some tools not explicitly tracking Blink issues might implicitly have hardcoded non-standard Blink protocols and fail subtly for other clients implementing \"by the book\". """ rdfs:seeAlso . :legacy-gecko a doap:Specification; skos:prefLabel "Legacy Gecko"; dc:abstract "Adequate quirks to work around WebRTC violations in Gecko" rdfs:seeAlso , , , , . :legacy-webkit a doap:Specification; skos:prefLabel "Legacy WebKit"; dc:abstract "Adequate quirks to work around WebRTC violations in WebKit" dc:comment """ The web browser engine WebKit (used e.g. in Apple Safari and GNOME Web) has a notoriously buggy WebRTC implementation, needing several workarounds for anything but simple things like one-way streaming or 1-to-1 meetings. Only tools paying special attention to WebKit or Safari or iOS are likely to provide a decent experience in WebKit-based environments. """ rdfs:seeAlso ; . # ### Privacy :priv a skos:Concept; skos:prefLabel "Privacy". rdfs:seeAlso , . :priv-mdns a doap:Specification; skos:prefLabel "Using Multicast DNS to protect privacy when exposing ICE candidates"; rdfs:seeAlso . :priv-mls a doap:Specification; skos:prefLabel "Messaging Layer Security (MLS)"; rdfs:seeAlso , , . sioc:previous_version , ; foaf:page , , . :priv-perc a doap:Specification; skos:prefLabel "Privacy Enhanced RTP Conferencing (PERC)"; rdfs:seeAlso , , , . # ### Redundancy :resilience a skos:Concept; skos:prefLabel "Resilience"; rdfs:seeAlso . :red a doap:Specification; skos:prefLabel "Redundant Audio Data (RED)"; rdfs:seeAlso ; sioc:previous_version ; foaf:homepage ; owl:sameAs . :rtp-rtx a doap:Specification; skos:prefLabel "RTP Retransmission Payload Format (RTX)"; dc:description """ RTP packet retransmission allows a client to request retransmission of an RTP packet if they determine that it has been lost. It is up to their own logic to determine when they request this to be done. The request is done using a NACK RTCP feedback message. If the packet is in the history of the sender it is then resent. In the case of Chrome it is sent using RFC4588 (if negotiated) which encapsulates the retransmitted packet and sends it on a separate stream. In the case of Firefox (before release 76) the packet is resent as-is. """; dc:comment """ Description based on Asterisk note. Seems interoperability issues involving lack of RTX support may hide additional flaws at the other side: Allegedly packets sent as-is (not tagged as per RFC4588) got ignored by Microsoft Edge (in 2018) perhaps due to Microsoft Edge using non-compliant SDP \"plan B\" format; from comment in Mozilla bug #1164187: \"Edge doesn't retransmit at all if the receiver does not support required ssrc multiplexed rtx\". """; rdfs:seeAlso , , , , . sioc:previous_version ; foaf:homepage ; owl:sameAs . # ### Signalling :matrix a doap:Specification; skos:prefLabel "Matrix"; # rdfs:seeAlso . :sip a skos:Concept; skos:prefLabel "SIP"; rdfs:seeAlso . :xmpp a skos:Concept; skos:prefLabel "XMPP"; rdfs:seeAlso . # ### Session Description :sdp-jsep a doap:Specification; skos:prefLabel "JSEP"; dc:abstract "Javascript Session Establishment Protocol (JSEP)"; dc:description "Official WebRTC SDP syntax for signalling media sources, also known as \"unified plan\"."; dc:comment """ Unified plan was initially proposed in draft-roach-mmusic-unified-plan-00, which was absorbed into draft-roach-mmusic-unified-plan and became IETF RFC 4588. Used in Gecko-based web browsers. Used in recent WebKit-based web browsers. Used in recent Blink-based web browsers (since release 72). """; rdfs:seeAlso , ; sioc:previous_version ; foaf:page ; foaf:homepage ; owl:sameAs . :sdp-planb a doap:Specification; skos:prefLabel "SDP \"plan B\""; dc:abstract "unofficial legacy \"plan b\" WebRTC SDP syntax for signalling multiple media sources"; dc:comment """ Historically used in WebKit-based web browsers. Supported in Blink-based web browsers (but unused by default since release 72). """; rdfs:seeAlso , ; foaf:homepage . # ## licenses :agpl_3 a spdx:License; spdx:licenseId "AGPL-3.0"; owl:sameAs . :apache_2 a spdx:License; spdx:licenseId "Apache-2.0"; owl:sameAs . :expat a spdx:License; spdx:licenseId "MIT"; owl:sameAs . :gpl_2 a spdx:License; spdx:licenseId "GPL-2.0"; owl:sameAs . :gpl_3 a spdx:License; spdx:licenseId "GPL-3.0"; owl:sameAs . :isc a spdx:License; spdx:licenseId "ISC"; owl:sameAs . :lgpl_3 a spdx:License; spdx:licenseId "LGPL-3.0"; owl:sameAs .