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 (MediaStream
s) und/oder Datenkanäle (RTCDataChannel
s) 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 einerRTCPeerConnection
hinzugefügt wird. Das einzige Ereignis, das mit dieser Schnittstelle gesendet wird, istdatachannel
. RTCSessionDescription
-
Stellt die Parameter einer Sitzung dar. Jede
RTCSessionDescription
besteht aus einer Beschreibung destype
, 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 einerRTCPeerConnection
. RTCRtpReceiver
-
Verwaltet den Empfang und die Dekodierung von Daten für eine
MediaStreamTrack
auf einerRTCPeerConnection
. RTCTrackEvent
-
Die Schnittstelle, die ein
track
-Ereignis darstellt, das anzeigt, dass einRTCRtpReceiver
-Objekt zurRTCPeerConnection
hinzugefügt wurde, womit ein neuer eingehenderMediaStreamTrack
erstellt und zurRTCPeerConnection
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 durchbufferedAmountLowThreshold
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 dasclosing
-Ereignis überwachen. closing
-
Der
RTCDataChannel
hat denclosing
-Status erreicht, was anzeigt, dass er bald geschlossen wird. Sie können den Abschluss des Schließvorgangs erkennen, indem Sie nach demclose
-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 istRTCDataChannelEvent
. error
-
Ein
RTCErrorEvent
zeigt an, dass auf dem Datenkanal ein Fehler aufgetreten ist. error
-
Ein
RTCErrorEvent
zeigt an, dass auf demRTCDtlsTransport
ein Fehler aufgetreten ist. Dieser Fehler wird entwederdtls-failure
oderfingerprint-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, indemsetLocalDescription()
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—imiceConnectionState
Eigenschaft—ändert. icegatheringstatechange
-
Wird an eine
RTCPeerConnection
gesendet, wenn sich ihr ICE-Erfassungsstatus—imiceGatheringState
Eigenschaft—ändert. message
-
Eine Nachricht wurde auf dem Datenkanal empfangen. Der Ereignistyp ist
MessageEvent
. negotiationneeded
-
Informiert die
RTCPeerConnection
, dass eine Sitzungsverhandlung erforderlich ist, indemcreateOffer()
gefolgt vonsetLocalDescription()
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 TypRTCTrackEvent
, wird an eineRTCPeerConnection
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 entwedersetLocalDescription()
odersetRemoteDescription()
. 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
'stoneBuffer
wurde gesendet und der Puffer ist jetzt leer. Der Ereignistyp istRTCDTMFToneChangeEvent
.
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 einenTransformStream
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
- Interactive Connectivity Establishment (ICE): Ein Protokoll für Netzadressübersetzer (NAT) Traversal für Offer/Answer Protokoll
- Session Traversal Utilities for NAT (STUN)
- URI Schema für das Session Traversal Utilities for NAT (STUN) Protokoll
- 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 Drittpartei-Autorisierung
Siehe auch
MediaDevices
MediaStreamEvent
MediaStreamTrack
MessageEvent
MediaStream
- Media Capture and Streams API
- Firefox multistream and renegotiation for Jitsi Videobridge
- Peering Through the WebRTC Fog with SocketPeer
- Inside the Party Bus: Building a Web App with Multiple Live Video Streams + Interactive Graphics
- Web-Medientechnologien