WebRTC API
WebRTC (Web Real-Time Communication) ist eine Technologie, die es Webanwendungen und Websites ermöglicht, Audio- und/oder Videomedien zu erfassen und optional zu streamen sowie beliebige Daten ohne einen Vermittler zwischen Browsern auszutauschen. Die Gesamtheit der Standards, aus denen WebRTC besteht, ermöglicht es, Daten auszutauschen und Telefonkonferenzen per Peer-to-Peer durchzuführen, ohne dass Benutzer Plug-ins oder andere Drittanbietersoftware installieren müssen.
WebRTC besteht aus mehreren miteinander verbundenen APIs und Protokollen, die zusammenarbeiten, um dies zu ermöglichen. Die hier bereitgestellte Dokumentation hilft Ihnen dabei, die Grundlagen von WebRTC zu verstehen, Daten- und Medienverbindungen einzurichten und zu verwenden und mehr.
WebRTC-Konzepte und Verwendung
WebRTC dient mehreren Zwecken; zusammen mit der Media Capture and Streams API stellt es dem Web leistungsfähige Multimediafunktionen bereit, einschließlich Unterstützung für Audio- und Videokonferenzen, Dateiaustausch, Bildschirmfreigabe, Identitätsverwaltung sowie die Anbindung an ältere Telefonsysteme, einschließlich Unterstützung für das Senden von DTMF-Signalen (Tonwahl). Verbindungen zwischen Peers können ohne spezielle Treiber oder Plug-ins hergestellt werden und oft auch ohne zwischengeschaltete Server.
Verbindungen zwischen zwei Peers werden durch die Schnittstelle 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 auf Grundlage der Schnittstelle MediaStreamTrack dargestellt werden, können einen von mehreren Medientypen enthalten, darunter Audio, Video und Text (etwa Untertitel oder sogar Kapitelnamen). Die meisten Streams bestehen aus mindestens einer Audiospur und wahrscheinlich auch einer Videospur und können zum Senden und Empfangen sowohl von Live-Medien als auch gespeicherten Medieninformationen (etwa eines gestreamten Films) verwendet werden.
Sie können die Verbindung zwischen zwei Peers auch verwenden, um über die Schnittstelle RTCDataChannel beliebige Binärdaten auszutauschen. Dies kann für Rückkanalinformationen, den Austausch von Metadaten, Spielstatuspakete, Dateiübertragungen oder sogar als primärer Kanal für die Datenübertragung verwendet werden.
Interoperabilität
WebRTC wird im Allgemeinen von modernen Browsern gut unterstützt, es bestehen jedoch noch einige Inkompatibilitäten. Die Bibliothek adapter.js ist ein Shim, der Anwendungen von diesen Inkompatibilitäten abschirmt.
WebRTC-Referenz
Da WebRTC Schnittstellen bereitstellt, die zusammenarbeiten, um eine Vielzahl von Aufgaben zu erledigen, haben wir die Referenz nach Kategorien unterteilt. Eine alphabetische Liste finden Sie in der Seitenleiste.
Einrichtung und Verwaltung von Verbindungen
Diese Schnittstellen, Dictionaries und Typen werden verwendet, um WebRTC-Verbindungen einzurichten, zu öffnen und zu verwalten. Enthalten sind Schnittstellen, die Peer-Medienverbindungen und Datenkanäle darstellen, sowie Schnittstellen, die beim Austausch von Informationen über die Fähigkeiten jedes Peers verwendet werden, um die bestmögliche Konfiguration für eine bidirektionale Medienverbindung auszuwählen.
Schnittstellen
RTCPeerConnection-
Stellt eine WebRTC-Verbindung zwischen dem lokalen Computer und einem Remote-Peer dar. Sie wird zur effizienten Übertragung von Daten zwischen den beiden Peers verwendet.
RTCDataChannel-
Stellt einen bidirektionalen Datenkanal zwischen zwei Peers einer Verbindung dar.
RTCDataChannelEvent-
Stellt Ereignisse dar, die beim Anfügen eines
RTCDataChannelan eineRTCPeerConnectionauftreten. Das einzige mit dieser Schnittstelle gesendete Ereignis istdatachannel. RTCSessionDescription-
Stellt die Parameter einer Sitzung dar. Jede
RTCSessionDescriptionbesteht aus einem Beschreibungstyptype, der angibt, welchen Teil des Offer/Answer-Aushandlungsprozesses sie beschreibt, sowie aus dem SDP-Deskriptor der Sitzung. RTCStatsReport-
Stellt Informationen mit Statistiken für eine Verbindung oder für eine einzelne Spur der Verbindung bereit; der Bericht kann durch Aufrufen von
RTCPeerConnection.getStats()abgerufen werden. RTCIceCandidate-
Stellt eine mögliche Interactive-Connectivity-Establishment-Konfiguration (ICE) zum Herstellen einer
RTCPeerConnectiondar. RTCIceTransport-
Stellt Informationen über einen ICE-Transport dar.
RTCPeerConnectionIceEvent-
Stellt Ereignisse dar, die sich auf ICE-Kandidaten mit dem Ziel, üblicherweise einer
RTCPeerConnection, beziehen. Es gibt nur ein Ereignis dieses Typs:icecandidate. RTCRtpSender-
Verwaltet die Kodierung und Übertragung von Daten für eine
MediaStreamTrackauf einerRTCPeerConnection. RTCRtpReceiver-
Verwaltet den Empfang und die Dekodierung von Daten für eine
MediaStreamTrackauf einerRTCPeerConnection. RTCTrackEvent-
Die Schnittstelle zur Darstellung eines
track-Ereignisses, das angibt, dass einRTCRtpReceiver-Objekt zumRTCPeerConnection-Objekt hinzugefügt wurde. Dies zeigt an, dass eine neue eingehendeMediaStreamTrackerstellt und zurRTCPeerConnectionhinzugefügt wurde. RTCSctpTransport-
Stellt Informationen bereit, die einen Stream Control Transmission Protocol- (SCTP) Transport beschreiben, und bietet außerdem eine Möglichkeit, auf den zugrunde liegenden Datagram Transport Layer Security- (DTLS) Transport zuzugreifen, über den SCTP-Pakete für alle Datenkanäle einer
RTCPeerConnectiongesendet und empfangen werden.
Ereignisse
bufferedamountlow-
Die derzeit vom Datenkanal gepufferte Datenmenge – wie durch seine Eigenschaft
bufferedAmountangegeben – ist auf die Mindestgröße gepufferter Daten des Kanals oder darunter gesunken, wie durchbufferedAmountLowThresholdfestgelegt. close-
Der Datenkanal hat den Schließvorgang abgeschlossen und befindet sich nun im Zustand
closed. Sein zugrunde liegender Datentransport ist zu diesem Zeitpunkt vollständig geschlossen. Sie können vor Abschluss des Schließvorgangs benachrichtigt werden, indem Sie stattdessen auf das Ereignisclosingwarten. closing-
Der
RTCDataChannelist in den Zustandclosingübergegangen, was darauf hinweist, dass er bald geschlossen wird. Sie können den Abschluss des Schließvorgangs erkennen, indem Sie auf das Ereignisclosewarten. connectionstatechange-
Der Zustand der Verbindung, auf den über
connectionStatezugegriffen werden kann, hat sich geändert. datachannel-
Ein neuer
RTCDataChannelist verfügbar, nachdem der Remote-Peer einen neuen Datenkanal geöffnet hat. Der Typ dieses Ereignisses istRTCDataChannelEvent. error-
Ein
RTCErrorEvent, das angibt, dass ein Fehler auf dem Datenkanal aufgetreten ist. error-
Ein
RTCErrorEvent, das angibt, dass ein Fehler auf demRTCDtlsTransportaufgetreten ist. Dieser Fehler ist entwederdtls-failureoderfingerprint-failure. gatheringstatechange-
Der Erfassungszustand des
RTCIceTransporthat sich geändert. icecandidate-
Ein
RTCPeerConnectionIceEvent, das gesendet wird, wenn das lokale Gerät einen neuen ICE-Kandidaten identifiziert hat, der durch Aufrufen vonsetLocalDescription()zum lokalen Peer hinzugefügt werden muss. icecandidateerror-
Ein
RTCPeerConnectionIceErrorEvent, das angibt, dass beim Erfassen von ICE-Kandidaten ein Fehler aufgetreten ist. iceconnectionstatechange-
Wird an eine
RTCPeerConnectiongesendet, wenn sich der Zustand ihrer ICE-Verbindung – zu finden in der EigenschafticeConnectionState– ändert. icegatheringstatechange-
Wird an eine
RTCPeerConnectiongesendet, wenn sich ihr ICE-Erfassungszustand – zu finden in der EigenschafticeGatheringState– ändert. message-
Eine Nachricht wurde auf dem Datenkanal empfangen. Das Ereignis ist vom Typ
MessageEvent. negotiationneeded-
Informiert die
RTCPeerConnection, dass sie durch Aufrufen voncreateOffer(), gefolgt vonsetLocalDescription(), eine Sitzungsaushandlung durchführen muss. open-
Der zugrunde liegende Datentransport für den
RTCDataChannelwurde erfolgreich geöffnet oder erneut geöffnet. selectedcandidatepairchange-
Das aktuell ausgewählte Paar von ICE-Kandidaten hat sich für den
RTCIceTransport, auf dem das Ereignis ausgelöst wird, geändert. track-
Das
track-Ereignis vom TypRTCTrackEventwird an eineRTCPeerConnectiongesendet, wenn nach erfolgreicher Aushandlung des Medienstreamings eine neue Spur zur Verbindung hinzugefügt wird. signalingstatechange-
Wird an die Peer-Verbindung gesendet, wenn sich ihr
signalingStategeändert hat. Dies geschieht infolge eines Aufrufs von entwedersetLocalDescription()odersetRemoteDescription(). statechange-
Der Zustand des
RTCDtlsTransporthat sich geändert. statechange-
Der Zustand des
RTCIceTransporthat sich geändert. statechange-
Der Zustand des
RTCSctpTransporthat sich geändert. rtctransform-
Ein kodierter Video- oder Audioframe ist bereit zur Verarbeitung mithilfe eines Transform Streams in einem Worker.
Typen
RTCSctpTransport.state-
Gibt den Zustand einer
RTCSctpTransport-Instanz an.
Identität und Sicherheit
Diese APIs werden verwendet, um Benutzeridentität und Sicherheit zu verwalten, um Benutzer für eine Verbindung zu authentifizieren.
RTCIdentityProvider-
Ermöglicht einem User Agent, die Erstellung oder Validierung einer Identitätsbehauptung anzufordern.
RTCIdentityAssertion-
Stellt die Identität des Remote-Peers der aktuellen Verbindung dar. Wenn noch kein Peer festgelegt und verifiziert wurde, gibt diese Schnittstelle
nullzurück. Nach dem Festlegen kann sie nicht geändert werden. RTCIdentityProviderRegistrar-
Registriert einen Identitätsanbieter (idP).
RTCCertificate-
Stellt ein Zertifikat dar, das eine
RTCPeerConnectionzur Authentifizierung verwendet.
Telefonie
Diese Schnittstellen und Ereignisse beziehen sich auf die Interaktion mit öffentlichen Telefonnetzen (Public Switched Telephone Networks, PSTNs). Sie werden hauptsächlich verwendet, um Tonwahlsignale – oder Pakete, die diese Töne darstellen – über das Netzwerk an den Remote-Peer zu senden.
Schnittstellen
RTCDTMFSender-
Verwaltet die Kodierung und Übertragung der Dual-Tone Multi-Frequency- (DTMF) Signalisierung für eine
RTCPeerConnection. RTCDTMFToneChangeEvent-
Wird vom
tonechange-Ereignis verwendet, um anzugeben, dass ein DTMF-Ton entweder begonnen oder geendet hat. Dieses Ereignis propagiert nicht (außer wenn anders angegeben) und kann nicht abgebrochen werden (außer wenn anders angegeben).
Ereignisse
tonechange-
Entweder wurde ein neuer DTMF-Ton über die Verbindung abgespielt oder der letzte Ton im
toneBufferdesRTCDTMFSenderwurde gesendet und der Puffer ist jetzt leer. Der Typ des Ereignisses istRTCDTMFToneChangeEvent.
Kodierte Transforms
Diese Schnittstellen und Ereignisse werden verwendet, um eingehende und ausgehende kodierte Video- und Audioframes mithilfe eines in einem Worker ausgeführten Transform Streams zu verarbeiten.
Schnittstellen
RTCRtpScriptTransform-
Eine Schnittstelle zum Einfügen von in einem Worker ausgeführten Transform Streams in die RTC-Pipeline.
RTCRtpScriptTransformer-
Das Gegenstück zu
RTCRtpScriptTransformauf der Worker-Seite, das Optionen aus dem Hauptthread zusammen mit einem lesbaren Stream und einem beschreibbaren Stream übergibt, die verwendet werden können, um kodierte Frames durch einenTransformStreamzu leiten. RTCEncodedVideoFrame-
Stellt einen kodierten Videoframe dar, der in der RTC-Pipeline transformiert werden soll.
RTCEncodedAudioFrame-
Stellt einen kodierten Audioframe dar, der in der RTC-Pipeline transformiert werden soll.
Eigenschaften
RTCRtpReceiver.transform-
Eine Eigenschaft zum Einfügen eines Transform Streams in die Receiver-Pipeline für eingehende kodierte Video- und Audioframes.
RTCRtpSender.transform-
Eine Eigenschaft zum Einfügen eines Transform Streams in die Sender-Pipeline für ausgehende kodierte Video- und Audioframes.
Ereignisse
rtctransform-
Eine RTC-Transformation ist bereit zur Ausführung im Worker, oder ein kodierter Video- oder Audioframe ist bereit zur Verarbeitung.
Leitfäden
- Einführung in das Real-time Transport Protocol (RTP)
-
Das in RFC 3550 definierte Real-time Transport Protocol (RTP) ist ein IETF-Standardprotokoll, das Echtzeitverbindungen für den Austausch von Daten ermöglicht, die Echtzeitpriorität benötigen. Dieser Artikel bietet einen Überblick darüber, was RTP ist und wie es im Kontext von WebRTC funktioniert.
- Einführung in WebRTC-Protokolle
-
Dieser Artikel stellt die Protokolle vor, auf denen die WebRTC API aufbaut.
- WebRTC-Konnektivität
-
Ein Leitfaden dazu, wie WebRTC-Verbindungen funktionieren und wie die verschiedenen Protokolle und Schnittstellen zusammen verwendet werden können, um leistungsfähige Kommunikationsanwendungen zu erstellen.
- Lebensdauer einer WebRTC-Sitzung
-
WebRTC ermöglicht Ihnen, Peer-to-Peer-Kommunikation beliebiger Daten, Audiodaten oder Videodaten – oder beliebiger Kombinationen davon – in eine Browseranwendung einzubetten. In diesem Artikel betrachten wir die Lebensdauer einer WebRTC-Sitzung, vom Herstellen der Verbindung bis zum Schließen der Verbindung, wenn sie nicht mehr benötigt wird.
- Herstellen einer Verbindung: Das Perfect-Negotiation-Muster
-
Perfect Negotiation ist ein Entwurfsmuster, dem Ihr Signalisierungsprozess folgen sollte. Es bietet Transparenz bei der Aushandlung und ermöglicht beiden Seiten, sowohl Offerer als auch Answerer zu sein, ohne dass umfangreicher Code zur Unterscheidung der beiden erforderlich ist.
- Signalisierung und bidirektionale Videoanrufe
-
Ein Tutorial und Beispiel, das ein für ein früheres Beispiel erstelltes WebSocket-basiertes Chatsystem erweitert, um Videoanrufe zwischen Teilnehmern zu ermöglichen. Die WebSocket-Verbindung des Chatservers wird für die WebRTC-Signalisierung verwendet.
- Von WebRTC verwendete Codecs
-
Ein Leitfaden zu den Codecs, deren Unterstützung WebRTC von Browsern verlangt, sowie zu den optionalen Codecs, die von verschiedenen beliebten Browsern unterstützt werden. Enthalten ist ein Leitfaden, der Ihnen bei der Auswahl der besten Codecs für Ihre Anforderungen hilft.
- Verwenden von WebRTC-Datenkanälen
-
Dieser Leitfaden beschreibt, wie Sie eine Peer-Verbindung und einen zugehörigen
RTCDataChannelverwenden können, um beliebige Daten zwischen zwei Peers auszutauschen. - Verwenden von DTMF mit WebRTC
-
Die Unterstützung von WebRTC für die Interaktion mit Gateways, die mit älteren Telefonsystemen verbunden sind, umfasst das Senden von DTMF-Tönen mithilfe der Schnittstelle
RTCDTMFSender. Dieser Leitfaden zeigt, wie dies funktioniert. - Verwenden von WebRTC Encoded Transforms
-
Dieser Leitfaden zeigt, wie eine Webanwendung eingehende und ausgehende kodierte WebRTC-Video- und Audioframes mithilfe eines
TransformStreamändern kann, der in einem Worker ausgeführt wird.
Tutorials
- Verbesserung der Kompatibilität mit WebRTC adapter.js
-
Die WebRTC-Organisation stellt auf GitHub den WebRTC-Adapter bereit, um Kompatibilitätsprobleme in den WebRTC-Implementierungen verschiedener Browser zu umgehen. Der Adapter ist ein JavaScript-Shim, mit dem Ihr Code gemäß der Spezifikation geschrieben werden kann, sodass er in allen Browsern mit WebRTC-Unterstützung „einfach funktioniert“.
- Ein einfaches RTCDataChannel-Beispiel
-
Die Schnittstelle
RTCDataChannelermöglicht es Ihnen, einen Kanal zwischen zwei Peers zu öffnen, über den Sie beliebige Daten senden und empfangen können. Die API ähnelt absichtlich der WebSocket API, sodass für beide dasselbe Programmiermodell verwendet werden kann. - Erstellen eines mit dem Internet verbundenen Telefons mit Peer.js
-
Dieses Tutorial ist eine Schritt-für-Schritt-Anleitung zum Erstellen eines Telefons mit Peer.js.
Spezifikationen
| Spezifikation |
|---|
| WebRTC: Real-Time Communication in Browsers> |
| Media Capture and Streams> |
| Media Capture from DOM Elements> |
WebRTC-spezifische Protokolle
Zugehörige unterstützende Protokolle
- Interactive Connectivity Establishment (ICE): Ein Protokoll für die NAT-Traversierung im Offer/Answer-Protokoll
- Session Traversal Utilities for NAT (STUN)
- URI-Schema für das Protokoll Session Traversal Utilities for NAT (STUN)
- Traversal Using Relays around NAT (TURN) Uniform Resource Identifiers
- Ein Offer/Answer-Modell mit Session Description Protocol (SDP)
- Session Traversal Utilities for NAT (STUN)-Erweiterung für Drittanbieterautorisierung
Siehe auch
MediaDevicesMediaStreamEventMediaStreamTrackMessageEventMediaStream- Media Capture and Streams API
- Webmedientechnologien
- Firefox-Multistream und Neuverhandlung für Jitsi Videobridge
- Durch den WebRTC-Nebel mit SocketPeer schauen
- Im Partybus: Erstellen einer Web-App mit mehreren Live-Videostreams und interaktiven Grafiken
- WebRTC-Beispiele