WebRTC

Aus besserwiki.de
WebRTC
WebRTC Logo.svg
Ursprüngliche(r) Autor(en) Justin Uberti
Peter Thatcher
Erste Veröffentlichung 2011; vor 11 Jahren
Stabile Version
1.0 / 4. Mai 2018; vor 4 Jahren
Repository webrtc.googlesource.com
Geschrieben in. C++, JavaScript
Standard(s). w3.org/TR/webrtc/
Lizenz BSD-Lizenz
Website webrtc.org

WebRTC (Web Real-Time Communication) ist ein freies und quelloffenes Projekt, das Webbrowsern und mobilen Anwendungen Echtzeitkommunikation (RTC) über Anwendungsprogrammierschnittstellen (APIs) ermöglicht. Es ermöglicht die Audio- und Videokommunikation innerhalb von Webseiten, indem es eine direkte Peer-to-Peer-Kommunikation ermöglicht, ohne dass Plugins installiert oder native Anwendungen heruntergeladen werden müssen. WebRTC wird von Apple, Google, Microsoft, Mozilla und Opera unterstützt und die Spezifikationen wurden vom World Wide Web Consortium (W3C) und der Internet Engineering Task Force (IETF) veröffentlicht.

Laut der Website webrtc.org besteht der Zweck des Projekts darin, "die Entwicklung reichhaltiger, qualitativ hochwertiger RTC-Anwendungen für den Browser, mobile Plattformen und IoT-Geräte zu ermöglichen und sie alle über einen gemeinsamen Satz von Protokollen kommunizieren zu lassen".

Dies ermöglicht Anwendungen wie Videokonferenz, Dateitransfer bzw. Datenübertragung, Chat und Desktopsharing. Für die Herstellung einer Verbindung zwischen den beteiligten Clients ist ein Webserver (mit oder ohne Benutzerverwaltung) erforderlich sowie im Fall von Clients in privaten IPv4-Adressbereichen hinter NAPT-Routern auch die Feststellung von deren öffentlichen IP-Adressen und Portnummern (zum Beispiel durch einen STUN-Server).

Die Referenzimplementierung wird als freie Software im Quellcode unter den Bedingungen einer BSD-artigen Lizenz verbreitet. OpenWebRTC stellt eine weitere freie Implementierung auf Basis des Multimedia-Frameworks GStreamer dar, das sich besonders für Browser-unabhängige, native Anwendungen eignen soll und auch H.264 unterstützt.

Geschichte

Im Mai 2010 kaufte Google Global IP Solutions (GIPS), ein Unternehmen für VoIP- und Videokonferenzsoftware, das viele für RTC erforderliche Komponenten wie Codecs und Techniken zur Echounterdrückung entwickelt hatte. Google stellte die GIPS-Technologie als Open Source zur Verfügung und setzte sich mit den einschlägigen Normungsgremien der IETF und des W3C auseinander, um einen Branchenkonsens zu erreichen. Im Mai 2011 veröffentlichte Google ein Open-Source-Projekt für browserbasierte Echtzeitkommunikation, WebRTC genannt. Im Anschluss daran wurde an der Standardisierung der entsprechenden Protokolle in der IETF und der Browser-APIs im W3C gearbeitet.

Im Januar 2011 erstellte Ericsson Labs die erste Implementierung von WebRTC unter Verwendung einer modifizierten WebKit-Bibliothek. Im Oktober 2011 veröffentlichte das W3C seinen ersten Entwurf für die Spezifikation. Zu den Meilensteinen von WebRTC gehören der erste browserübergreifende Videoanruf (Februar 2013), die ersten browserübergreifenden Datenübertragungen (Februar 2014), und seit Juli 2014 verwendet Google Hangouts WebRTC "irgendwie".

Der W3C-Entwurf der API basierte auf Vorarbeiten der WHATWG. Sie wurde als ConnectionPeer-API bezeichnet, und bei Ericsson Labs wurde eine Konzeptimplementierung vor den Standards erstellt. Die WebRTC-Arbeitsgruppe geht davon aus, dass sich diese Spezifikation erheblich weiterentwickeln wird:

  • Ergebnisse des laufenden Austauschs in der begleitenden RTCWEB-Gruppe bei der IETF, um die Protokolle zu definieren, die zusammen mit diesem Dokument die Echtzeitkommunikation in Webbrowsern definieren. Obwohl kein bestimmtes Signalisierungsprotokoll vorgeschrieben ist, wird häufig SIP über WebSockets (RFC 7118) verwendet, was zum Teil auf die Anwendbarkeit von SIP für die meisten der geplanten Kommunikationsszenarien sowie auf die Verfügbarkeit von Open-Source-Software wie JsSIP zurückzuführen ist.
  • Datenschutzprobleme, die bei der Offenlegung lokaler Fähigkeiten und lokaler Streams auftreten
  • Technische Diskussionen innerhalb der Gruppe, insbesondere über die Implementierung von Datenkanälen
  • Erfahrungen aus ersten Experimenten
  • Feedback von anderen Gruppen und Einzelpersonen

Im November 2017 wurde die WebRTC 1.0-Spezifikation vom Working Draft zur Candidate Recommendation.

Im Januar 2021 ging die WebRTC 1.0-Spezifikation von der Candidate Recommendation zur Recommendation über.

Entwurf

Zu den wichtigsten Komponenten von WebRTC gehören mehrere JavaScript-APIs:

  • getUserMedia erfasst die Audio- und Videomedien (z. B. durch Zugriff auf die Kamera und das Mikrofon eines Geräts).
  • RTCPeerConnection ermöglicht die Audio- und Videokommunikation zwischen Peers. Sie führt Signalverarbeitung, Codec-Handling, Peer-to-Peer-Kommunikation, Sicherheit und Bandbreitenmanagement durch.
  • RTCDataChannel ermöglicht die bidirektionale Kommunikation beliebiger Daten zwischen Peers. Die Daten werden mit SCTP über DTLS transportiert. Es verwendet die gleiche API wie WebSockets und hat eine sehr geringe Latenz.

Die WebRTC-API enthält auch eine Statistikfunktion:

  • Mit getStats kann die Webanwendung eine Reihe von Statistiken über WebRTC-Sitzungen abrufen. Diese Statistikdaten werden in einem separaten W3C-Dokument beschrieben.

Die WebRTC-API enthält keine Bestimmungen für die Signalisierung, d. h. das Auffinden von Peers, mit denen eine Verbindung hergestellt werden soll, und die Festlegung, wie die Verbindungen zwischen ihnen aufgebaut werden sollen. Anwendungen verwenden Interactive Connectivity Establishment für Verbindungen und sind für die Verwaltung von Sitzungen verantwortlich, wobei sie sich möglicherweise auf eines der folgenden Protokolle stützen: Session Initiation Protocol, Extensible Messaging and Presence Protocol, Message Queuing Telemetry Transport, Matrix oder ein anderes Protokoll. Die Signalisierung kann von einem oder mehreren Servern abhängen.

RFC 7478 verlangt, dass Implementierungen die Audiocodecs PCMA/PCMU (RFC 3551), Telephone Event as DTMF (RFC 4733) und Opus (RFC 6716) als Mindestanforderungen bereitstellen. Die Browser-APIs PeerConnection, Datenkanal und Medienerfassung sind in der W3C-Spezifikation ausführlich beschrieben.

Das W3C entwickelt derzeit ORTC (Object Real-Time Communications) für WebRTC.

Anwendungen

WebRTC ermöglicht es Browsern, Dateien direkt zueinander zu streamen, wodurch die Notwendigkeit eines serverseitigen Datei-Hostings verringert oder ganz beseitigt wird. WebTorrent verwendet einen WebRTC-Transport, um Peer-to-Peer-Filesharing mit dem BitTorrent-Protokoll im Browser zu ermöglichen. Einige File-Sharing-Websites ermöglichen es den Nutzern, Dateien direkt in ihren Browsern aneinander zu senden, obwohl der Uploader die Registerkarte geöffnet lassen muss, bis die Datei heruntergeladen wurde. Einige CDNs, wie z. B. das Microsoft-eigene Peer5, nutzen die Bandbreite des Clients, um Medien zu anderen angeschlossenen Peers hochzuladen, so dass jeder Peer als Edge-Server fungieren kann.

Obwohl WebRTC ursprünglich für Webbrowser entwickelt wurde, gibt es auch Anwendungen für Nicht-Browser-Geräte, einschließlich mobiler Plattformen und IoT-Geräte. Beispiele sind die browserbasierte VoIP-Telefonie, auch Cloud-Telefone oder Web-Telefone genannt, die das Tätigen und Entgegennehmen von Anrufen über einen Webbrowser ermöglichen und das Herunterladen und Installieren eines Softphones überflüssig machen.

Unterstützung

WebRTC wird von den folgenden Browsern unterstützt:

  • Desktop-PC
    • Microsoft Edge 12+
    • Google Chrome 28+
    • Mozilla Firefox 22+
    • Safari 11+
    • Opera 18+
    • Vivaldi 1.9+
    • Brave
  • Android
    • Google Chrome 28+ (seit 29 standardmäßig aktiviert)
    • Mozilla Firefox 24+
    • Opera Mobil 12+
  • Chrome OS
  • Firefox OS
  • BlackBerry 10
  • iOS
    • MobileSafari/WebKit (iOS 11+)
  • Tizen 3.0

GStreamer bietet direkt eine kostenlose WebRTC-Implementierung.

Codec-Unterstützung in verschiedenen Browsern

Die Unterstützung für einzelne Codecs ist nicht einheitlich. WebRTC legt einen Standardsatz von Codecs fest, den alle kompatiblen Browser implementieren müssen. Einige Browser können auch andere Codecs zulassen.

Video-Codec-Kompatibilität
Codec-Name Profil(e) Browser-Kompatibilität
H.264 Eingeschränkte Baseline (CB) Chrome (52+), Edge, Firefox[1], Safari
VP8 - Chrome, Edge, Firefox, Safari (12.1+)
VP9 - Chrome (48+), Firefox
Audio-Codec-Kompatibilität
Codec-Name Browser-Kompatibilität
Opus Chrome, Edge, Firefox, Safari
G.711 PCM (A-law) Chrome, Firefox, Safari
G.711 PCM (µ-law) Chrome, Firefox, Safari
G.722 Chrome, Firefox, Safari
iLBC Chrome, Safari
iSAC Chrome, Safari

Bedenken

Im Januar 2015 berichtete TorrentFreak über eine schwerwiegende Sicherheitslücke in Browsern, die WebRTC unterstützen, die die Sicherheit von VPN-Tunneln gefährdet, indem sie die wahre IP-Adresse eines Benutzers preisgibt. Die IP-Adressleseanfragen sind in der Entwicklerkonsole des Browsers nicht sichtbar und werden von den meisten Werbeblocker-/Datenschutz-/Sicherheits-Add-ons nicht blockiert, wodurch das Online-Tracking durch Werbetreibende und andere Unternehmen trotz aller Vorsichtsmaßnahmen möglich ist, obwohl das uBlock Origin-Add-on dieses Problem beheben kann (da einige Browser dieses Problem inzwischen selbst beheben, wurde diese Option ab uBlock Origin v1.38 in diesen Browsern deaktiviert). Im September 2019 taucht dieser WebRTC-Fehler immer noch in Firefox 69.x auf und macht standardmäßig die interne IP-Adresse des Benutzers im Web sichtbar. In Firefox kann WebRTC über die Konfigurationsoption media.peerconnection.enabled deaktiviert werden.

Technik

Das Framework basiert auf HTML5 und JavaScript. Die Übertragung erfolgt mit (S)RTP über eine mittels der XMPP-Erweiterung Jingle in Verbindung mit dem neu eingeführten JavaScript Session Establishment Protocol (JSEP) ausgehandelte Direktverbindung (Peer-to-Peer). Datenströme sind verpflichtend zu verschlüsseln. Dazu werden Verbindungen über DTLS verschlüsselt und Audio- und Videokommunikation zusätzlich durch SRTP geschützt.

Neben einer Anzahl mindestens zu unterstützender, (lizenzkosten-)freier Multimedia-Codecs können standardkonforme Implementierungen beliebige weitere Verfahren unterstützen. Für Audio ist Opus als zu bevorzugendes Verfahren vorgesehen neben der für Kompatibilität zu herkömmlichen Telefonsystemen ebenfalls geforderten Unterstützung für A-law und µ-law. Der neuere Internetstandard Opus ersetzt die zuvor verwendeten, von GIPS entwickelten iLBC und iSAC. Google setzt sich daneben für den selbst freigekauften Video-Codec VP8 als vorgeschriebenes Video-Format ein, das als alternativlos dargestellt wird. Neben mitgelieferten Multimedia-Codecs liegen der Referenzimplementierung weiterhin Werkzeuge für unter anderem Nebengeräuschunterdrückung und die Software-Bibliothek libjingle bei.

Sicherheitslücken

IP-Leak

In Verbindung mit WebRTC können private IP-Adressen trotz VPN-Verbindung über JavaScript ausgelesen werden. Das Beispiel Firefox Hello schließt Rechner hinter einer Firewall und mit privaten IP-Adressen aus. Deshalb kann eine Website mit JavaScript einen STUN-Server nach der tatsächlichen IP-Adresse fragen lassen. Dies hat zur Folge, dass Anonymisierungsdienste ihren Zweck nicht mehr erfüllen und keinen Schutz mehr vor einem IP-Leak bieten können.

Gegenmaßnahmen

Zum Schutz vor einem IP-Leak bieten sich zwei Vorgehensweisen an. Eine Option bietet die Installation von Add-Ons/Plugins zur Verhinderung der Weitergabe der öffentlichen IP-Adresse, beispielsweise "WebRTC Leak Prevent" oder "Easy WebRTC Block".

Die andere Möglichkeit ist eine Änderung der Einstellungen im Browser. Im Firefox kann über about:config der Wert media.peerconnection.enabled auf false gesetzt werden, wodurch ein IP-Leak verhindert wird.

Normen und Standards

WebRTC ist eine Standardisierung von W3C und IETF und wird gemeinsam weiterentwickelt.

W3C:

  • WebRTC 1.0 (2021, aktuell). Verweist explizit auf RFC 8825, RFC 8827 und RFC 8828.

IETF als Request for Comments (RFC):

  • RFC 7742 — WebRTC Video Processing and Codec Requirements (2016, aktuell)
  • RFC 7744 — WebRTC Audio Codec and Processing Requirements (2016, aktuell)
  • RFC 8825 — Overview: Real-Time Protocols for Browser-Based Applications (2021, aktuell)
  • RFC 8826 — Security Considerations for WebRTC (2021, aktuell)
  • RFC 8827 — WebRTC Security Architecture (2021, aktuell)
  • RFC 8828 — WebRTC IP Address Handling Requirements (2021, aktuell)
  • RFC 8830 — WebRTC MediaStream Identification in the Session Description Protocol (2021, aktuell)
  • RFC 8831 — WebRTC Data Channels (2021, aktuell)
  • RFC 8832 — WebRTC Data Channel Establishment Protocol (2021, aktuell)
  • RFC 8833 — Application-Layer Protocol Negotiation (ALPN) for WebRTC (2021, aktuell)
  • RFC 8834 — Media Transport and Use of RTP in WebRTC (2021, aktuell)
  • RFC 8835 — Transports for WebRTC (2021, aktuell)
  • RFC 8836 — Congestion Control Requirements for Interactive Real-Time Media (2021, aktuell)
  • RFC 8837 — Differentiated Services Code Point (DSCP) Packet Markings for WebRTC QoS (2021, aktuell)
  • RFC 8854 — WebRTC Forward Error Correction Requirements (2021, aktuell)