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).
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
});| Champ | Description |
|---|---|
code | Le code d'invitation (invité) ou le code de visionnage agent (agent) — le segment de chemin avant le # dans inviteUrl ou agentViewUrl. |
token | Le secret extrait du fragment d'URL après le # — le jeton d'invitation pour un invité, le jeton de visionnage agent pour un agent. |
role | guest 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énement | Description |
|---|---|
getRouterRtpCapabilities | Récupère les capacités RTP du routeur mediasoup pour la session, en créant sa salle SFU au premier appel. |
createTransport | Crée un transport WebRTC sur le SFU — un transport d'envoi pour les invités, un transport de réception pour les agents. |
connectTransport | Termine la négociation DTLS d'un transport créé avec createTransport. |
produce | Ré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. |
getProducers | Liste les producteurs actuellement disponibles à la consommation dans la session. |
consume | Réservé aux agents. Démarre la consommation de la piste d'un producteur sur un transport de réception. |
resumeConsumer | Reprend un consommateur créé en pause, afin que le média commence à circuler. |
annotation | Relaie 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énement | Description |
|---|---|
peer-joined | Envoyé à la salle quand un autre pair — invité ou agent — se connecte. |
peer-left | Envoyé à la salle quand un autre pair se déconnecte. |
new-producer | Envoyé aux agents quand l'invité commence à produire une nouvelle piste, pour qu'ils sachent appeler consume. |
session-ended | Envoyé à 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
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.