Concetti dell'API Meet Media
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
L'API Google Meet Media consente alla tua app di partecipare a una conferenza di Google Meet
e di utilizzare i flussi di contenuti multimediali in tempo reale.
I client utilizzano WebRTC per comunicare con i server di Meet. I client di riferimento forniti (C++,
TypeScript) mostrano le pratiche consigliate e
ti invitiamo a utilizzarli come base per la tua app.
Tuttavia, puoi anche creare client WebRTC completamente personalizzati che rispettino
i requisiti
tecnici dell'API Meet Media.
Questa pagina descrive i concetti chiave di WebRTC necessari per una sessione dell'API Meet Media.
Segnalazione di offerta-risposta
WebRTC è un framework peer-to-peer (P2P) in cui i peer comunicano segnalandosi a vicenda. Per avviare una sessione, il peer che la avvia invia un'offerta SDP a un peer remoto. Questa offerta include i seguenti dettagli importanti:
Descrizioni dei contenuti multimediali per audio e video
Le descrizioni dei contenuti multimediali indicano cosa viene comunicato durante le sessioni P2P. Esistono tre tipi di descrizioni: audio, video e dati.
Per indicare n flussi audio, l'offerente include n descrizioni dei contenuti multimediali audio nell'offerta. Lo stesso vale per i video. Tuttavia, ci sarà al massimo una descrizione dei contenuti multimediali dati.
Senso di marcia
Ogni descrizione audio o video descrive i singoli flussi Secure Real-time Transport
Protocol (SRTP), regolati da RFC
3711. Questi sono bidirezionali, consentendo a due peer di inviare e ricevere contenuti multimediali sulla stessa connessione.
Per questo motivo, ogni descrizione dei contenuti multimediali (sia nell'offerta che nella risposta) contiene uno dei tre attributi che descrivono come deve essere utilizzato il flusso:
sendonly: invia contenuti multimediali solo dal peer che offre. Il peer remoto non invierà contenuti multimediali su questo flusso.
recvonly: riceve contenuti multimediali solo dal peer remoto. Il peer che offre non invierà contenuti multimediali su questo flusso.
sendrecv: entrambi i peer possono inviare e ricevere su questo flusso.
Codec
Ogni descrizione dei contenuti multimediali specifica anche i codec supportati da un peer. Nel caso dell' API Meet Media, le offerte dei client vengono rifiutate a meno che non supportino (almeno) i codec specificati nei requisiti tecnici.
DTLS handshake
I flussi SRTP sono protetti da un iniziale
Datagram Transport Layer Security ("DTLS", RFC
9147) handshake tra i peer.
DTLS è tradizionalmente un protocollo client-server; durante il processo di segnalazione, un peer accetta di fungere da server mentre l'altro funge da peer.
Poiché ogni flusso SRTP potrebbe avere la propria connessione DTLS dedicata, ogni descrizione dei contenuti multimediali specifica uno dei tre attributi per indicare il ruolo del peer nel DTLS handshake:
a=setup:actpass: il peer che offre si affida alla scelta del peer remoto.
a=setup:active: questo peer funge da client.
a=setup:passive: questo peer funge da server.
Descrizioni dei contenuti multimediali dell'applicazione
I canali di dati (RFC 8831) sono
un'astrazione del Stream Control Transmission Protocol ("SCTP", RFC
9260).
Per aprire i canali di dati durante la fase di segnalazione iniziale, l'offerta deve contenere una descrizione dei contenuti multimediali dell'applicazione. A differenza delle descrizioni audio e video, le descrizioni delle applicazioni non specificano la direzione o i codec.
Candidati ICE
I candidati Interactive Connectivity Establishment ("ICE", RFC
8445) di un peer sono un elenco di route che un peer remoto può utilizzare per stabilire una connessione.
Il prodotto cartesiano degli elenchi dei due peer, noto come le coppie di candidati,
rappresenta i potenziali percorsi tra due peer. Queste coppie vengono testate per determinare il percorso ottimale.
Ecco un'offerta con una descrizione dei contenuti multimediali audio:
Figura 1. Offerta di esempio con una descrizione dei contenuti multimediali audio.
Il peer remoto risponde con una risposta SDP contenente lo stesso numero di righe di descrizione dei contenuti multimediali. Ogni riga indica quali contenuti multimediali, se presenti, il peer remoto invia al client che offre tramite i flussi SRTP. Il peer remoto potrebbe anche rifiutare flussi specifici dall'offerente impostando la voce di descrizione dei contenuti multimediali su recvonly.
Per l'API Meet Media, i client inviano sempre l'offerta SDP per avviare una connessione. Meet non è mai l'iniziatore.
Questo comportamento viene gestito internamente dai client di riferimento
(C++, TypeScript),
ma gli sviluppatori di client personalizzati possono utilizzare PeerConnectionInterface di WebRTC per
generare un'offerta.
Per connettersi a Meet, l'offerta deve rispettare requisiti specifici
:
Il client deve sempre fungere da client nel DTLS handshake, quindi ogni descrizione dei contenuti multimediali nell'offerta deve specificare a=setup:actpass o a=setup:active.
Ogni riga descrittiva dei contenuti multimediali deve supportare tutti i codec richiesti per quel tipo di contenuti multimediali:
Audio:Opus
Video:VP8, VP9, AV1
Per ricevere l'audio, l'offerta deve includere esattamente 3 descrizioni dei contenuti multimediali audio di sola ricezione. Puoi farlo impostando i ricetrasmettitori sull'oggetto di connessione peer.
Per ricevere video, l'offerta deve includere 1-3 descrizioni dei contenuti multimediali video di sola ricezione. Puoi farlo impostando i ricetrasmettitori sull'oggetto di connessione peer.
L'offerta deve sempre includere i canali di dati. Come minimo, i canali session-control e media-stats devono essere sempre aperti. Tutti i canali di dati devono essere ordered.
Ecco un esempio completo di un'offerta SDP valida e di una risposta SDP corrispondente. Questa offerta negozia una sessione dell'API Meet Media con audio e un singolo flusso video.
Nota che sono presenti tre descrizioni dei contenuti multimediali audio, una descrizione dei contenuti multimediali video e la descrizione dei contenuti multimediali dell'applicazione richiesta.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2026-05-13 UTC."],[],[]]