WebRTC API

WebRTC (Web Real-Time Communication) ist eine Technologie, die es Webanwendungen und -seiten ermöglicht, Audio- und/oder Videomedien zu erfassen und optional zu streamen sowie beliebige Daten zwischen Browsern auszutauschen, ohne dass ein Vermittler erforderlich ist. Der Satz von Standards, der WebRTC ausmacht, erlaubt es, Daten zu teilen und Videokonferenzen peer-to-peer durchzuführen, ohne dass Benutzer Plug-ins oder andere Software von Drittanbietern installieren müssen.

WebRTC besteht aus mehreren miteinander verbundenen APIs und Protokollen, die zusammenarbeiten, um dies zu erreichen. Die hier enthaltene Dokumentation hilft Ihnen, die Grundlagen von WebRTC zu verstehen, wie Sie Daten- und Medienverbindungen einrichten und nutzen und vieles mehr.

Konzepte und Nutzung von WebRTC

WebRTC hat mehrere Zwecke; zusammen mit der Media Capture and Streams API bieten sie leistungsstarke Multimedia-Fähigkeiten im Web, einschließlich Unterstützung für Audio- und Videokonferenzen, Dateiaustausch, Bildschirmfreigabe, Identitätsmanagement und die Verbindung mit älteren Telefonsystemen einschließlich Unterstützung zum Senden von DTMF (Tonwahl) Signalen. Verbindungen zwischen Peers können hergestellt werden, ohne dass spezielle Treiber oder Plug-ins erforderlich sind, und oft ohne dass Vermittlungsserver benötigt werden.

Verbindungen zwischen zwei Peers werden durch das Interface RTCPeerConnection dargestellt. Sobald eine Verbindung mit RTCPeerConnection hergestellt und geöffnet wurde, können Medienstreams (MediaStreams) und/oder Datenkanäle (RTCDataChannels) zur Verbindung hinzugefügt werden.

Medienstreams können aus einer beliebigen Anzahl von Spuren mit Medieninformationen bestehen; Spuren, die durch Objekte basierend auf dem Interface MediaStreamTrack dargestellt werden, können eine der vielen Arten von Mediendaten enthalten, einschließlich Audio, Video und Text (wie Untertitel oder sogar Kapitelnamen). Die meisten Streams bestehen aus mindestens einer Audiospur und wahrscheinlich auch einer Videospur und können verwendet werden, um sowohl Live-Medien als auch gespeicherte Mediendaten (wie einen gestreamten Film) zu senden und zu empfangen.

Sie können auch die Verbindung zwischen zwei Peers nutzen, um beliebige Binärdaten auszutauschen, indem Sie das Interface RTCDataChannel verwenden. Dies kann für Back-Channel-Informationen, Metadaten-Austausch, Spielstatuspakete, Dateitransfers oder sogar als primärer Kanal für die Datenübertragung eingesetzt werden.

Interoperabilität

WebRTC wird im Allgemeinen gut von modernen Browsern unterstützt, aber einige Inkompatibilitäten bestehen weiterhin. Die adapter.js Bibliothek ist ein Shim, um Apps vor diesen Inkompatibilitäten zu schützen.

WebRTC Referenz

Da WebRTC Schnittstellen bereitstellt, die zusammenarbeiten, um eine Vielzahl von Aufgaben zu erledigen, haben wir die Referenz nach Kategorie unterteilt. Bitte sehen Sie sich die Sidebar für eine alphabetische Liste an.

Verbindungseinrichtung und -management

Diese Schnittstellen, Wörterbücher und Typen werden verwendet, um WebRTC-Verbindungen einzurichten, zu öffnen und zu verwalten. Dazu gehören Schnittstellen, die Peer-Medienverbindungen, Datenkanäle und Schnittstellen repräsentieren, die verwendet werden, um Informationen über die Fähigkeiten jedes Peers auszutauschen, um die bestmögliche Konfiguration für eine Zwei-Wege-Medienverbindung auszuwählen.

Schnittstellen

RTCPeerConnection

Repräsentiert eine WebRTC-Verbindung zwischen dem lokalen Computer und einem entfernten Peer. Es wird verwendet, um eine effiziente Übertragung von Daten zwischen den beiden Peers zu handhaben.

RTCDataChannel

Repräsentiert einen bidirektionalen Datenkanal zwischen zwei Peers einer Verbindung.

RTCDataChannelEvent

Repräsentiert Ereignisse, die auftreten, während ein RTCDataChannel zu einer RTCPeerConnection hinzugefügt wird. Das einzige Ereignis, das mit dieser Schnittstelle gesendet wird, ist datachannel.

RTCSessionDescription

Stellt die Parameter einer Sitzung dar. Jede RTCSessionDescription besteht aus einer Beschreibung des type, der angibt, welchen Teil des Angebots/Antwortverhandlungsprozesses sie beschreibt, und des SDP-Descriptors der Sitzung.

RTCStatsReport

Bietet Informationen, die Statistiken für eine Verbindung oder für eine einzelne Spur auf der Verbindung detailliert darlegen; der Bericht kann durch Aufruf von RTCPeerConnection.getStats() erhalten werden.

RTCIceCandidate

Repräsentiert einen Kandidaten für einen Interactive Connectivity Establishment (ICE) Server zur Einrichtung einer RTCPeerConnection.

RTCIceTransport

Stellt Informationen über einen ICE Transport dar.

RTCPeerConnectionIceEvent

Repräsentiert Ereignisse, die in Bezug auf ICE-Kandidaten mit dem Ziel auftreten, normalerweise eine RTCPeerConnection. Nur ein Ereignis ist dieses Typs: icecandidate.

RTCRtpSender

Verwaltet die Kodierung und Übertragung von Daten für eine MediaStreamTrack auf einer RTCPeerConnection.

RTCRtpReceiver

Verwaltet den Empfang und die Dekodierung von Daten für eine MediaStreamTrack auf einer RTCPeerConnection.

RTCTrackEvent

Die Schnittstelle, die ein track-Ereignis darstellt, das anzeigt, dass ein RTCRtpReceiver-Objekt zur RTCPeerConnection hinzugefügt wurde, womit ein neuer eingehender MediaStreamTrack erstellt und zur RTCPeerConnection hinzugefügt wurde.

RTCSctpTransport

Bietet Informationen, die einen Stream Control Transmission Protocol (SCTP) Transport beschreiben und bietet auch eine Möglichkeit, auf den darunterliegenden Datagram Transport Layer Security (DTLS) Transport zuzugreifen, über den SCTP-Pakete für alle Datenkanäle einer RTCPeerConnection gesendet und empfangen werden.

Ereignisse

bufferedamountlow

Die Menge an Daten, die derzeit vom Datenkanal gepuffert werden—wie durch seine bufferedAmount-Eigenschaft angegeben—wurde verringert, um unter die minimale gepufferte Datenmenge des Kanals zu fallen, wie durch bufferedAmountLowThreshold angegeben.

close

Der Datenkanal hat den Schließvorgang abgeschlossen und ist nun im closed-Status. Sein zugrunde liegender Datentransport ist zu diesem Zeitpunkt vollständig geschlossen. Sie können benachrichtigt werden, bevor das Schließen abgeschlossen ist, indem Sie das closing-Ereignis überwachen.

closing

Der RTCDataChannel hat den closing-Status erreicht, was anzeigt, dass er bald geschlossen wird. Sie können den Abschluss des Schließvorgangs erkennen, indem Sie nach dem close-Ereignis suchen.

connectionstatechange

Der Verbindungszustand, der über connectionState zugänglich ist, hat sich geändert.

datachannel

Ein neuer RTCDataChannel ist verfügbar, nachdem der entfernte Peer einen neuen Datenkanal geöffnet hat. Der Typ dieses Ereignisses ist RTCDataChannelEvent.

error

Ein RTCErrorEvent zeigt an, dass auf dem Datenkanal ein Fehler aufgetreten ist.

error

Ein RTCErrorEvent zeigt an, dass auf dem RTCDtlsTransport ein Fehler aufgetreten ist. Dieser Fehler wird entweder dtls-failure oder fingerprint-failure sein.

gatheringstatechange

Der Erfassungsstatus des RTCIceTransport hat sich geändert.

icecandidate

Ein RTCPeerConnectionIceEvent, das immer gesendet wird, wenn das lokale Gerät einen neuen ICE-Kandidaten identifiziert hat, der zum lokalen Peer hinzugefügt werden muss, indem setLocalDescription() aufgerufen wird.

icecandidateerror

Ein RTCPeerConnectionIceErrorEvent, der anzeigt, dass ein Fehler bei der Erfassung von ICE-Kandidaten aufgetreten ist.

iceconnectionstatechange

Wird an eine RTCPeerConnection gesendet, wenn sich der ICE-Verbindungsstatus—im iceConnectionState Eigenschaft—ändert.

icegatheringstatechange

Wird an eine RTCPeerConnection gesendet, wenn sich ihr ICE-Erfassungsstatus—im iceGatheringState Eigenschaft—ändert.

message

Eine Nachricht wurde auf dem Datenkanal empfangen. Der Ereignistyp ist MessageEvent.

negotiationneeded

Informiert die RTCPeerConnection, dass eine Sitzungsverhandlung erforderlich ist, indem createOffer() gefolgt von setLocalDescription() aufgerufen wird.

open

Der zugrunde liegende Datentransport für den RTCDataChannel wurde erfolgreich geöffnet oder wieder geöffnet.

selectedcandidatepairchange

Das derzeit ausgewählte Paar von ICE-Kandidaten hat sich für das RTCIceTransport, auf dem das Ereignis ausgelöst wird, geändert.

track

Das track-Ereignis, vom Typ RTCTrackEvent, wird an eine RTCPeerConnection gesendet, wenn nach erfolgreicher Verhandlung des Medienstreams ein neuer Track zur Verbindung hinzugefügt wird.

signalingstatechange

Wird an die Peer-Verbindung gesendet, wenn sich ihr signalingState geändert hat. Dies geschieht als Ergebnis eines Anrufs von entweder setLocalDescription() oder setRemoteDescription().

statechange

Der Zustand des RTCDtlsTransport hat sich geändert.

statechange

Der Zustand des RTCIceTransport hat sich geändert.

statechange

Der Zustand des RTCSctpTransport hat sich geändert.

rtctransform

Ein kodierter Video- oder Audio-Frame ist bereit, mit einem Transform-Stream in einem Worker verarbeitet zu werden.

Typen

RTCSctpTransport.state

Zeigt den Zustand eines RTCSctpTransport Instanz an.

Identität und Sicherheit

Diese APIs werden verwendet, um die Benutzeridentität und Sicherheit zu verwalten, um den Benutzer für eine Verbindung zu authentifizieren.

RTCIdentityProvider

Ermöglicht es einem Benutzeragenten, die Erstellung oder Validierung einer Identitätsbehauptung anzufordern.

RTCIdentityAssertion

Repräsentiert die Identität des entfernten Peers der aktuellen Verbindung. Wenn noch kein Peer gesetzt und verifiziert wurde, gibt diese Schnittstelle null zurück. Wenn sie einmal gesetzt ist, kann sie nicht geändert werden.

RTCIdentityProviderRegistrar

Registriert einen Identitätsanbieter (idP).

RTCCertificate

Repräsentiert ein Zertifikat, das eine RTCPeerConnection zur Authentifizierung verwendet.

Telefonie

Diese Schnittstellen und Ereignisse beziehen sich auf die Interaktivität mit Public-Switched Telephone Networks (PSTNs). Sie werden hauptsächlich verwendet, um Tondialtonsounds—oder Pakete, die diese Töne repräsentieren—über das Netzwerk an den entfernten Peer zu senden.

Schnittstellen

RTCDTMFSender

Verwaltet die Kodierung und Übertragung von Dual-Tone Multi-Frequency (DTMF) Signalen für eine RTCPeerConnection.

RTCDTMFToneChangeEvent

Wird von dem tonechange Ereignis verwendet, um anzuzeigen, dass ein DTMF-Ton entweder begonnen oder beendet wurde. Dieses Ereignis steigt nicht auf (außer wenn anders angegeben) und kann nicht abgebrochen werden (außer wenn anders angegeben).

Ereignisse

tonechange

Entweder hat ein neuer DTMF Ton über die Verbindung zu spielen begonnen, oder der letzte Ton im RTCDTMFSender's toneBuffer wurde gesendet und der Puffer ist jetzt leer. Der Ereignistyp ist RTCDTMFToneChangeEvent.

Kodierte Transforms

Diese Schnittstellen und Ereignisse werden verwendet, um eingehende und ausgehende kodierte Video- und Audio-Frames mit einem Transform-Stream zu verarbeiten, der in einem Worker läuft.

Schnittstellen

RTCRtpScriptTransform

Eine Schnittstelle zum Einfügen von Transform-Streams, die in einem Worker in die RTC-Pipeline laufen.

RTCRtpScriptTransformer

Das Gegenstück auf der Worker-Seite zu einem RTCRtpScriptTransform, das Optionen aus dem Haupt-Thread, zusammen mit einem lesbaren Stream und einem beschreibbaren Stream übergibt, der zum Durchleiten der kodierten Frames durch einen TransformStream verwendet werden kann.

RTCEncodedVideoFrame

Repräsentiert einen kodierten Video-Frame, der in der RTC-Pipeline transformiert werden soll.

RTCEncodedAudioFrame

Repräsentiert einen kodierten Audio-Frame, der in der RTC-Pipeline transformiert werden soll.

Eigenschaften

RTCRtpReceiver.transform

Eine Eigenschaft, die verwendet wird, um einen Transform-Stream in die Empfänger-Pipeline für eingehende kodierte Video- und Audio-Frames einzufügen.

RTCRtpSender.transform

Eine Eigenschaft, die verwendet wird, um einen Transform-Stream in die Sender-Pipeline für ausgehende kodierte Video- und Audio-Frames einzufügen.

Ereignisse

rtctransform

Ein RTC-Transform ist bereit, im Worker ausgeführt zu werden, oder ein kodierter Video- oder Audio-Frame ist bereit zur Verarbeitung.

Leitfäden

Einführung in die WebRTC-Protokolle

Dieser Artikel führt in die Protokolle ein, auf denen die WebRTC-API basiert.

WebRTC-Konnektivität

Ein Leitfaden, wie WebRTC-Verbindungen funktionieren und wie die verschiedenen Protokolle und Schnittstellen zusammen genutzt werden können, um leistungsstarke Kommunikationsanwendungen zu erstellen.

Lebensdauer einer WebRTC-Sitzung

WebRTC ermöglicht es Ihnen, Peer-to-Peer-Kommunikation von beliebigen Daten, Audio oder Video—in jedem beliebigen Kombination—in eine Browseranwendung zu integrieren. In diesem Artikel betrachten wir die Lebensdauer einer WebRTC-Sitzung, von der Herstellung der Verbindung bis zum Schließen der Verbindung, wenn sie nicht mehr benötigt wird.

Eine Verbindung herstellen: Das perfekte Verhandlungsmuster

Perfekte Verhandlung ist ein Designmuster, das für Ihren Signalisierungsprozess empfohlen wird. Es sorgt für Transparenz bei der Verhandlung, während es beiden Seiten ermöglicht, entweder der Anbieter oder der Annehmende zu sein, ohne dass signifikante Codierung erforderlich ist, um die beiden zu unterscheiden.

Signalisierung und Zwei-Wege-Videotelefonie

Ein Tutorial und Beispiel, das ein auf WebSockets basierendes Chatsystem, das für ein früheres Beispiel erstellt wurde, um Unterstützung für das Öffnen von Videoanrufen unter Teilnehmern erweitert. Die WebSocket-Verbindung des Chat-Servers wird für die WebRTC-Signalisierung verwendet.

Von WebRTC verwendete Codecs

Ein Leitfaden zu den Codecs, die WebRTC erfordert, dass Browser sie unterstützen, sowie die optionalen, die von verschiedenen populären Browsern unterstützt werden. Eingeschlossen ist ein Leitfaden, der Ihnen hilft, die besten Codecs für Ihre Bedürfnisse auszuwählen.

Verwendung von WebRTC-Datenkanälen

Dieser Leitfaden behandelt, wie Sie eine Peer-Verbindung und einen zugehörigen RTCDataChannel nutzen können, um beliebige Daten zwischen zwei Peers auszutauschen.

Verwendung von DTMF mit WebRTC

Die Unterstützung von WebRTC für die Interaktion mit Gateways, die mit traditionellen Telefonsystemen verbinden, umfasst die Möglichkeit, DTMF-Töne zu senden, indem die Schnittstelle RTCDTMFSender verwendet wird. Dieser Leitfaden zeigt, wie das geht.

Verwendung von WebRTC Encoded Transforms

Dieser Leitfaden zeigt, wie eine Webanwendung eingehende und ausgehende WebRTC-kodierte Video- und Audio-Frames modifizieren kann, indem ein TransformStream in einem Worker ausgeführt wird.

Anleitungen

Kompatibilität verbessern mit WebRTC adapter.js

Die WebRTC-Organisation stellt auf GitHub den WebRTC-Adapter zur Verfügung, um Kompatibilitätsprobleme in den WebRTC-Implementierungen verschiedener Browser zu umgehen. Der Adapter ist ein JavaScript-Shim, das es ermöglicht, Ihren Code so zu schreiben, dass er den Spezifikationen entspricht und in allen Browsern mit WebRTC-Unterstützung "einfach funktioniert".

Ein einfaches RTCDataChannel-Beispiel

Das Interface RTCDataChannel ist eine Funktion, die es Ihnen ermöglicht, einen Kanal zwischen zwei Peers zu öffnen, über den Sie beliebige Daten senden und empfangen können. Die API ist absichtlich ähnlich zur WebSocket API, sodass dasselbe Programmiermodell für beide verwendet werden kann.

Ein Internet-verbundenes Telefon mit Peer.js bauen

Dieses Tutorial ist eine Schritt-für-Schritt-Anleitung, wie man ein Telefon mit Peer.js baut.

Spezifikationen

Specification
WebRTC: Real-Time Communication in Browsers
Media Capture and Streams
Media Capture from DOM Elements

WebRTC-eigene Protokolle

Verwandte unterstützende Protokolle

Siehe auch