@lunionlab/meet-client-js
v1.0.0
Published
SDK client lunion.meet : connexion au SFU str0m en RTCPeerConnection standard (Str0mClient), publication/abonnement des pistes, sans mediasoup.
Readme
@lunionlab/meet-client-js
SDK client web pour lunion.meet — connexion au SFU, publication et abonnement des pistes
média via RTCPeerConnection standard (offer/answer sur WebSocket). Framework-agnostique,
sans dépendance runtime.
1.0.0 : la classe cliente s'appelle
LunionMeetClient, surRTCPeerConnectionstandard. Depuis 0.1.x,SfuClient/loadDevice/createSendTransport/producesont remplacés parLunionMeetClient. Voir « Migration » ci-dessous.
import { LunionMeetClient } from "@lunionlab/meet-client-js";
const client = new LunionMeetClient(
{ url: "wss://meet.lunion-lab.com/sfu", iceServers: [{ urls: "stun:stun.l.google.com:19302" }] },
{
onWelcome: ({ selfId, peers }) => console.log("connecté", selfId, peers.length, "pairs"),
onPeerJoined: ({ peerId, name }) => console.log("arrivée", name),
// Piste distante : `streams[0].id` = id du pair source. `onTrackMeta` distingue cam / écran / micro.
onTrack: (track, streams, _receiver, _mid) => attachToVideoElement(streams[0], track),
onTrackMeta: ({ mid, peerId, source }) => console.log(peerId, source), // "cam" | "mic" | "screen"
},
);
// Résout le `welcome` (après admission si salle d'attente). `token` émis côté backend par
// @lunionlab/meet-server-sdk ; sans token = mode ouvert (hôte + salle d'attente).
const welcome = await client.connect("reunion-1", "Awa", /* cid */ undefined, token);
// Publier caméra (simulcast auto) + micro
await client.publishCamera();
await client.publishMic();API essentielle
new LunionMeetClient({ url, iceServers? }, handlers?)connect(room, name, cid?, token?): Promise<LunionMeetWelcome>publishCamera(constraints?, { codec? }),publishMic(),publishTrack(track, stream, encodings?, codec?)(bas niveau) —codec= mimeType préféré, ex."video/H264"(accélération matérielle mobile/Safari) ; 0.3.0+setTrackSource(mid, "screen")— étiqueter une piste (partage d'écran) ; relayé aux pairs viaonTrackMetastartRecording(peerId?),stopRecording(recordingId?)(modérateur)- Actions plan de contrôle : chat/réaction, salle d'attente (admit/deny), modération, rôles
- Handlers :
onWelcome,onTrack,onTrackMeta,onPeerJoined/Left,onChat,onReaction,onWaiting/onJoinRequest,onRecordingStatus,onRoomFull,onProducerActive,onIceStateChange,onClose…
Dynacast (0.3.0+) : quand vous êtes seul (aucun abonné à vos pistes), le SDK coupe
automatiquement l'upload vidéo à la source et le reprend dès qu'un pair s'abonne — économie
d'uplink transparente. État exposé via producerActive / handler onProducerActive(active).
Le SFU parle SDP offer/answer standard sur /ws : aucune notion de rtpCapabilities,
createWebRtcTransport ou produce/consume. Le token (via le sous-protocole lunion.token.<JWT>,
hors URL) applique les droits canPublish / canSubscribe / roomAdmin… côté SFU.
Chiffrement de bout en bout (optionnel) : E2eeTransformer (AES-GCM par frame, SFU aveugle).
Migration 0.1.x → 0.2.0
| Avant (≤ 0.1.x) | Après (0.2.0) |
|---|---|
| new SfuClient(handlers, url) | new LunionMeetClient({ url }, handlers) |
| connect({ room, name, token }) | connect(room, name, cid?, token?) |
| loadDevice(welcome.rtpCapabilities) | (supprimé — RTCPeerConnection standard) |
| createSendTransport() / createRecvTransport() | (supprimé) |
| produce(track, "camera") | publishCamera() / publishMic() |
| onNewProducer → subscribe(id) | onTrack(track, streams, …) (abonnement auto) |
⚠️ Un client 0.1.x n'est plus compatible avec le SFU actuel : mettez à jour vers 0.2.0 (déployez le SFU à jour avant les clients).
