Meet Media API-Konzepte
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Mit der Google Meet Media API kann Ihre App an einer Videokonferenz in Google Meet teilnehmen und Media-Streams in Echtzeit nutzen.
Clients verwenden WebRTC für die Kommunikation mit Meet-Servern. Die bereitgestellten Referenzclients (C++, TypeScript) demonstrieren empfohlene Vorgehensweisen. Wir empfehlen, direkt auf ihnen aufzubauen.
Sie können aber auch vollständig benutzerdefinierte WebRTC-Clients erstellen, die den technischen Anforderungen der Meet Media API entsprechen.
Auf dieser Seite werden die wichtigsten WebRTC-Konzepte beschrieben, die für eine erfolgreiche Meet Media API-Sitzung erforderlich sind.
Signalisierung von Angebot und Antwort
WebRTC ist ein Peer-to-Peer-Framework (P2P), bei dem Peers miteinander kommunizieren, indem sie sich gegenseitig signalisieren. Um eine Sitzung zu starten, sendet der initiierende Peer ein SDP-Angebot an einen Remote-Peer. Dieses Angebot umfasst die folgenden wichtigen Details:
Media-Beschreibungen für Audio und Video
Media-Beschreibungen geben an, was während P2P-Sitzungen kommuniziert wird. Es gibt drei Arten von Beschreibungen: Audio, Video und Daten.
Um n Audiostreams anzugeben, fügt der Anbieter n-Audiobeschreibungen in das Angebot ein. Dasselbe gilt für Videos. Es gibt jedoch maximal eine data-Media-Beschreibung.
Verkehrsrichtung
Jede Audio- oder Videobeschreibung beschreibt einzelne Secure Real-time Transport Protocol-Streams (SRTP), die durch RFC
3711 geregelt werden. Sie sind bidirektional, sodass zwei Peers über dieselbe Verbindung Medien senden und empfangen können.
Aus diesem Grund enthält jede Medienbeschreibung (sowohl im Angebot als auch in der Antwort) eines von drei Attributen, die beschreiben, wie der Stream verwendet werden soll:
sendonly: Sendet nur Medien vom anbietenden Peer. Der Remote-Peer sendet keine Medien in diesem Stream.
recvonly: Empfängt nur Medien vom Remote-Peer. Der anbietende Peer sendet keine Medien in diesem Stream.
sendrecv: Beide Peers können in diesem Stream senden und empfangen.
Codecs
In jeder Medienbeschreibung werden auch die von einem Peer unterstützten Codecs angegeben. Im Fall der Meet Media API werden Clientangebote abgelehnt, wenn sie nicht (mindestens) die in den technischen Anforderungen angegebenen Codecs unterstützen.
DTLS-Handshake
SRTP-Streams werden durch einen anfänglichen Datagram Transport Layer Security-Handshake („DTLS“, RFC
9147) zwischen den Peers gesichert.
DTLS ist traditionell ein Client-Server-Protokoll. Während des Signalisierungsprozesses stimmt ein Peer zu, als Server zu fungieren, während der andere als Peer fungiert.
Da jeder SRTP-Stream möglicherweise eine eigene dedizierte DTLS-Verbindung hat, wird in jeder Medienbeschreibung eines von drei Attributen angegeben, um die Rolle des Peers beim DTLS-Handshake anzugeben:
a=setup:actpass: Der Peer, der das Angebot sendet, überlässt die Auswahl dem Remote-Peer.
a=setup:active: Dieser Peer fungiert als Client.
a=setup:passive: Dieser Peer fungiert als Server.
Beschreibungen für Anwendungsmedien
Datenkanäle (RFC 8831) sind eine Abstraktion des Stream Control Transmission Protocol („SCTP“, RFC
9260).
Damit Datenchannels während der ersten Signalisierungsphase geöffnet werden können, muss das Angebot eine application media description enthalten. Im Gegensatz zu Audio- und Videobeschreibungen werden in App-Beschreibungen keine Richtung oder Codecs angegeben.
ICE-Kandidaten
Die Interactive Connectivity Establishment-Kandidaten („ICE“, RFC
8445) eines Peers sind eine Liste von Routen, die ein Remote-Peer zum Herstellen einer Verbindung verwenden kann.
Das kartesische Produkt der Listen der beiden Peers, auch Kandidatenpaare genannt, stellt die potenziellen Routen zwischen zwei Peers dar. Diese Paare werden getestet, um die optimale Route zu ermitteln.
Hier sehen Sie ein Angebot mit einer Audio-Media-Beschreibung:
Abbildung 1: Beispiel für ein Angebot mit einer Beschreibung von Audiomedien.
Der Remote-Peer antwortet mit einer SDP-Antwort, die dieselbe Anzahl von Media-Beschreibungszeilen enthält. Jede Zeile gibt an, welche Media der Remote-Peer über die SRTP-Streams an den anbietenden Client zurücksendet. Der Remote-Peer kann auch bestimmte Streams des Anbieters ablehnen, indem er den entsprechenden Media-Deskriptoreintrag auf recvonly setzt.
Bei der Meet Media API senden Clients immer das SDP-Angebot, um eine Verbindung herzustellen. Meet ist nie der Initiator.
Dieses Verhalten wird intern von den Referenzclients (C++, TypeScript) verwaltet. Entwickler benutzerdefinierter Clients können jedoch PeerConnectionInterface von WebRTC verwenden, um ein Angebot zu generieren.
Damit eine Verbindung zu Meet Meet hergestellt werden kann, muss das Angebot bestimmte Anforderungen erfüllen:
Der Client muss immer als Client im DTLS-Handshake fungieren. Daher muss in jeder Medienbeschreibung im Angebot entweder a=setup:actpass oder a=setup:active angegeben werden.
Jede Media-Textzeile muss alle erforderlichen Codecs für den jeweiligen Medientyp unterstützen:
Audio:Opus
Video:VP8, VP9, AV1
Damit Audio empfangen werden kann, muss das Angebot genau drei Audio-Media-Beschreibungen enthalten, die nur zum Empfangen verwendet werden. Dazu müssen Sie Transceiver für das Peer-Verbindungsobjekt festlegen.
Damit Sie Videoinhalte erhalten können, muss das Angebot 1–3 Media-Beschreibungen für den reinen Videoempfang enthalten. Dazu müssen Sie Transceiver für das Peer-Verbindungsobjekt festlegen.
Das Angebot muss immer Datenkanäle enthalten. Mindestens die Kanäle session-control und media-stats sollten immer geöffnet sein. Alle Datenchannels müssen ordered sein.
Hier ist ein vollständiges Beispiel für ein gültiges SDP-Angebot und eine passende SDP-Antwort. Bei diesem Angebot wird eine Meet Media API-Sitzung mit Audio- und einem einzelnen Videostream ausgehandelt.
Es gibt drei Audio-Media-Beschreibungen, eine Video-Media-Beschreibung und die erforderliche Anwendungs-Media-Beschreibung.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2026-09-15 (UTC)."],[],[]]