Docs/Diffusion en direct et signalisation

Diffusion en direct et signalisation

La vidéo circule en WebRTC via un canal de signalisation socket.io — les flux média ne transitent jamais par l'API REST.

Connexion

Ouvrez une connexion socket.io vers /socket.io avec une authentification à la poignée de main. Les invités produisent (caméra) ; les agents consomment (visionnage).

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
});
ChampDescription
codeLe code d'invitation (invité) ou le code de visionnage agent (agent) — le segment de chemin avant le # dans inviteUrl ou agentViewUrl.
tokenLe secret extrait du fragment d'URL après le # — le jeton d'invitation pour un invité, le jeton de visionnage agent pour un agent.
roleguest ou agent.

Rôles

  • Invité — produit Le navigateur du client se connecte avec role: "guest" et produit sa caméra et son micro ; il ne consomme jamais le flux d'un autre pair.
  • Agent — consomme La visionneuse de l'agent se connecte avec role: "agent" et consomme le flux de l'invité. Son jeton de visionnage agent accorde aussi (ou refuse) la permission de capturer des instantanés et de dessiner des annotations.

Cycle de vie de la session

Quand l'invité se connecte, le statut de la session passe à live et startedAt est renseigné. Quand l'invité se déconnecte, le statut passe à ended, endedAt est renseigné, et la salle SFU est démontée — la déconnexion d'un agent ne termine pas la session.

Événements de signalisation

Le client émet des requêtes et le serveur accuse réception de chacune par une réponse — annotation est un relais sans accusé de réception. Les diffusions sont envoyées par le serveur à chaque autre pair de la salle de session.

Requêtes du client

ÉvénementDescription
getRouterRtpCapabilitiesRécupère les capacités RTP du routeur mediasoup pour la session, en créant sa salle SFU au premier appel.
createTransportCrée un transport WebRTC sur le SFU — un transport d'envoi pour les invités, un transport de réception pour les agents.
connectTransportTermine la négociation DTLS d'un transport créé avec createTransport.
produceRéservé aux invités. Démarre la production d'une piste média sur un transport d'envoi ; les autres pairs sont notifiés via new-producer.
getProducersListe les producteurs actuellement disponibles à la consommation dans la session.
consumeRéservé aux agents. Démarre la consommation de la piste d'un producteur sur un transport de réception.
resumeConsumerReprend un consommateur créé en pause, afin que le média commence à circuler.
annotationRelaie un trait d'annotation AR aux autres pairs de la session ; nécessite la permission d'annotation du jeton de visionnage agent.

Diffusions du serveur

ÉvénementDescription
peer-joinedEnvoyé à la salle quand un autre pair — invité ou agent — se connecte.
peer-leftEnvoyé à la salle quand un autre pair se déconnecte.
new-producerEnvoyé aux agents quand l'invité commence à produire une nouvelle piste, pour qu'ils sachent appeler consume.
session-endedEnvoyé à tout le monde dans la salle quand l'invité se déconnecte et que la session se termine.

Préférez la visionneuse hébergée

La plupart des intégrations n'utilisent jamais la signalisation
La plupart des intégrations intègrent agentViewUrl dans une iframe et ne touchent jamais à la signalisation directement — n'y recourez que pour construire une visionneuse entièrement personnalisée. Consultez Sessions pour savoir comment générer un jeton agent.
Diffusion en direct et signalisation