Los clientes usan WebRTC para comunicarse con los servidores de Meet. Los clientes de referencia proporcionados (C++,
TypeScript) demuestran las prácticas recomendadas, y
te recomendamos que compiles directamente sobre ellos.
Sin embargo, también puedes compilar clientes de WebRTC completamente personalizados que cumplan con
los requisitos
técnicos de la API de Meet Media.
En esta página, se describen los conceptos clave de WebRTC necesarios para una sesión exitosa de la API de Meet Media.
Indicación de oferta y respuesta
WebRTC es un framework de par a par (P2P), en el que los pares se comunican entre sí. Para iniciar una sesión, el par iniciador envía una oferta
de SDP a un par remoto. Esta oferta incluye los siguientes detalles importantes:
Descripciones de contenido multimedia para audio y video
Las descripciones de contenido multimedia indican lo que se comunica durante las sesiones P2P. Existen tres tipos de descripciones: audio, video y datos.
Para indicar n transmisiones de audio, el oferente incluye n descripciones de contenido multimedia de audio en la oferta. Lo mismo sucede con el video. Sin embargo, solo habrá una descripción de contenido multimedia de datos como máximo.
Direccionalidad
Cada descripción de audio o video describe transmisiones individuales del Protocolo seguro de transporte
en tiempo real (SRTP), regidas por RFC
3711. Estas son bidireccionales, lo que permite que dos pares envíen y reciban contenido multimedia a través de la misma conexión.
Por lo tanto, cada descripción de contenido multimedia (tanto en la oferta como en la respuesta) contiene uno de los tres atributos que describen cómo se debe usar la transmisión:
sendonly: Solo envía contenido multimedia desde el par que ofrece. El par remoto no enviará contenido multimedia en esta transmisión.
recvonly: Solo recibe contenido multimedia del par remoto. El par que ofrece no enviará contenido multimedia en esta transmisión.
sendrecv: Ambos pares pueden enviar y recibir en esta transmisión.
Códecs
Cada descripción de contenido multimedia también especifica los códecs que admite un par. En el caso de
la API de Meet Media, las ofertas de clientes se rechazan, a menos que admitan
(al menos) los códecs especificados en los requisitos
técnicos.
Protocolo de enlace DTLS
Las transmisiones SRTP están protegidas por un protocolo de enlace inicial
seguridad de la capa de transporte para datagramas ("DTLS", RFC
9147) entre los pares.
DTLS es tradicionalmente un protocolo de cliente a servidor; durante el proceso de señalización, un par acepta actuar como servidor, mientras que el otro actúa como par.
Debido a que cada transmisión SRTP puede tener su propia conexión DTLS dedicada, cada descripción de contenido multimedia especifica uno de los tres atributos para indicar el rol del par en el protocolo de enlace DTLS:
a=setup:actpass: El par que ofrece se difiere a la elección del par remoto.
a=setup:active: Este par actúa como cliente.
a=setup:passive: Este par actúa como servidor.
Descripciones de contenido multimedia de la aplicación
Los canales de datos (RFC 8831) son
una abstracción del Protocolo de transmisión de control de flujo ("SCTP", RFC
9260).
Para abrir canales de datos durante la fase de señalización inicial, la oferta debe contener una descripción de contenido multimedia de la aplicación. A diferencia de las descripciones de audio y video, las descripciones de la aplicación no especifican la dirección ni los códecs.
Candidatos de ICE
Los candidatos de Interactive Connectivity Establishment ("ICE", RFC
8445) de un par son una lista de
rutas que un par remoto puede usar para establecer una conexión.
El producto cartesiano de las listas de los dos pares, conocido como los pares de candidatos,
representa las rutas potenciales entre dos pares. Estos pares se prueban para determinar la ruta óptima.
Esta es una oferta con una descripción de contenido multimedia de audio:
Figura 1. Oferta de ejemplo con una descripción de contenido multimedia de audio
El par remoto responde con una respuesta de SDP
que contiene la misma cantidad
de líneas de descripción de contenido multimedia. Cada línea indica qué contenido multimedia, si corresponde, el par remoto envía de vuelta al cliente que ofrece a través de las transmisiones SRTP. El par remoto también puede rechazar transmisiones específicas del oferente si configura esa entrada de descripción de contenido multimedia en recvonly.
En el caso de la API de Meet Media, los clientes siempre envían la oferta de SDP para iniciar una conexión. Meet nunca es el iniciador.
Este comportamiento se administra internamente mediante los clientes de referencia
(C++, TypeScript),
pero los desarrolladores de clientes personalizados pueden usar PeerConnectionInterface de WebRTC para
generar una oferta.
Para conectarse a Meet, la oferta debe cumplir con requisitos específicos
requirements:
El cliente siempre debe actuar como cliente en el protocolo de enlace DTLS, por lo que cada descripción de contenido multimedia de la oferta debe especificar a=setup:actpass o a=setup:active.
Cada línea descriptiva de contenido multimedia debe admitir todos los códecs requeridos para ese tipo de medio:
Audio:Opus
Video:VP8, VP9, AV1
Para recibir audio, la oferta debe incluir exactamente 3 descripciones de contenido multimedia de audio de solo recepción. Para ello, configura los transceptores en el objeto de conexión de pares.
Para recibir video, la oferta debe incluir de 1 a 3 descripciones de contenido multimedia de video de solo recepción. Para ello, configura los transceptores en el objeto de conexión de pares.
La oferta siempre debe incluir canales de datos. Como mínimo, los canales session-control y media-stats siempre deben estar abiertos. Todos los canales de datos deben estar ordered.
Este es un ejemplo completo de una oferta de SDP válida y una respuesta de SDP coincidente. Esta oferta negocia una sesión de la API de Meet Media con audio y una sola transmisión de video.
Observa que hay tres descripciones de contenido multimedia de audio, una descripción de contenido multimedia de video y la descripción de contenido multimedia de la aplicación requerida.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2026-09-18 (UTC)"],[],[]]