Transmisión en vivo y señalización
El video fluye por WebRTC intermediado por un canal de señalización socket.io — los medios nunca pasan por la API REST.
Conexión
Abre una conexión socket.io a /socket.io con autenticación en el handshake. Los invitados producen (cámara); los agentes consumen (visualización).
javascript
import { io } from "socket.io-client";
// Guest (camera) connection — code/token come from the invite URL:
// https://seeitlive.io/u/<code>#<token>
const socket = io("wss://api.seeitlive.io", {
path: "/socket.io",
auth: {
code: "aZ3kQ9",
token: "3n9F1Qk7xY2zR8vB5tW6uL0mC4pD1sA...",
role: "guest",
},
});
socket.on("connect", () => {
socket.emit("getRouterRtpCapabilities", (ack) => {
if (ack.ok) console.log(ack.data);
});
});
// Broadcast from the server when another peer's track becomes available.
socket.on("new-producer", ({ producerId, kind }) => {
// an agent connection would call "consume" here
});| Campo | Descripción |
|---|---|
code | El código de invitación (invitado) o el código de visualización de agente (agente) — el segmento de ruta antes del # en inviteUrl o agentViewUrl. |
token | El secreto tomado del fragmento de la URL tras el # — el token de invitación para un invitado, el token de visualización de agente para un agente. |
role | guest o agent. |
Roles
- Invitado — produce — El navegador del cliente se conecta con
role: "guest"y produce su cámara y micrófono; nunca consume el medio de otro par. - Agente — consume — El visor del agente se conecta con
role: "agent"y consume el flujo del invitado. Su token de visualización de agente también otorga (o niega) permiso para capturar instantáneas y dibujar anotaciones.
Ciclo de vida de la sesión
Cuando el invitado se conecta, el estado de la sesión pasa a live y se establece startedAt. Cuando el invitado se desconecta, el estado pasa a ended, se establece endedAt, y la sala SFU se destruye — la desconexión de un agente no termina la sesión.
Eventos de señalización
El cliente emite solicitudes y el servidor confirma cada una con una respuesta — annotation es un relevo sin confirmación. Las difusiones las envía el servidor a cada otro par en la sala de la sesión.
Solicitudes del cliente
| Evento | Descripción |
|---|---|
getRouterRtpCapabilities | Obtiene las capacidades RTP del router de mediasoup para la sesión, creando su sala SFU en el primer uso. |
createTransport | Crea un transporte WebRTC en el SFU — un transporte de envío para invitados, uno de recepción para agentes. |
connectTransport | Completa la negociación DTLS de un transporte creado con createTransport. |
produce | Solo invitados. Empieza a producir una pista de medios en un transporte de envío; los demás pares son notificados vía new-producer. |
getProducers | Lista los productores actualmente disponibles para consumir en la sesión. |
consume | Solo agentes. Empieza a consumir la pista de un productor en un transporte de recepción. |
resumeConsumer | Reanuda un consumidor creado en pausa, para que el medio empiece a fluir. |
annotation | Retransmite un trazo de anotación AR a los demás pares de la sesión; requiere el permiso de anotación del token de visualización de agente. |
Difusiones del servidor
| Evento | Descripción |
|---|---|
peer-joined | Enviado a la sala cuando otro par — invitado o agente — se conecta. |
peer-left | Enviado a la sala cuando otro par se desconecta. |
new-producer | Enviado a los agentes cuando el invitado empieza a producir una nueva pista, para que sepan llamar a consume. |
session-ended | Enviado a todos en la sala cuando el invitado se desconecta y la sesión termina. |
Prefiere el visor alojado
La mayoría de las integraciones nunca usan la señalización
La mayoría de las integraciones incrustan
agentViewUrl en un iframe y nunca tocan la señalización directamente — recurre a esto solo para construir un visor totalmente personalizado. Consulta Sesiones para saber cómo generar un token de agente.