Comment créer un serveur Mediasoup
24 févr. 2024 · 2 min de lecture
Pour créer un serveur mediasoup il faut suivre ces étapes
- Détailler la marche à suivre
Créer un device
- Il faut récupérer le
rtpCapabilitiesexposé par le Router - Puis il faut Device.load côté client avec le
router.rtpCapabilitiesqu’on vient de récupérer
Créer un transport pour produce :
- Créer un transport côté serveur en premier important : router.createWebRtcTransport()
- Puis on créer côté client le device via
new Device()puis on load lerouterRtpCapabilitiesvianewDevice.load({ routerRtpCapabilities }) - Ensuite on créer le transport front via : device.createSendTransport()
- Côté client on doit s’abonner à l’event connect et l’event produce
- Connect : Quand l’event est déclanché côté client, il faut envoyer
dtlsParametersexposé partransport.once("connect")côté client- Une fois la réponse reçue, il faut appeler callback() ou errback()
- Produce : Quand l’event est déclanché côté client, il faut envoyer
kindetrtpParametersexposés partransport.once("produce")côté client- Une fois la réponse reçue, il faut appeler
callback({ id: produceId \})ou errback()
- Une fois la réponse reçue, il faut appeler
- Connect : Quand l’event est déclanché côté client, il faut envoyer
- Côté client on doit s’abonner à l’event connect et l’event produce
- Pour déclancher ces events, il faut créer un stream (audio ou video -> getUserMedia ou autre) puis appeler la méthode
transport.produce
const videoTrack = stream.getTracks()[0];
transport.produce({ track: videoTrack });
Créer un transport pour consume :
- Créer un transport côté serveur en premier important : router.createWebRtcTransport()
- Puis on créer côté client le device via
new Device()puis on load lerouterRtpCapabilitiesvianewDevice.load({ routerRtpCapabilities }) - Ensuite on créer le transport front via : device.createRecvTransport()
- Côté client on doit s’abonner à l’event connect
- Connect : Quand l’event est déclanché côté client, il faut envoyer
dtlsParametersexposé partransport.once("connect")côté client
- Connect : Quand l’event est déclanché côté client, il faut envoyer
- Côté client on doit s’abonner à l’event connect
- Pour déclancher cet event et consumer le transport qui emet le flux, il faut envoyer
clientRtpCapabilitiesetproducerId - Côté back il faut vérifier que le user peut bien consumer le flux via :
router.canConsume({
producerId,
rtpCapabilities: clientRtpCapabilities,
});
- Une fois cette étape terminée, on peut consume côté back le
producerIdetclientRtpCapabilitiespuis renvoyerconsumer.idetconsumer.rtpParameters - Côté front, on utilise les deux paramètres que nous venons de retourner du back, pour consumer côté client, le flux :
const consumer = await transport.consume({
id: consumerId, // consumer.id renvoyé par le back; consumer = celui du back
producerId,
rtpParameters, // consumer.rtpParameters renvoyé par le back; consumer = celui du back
kind: 'video',
});
- Et pour finir, on récupérer le track via
consumer.track(côté front) que l’on peut utiliser de cette façon :
const stream = new MediaStream([consumer.track]);
videoRef.current.srcObject = stream;