Docs/Transmisión en vivo y señalización

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
});
CampoDescripción
codeEl 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.
tokenEl 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.
roleguest 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

EventoDescripción
getRouterRtpCapabilitiesObtiene las capacidades RTP del router de mediasoup para la sesión, creando su sala SFU en el primer uso.
createTransportCrea un transporte WebRTC en el SFU — un transporte de envío para invitados, uno de recepción para agentes.
connectTransportCompleta la negociación DTLS de un transporte creado con createTransport.
produceSolo invitados. Empieza a producir una pista de medios en un transporte de envío; los demás pares son notificados vía new-producer.
getProducersLista los productores actualmente disponibles para consumir en la sesión.
consumeSolo agentes. Empieza a consumir la pista de un productor en un transporte de recepción.
resumeConsumerReanuda un consumidor creado en pausa, para que el medio empiece a fluir.
annotationRetransmite 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

EventoDescripción
peer-joinedEnviado a la sala cuando otro par — invitado o agente — se conecta.
peer-leftEnviado a la sala cuando otro par se desconecta.
new-producerEnviado a los agentes cuando el invitado empieza a producir una nueva pista, para que sepan llamar a consume.
session-endedEnviado 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.
Transmisión en vivo y señalización