Maison > interface Web > js tutoriel > le corps du texte

Serveur Janus WebRTC et SFU : une application d'appel vidéo en temps réel

Susan Sarandon
Libérer: 2024-11-02 16:55:29
original
255 Les gens l'ont consulté

Dans cet article, nous allons créer une application d'appel vidéo avec le serveur Janus WebRTC et SFU

Nous allons également en apprendre davantage sur Metered.ca SFU et pourquoi c'est une meilleure option que Janus Server

Qu'est-ce que Janus ?

Janus est un serveur WebRTC SFU Open source à usage général. Il s'agit d'une passerelle modulaire qui facilite les applications de communication en temps réel en gérant les protocoles WebRTC complexes et fournit un serveur stable à des fins d'échange multimédia

Principales fonctionnalités de Janus SFU

  • Architecture modulaire : Janus dispose d'un système basé sur des plugins où chaque plugin a des fonctionnalités spécifiques. Cette modularité permet la personnalisation et l'extension

  • Gestion du protocole : Janus gère la signalisation et la négociation nécessaires à l'établissement des connexions webrtc.

  • Interopérabilité : Janus prend en charge les codecs multimédias et est compatible avec différents clients et navigateurs. Janus a donc une large compatibilité

  • Évolutivité : Conçu pour gérer efficacement plusieurs connexions, Janus est évolutif au sein d'une zone géographique spécifique. (c'est-à-dire que cela fonctionnera bien si tous les utilisateurs qui utilisent Janus se trouvent dans une petite zone géographique)

Comprendre SFU (Unité de renvoi sélectif)

Une SFU ou une unité de transfert sélectif est une architecture de serveur multimédia utilisée dans les applications WebRTC pour acheminer efficacement les flux multimédias entre différents participants multimédias

La SFU reçoit les flux vidéo entrants de chaque participant, puis transmet sélectivement les flux aux autres participants, comme demandé.

C'est-à-dire que chaque participant reçoit les flux qu'il demande tandis que tous les participants envoient leurs flux vers la SFU

Avantages de l'utilisation de SFU pour acheminer efficacement les flux multimédias

  1. Évolutivité : SFU peut gérer un grand nombre de connexions car la SFU n'implique pas de tâches de calcul intensives telles que l'encodage et le décodage, mais transmet simplement les flux aux utilisateurs

  2. Faible latence : Le SFU transmet les flux sans traitement, conduisant ainsi à une faible latence. Mais si vos utilisateurs sont partout dans le monde, vous avez besoin d'un service SFU distribué mondial tel que metered.ca cloud sou

  3. Optimisation de la bande passante

    1. Support de diffusion simultanée : SFU peut diffuser plusieurs flux de qualités différentes à partir du même participant. Les clients peuvent choisir de diffuser une qualité différente qui correspond le mieux à leurs appareils et aux capacités de leur réseau pour un streaming vidéo/audio fluide
    2. Abonnement sélectif : les clients peuvent s'abonner uniquement aux flux dont ils ont besoin, réduisant ainsi l'utilisation inutile de la bande passante.
  4. Flexibilité et contrôle : Les participants ont une plus grande flexibilité sur ce qu'ils souhaitent recevoir, par exemple s'ils souhaitent recevoir uniquement des flux audio ou vidéo de participants sélectionnés, ils ont alors la possibilité de fais ça

  5. Efficacité des coûts : Étant donné que SFU nécessite moins de traitement que MCU, une instance plus petite sur le cloud peut fonctionner pour vous

  6. Préservation de la qualité des médias : SFU préserve la qualité des médias car elle n'effectue aucun traitement sur les flux multimédias et transmet simplement les flux aux participants demandés.

  7. Mise en œuvre plus facile des fonctionnalités avancées

    1. Les Clients de mise en page dynamique peuvent personnaliser leurs propres mises en page avec les flux vidéo qu'ils reçoivent. Plutôt que les mises en page prédéfinies que vous obtenez avec le SDK vidéo et les API
    2. Détection du haut-parleur actif : SFU peut transmettre uniquement les flux du haut-parleur actif, améliorant ainsi la concentration et réduisant la transmission de données inutiles.
    3. Enregistrement et streaming : SFU peut transmettre le flux multimédia vers un service d'enregistrement ou des plateformes de diffusion sans affecter la communication entre les appareils et les utilisateurs
  8. Fiabilité améliorée : Sans traitement des médias sur le serveur, il y a moins de points de défaillance. SFU peut également être regroupé pour la redondance, garantissant ainsi que les services restent actifs même si un serveur rencontre un problème.


Janus WebRTC server and SFU: a real time video calling app

Implémenter Janus dans votre application

L'intégration de Janus SFU dans votre application implique ces étapes. Voici le processus étape par étape pour implémenter Janus dans votre application.

Étape 1 : Configuration du serveur Janus

  1. Préparation du système

    1. Préparation du serveur : assurez-vous qu'un serveur Ubuntu ou Debian est en cours d'exécution.
    2. Installer les dépendances : Janus nécessite des bibliothèques comme
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

vous pouvez facilement installer ces dépendances sur Ubuntu ou Debian comme

apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
Copier après la connexion
Copier après la connexion
Copier après la connexion

Téléchargez et construisez Janus

  • Cloner le dépôt
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • Accédez au répertoire
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
Copier après la connexion
Copier après la connexion
Copier après la connexion
  • Générer des scripts de configuration
git clone https://github.com/meetecho/janus-gateway.git
Copier après la connexion
  • Configurer la build
cd janus-gateway
Copier après la connexion
  • Compiler et installer
sh autogen.sh
Copier après la connexion
  1. Configurer Janus

    1. Modifier les fichiers de configuration

      1. Le fichier se trouve dans /opt/janus/etc/janus/
      2. Les fichiers importants incluent janus.cfg, janus.transport.websockets.cfg et janus.plugin.videoroom.cfg
    2. Activez les plugins nécessaires

      1. Assurez-vous que le plugin de la salle vidéo est activé afin d'utiliser le SFU
      2. Vous pouvez également configurer le transport WebSockets si vous souhaitez l'utiliser pour la signalisation dans votre application
  2. Configurer le certificat SSL

    1. Générer un certificat SSL

      1. Vous pouvez générer un certificat auto-signé à l'aide de Lets Encrypt si vous souhaitez utiliser des connexions sécurisées. Il s'agit d'une étape facultative si vous souhaitez utiliser des connexions sécurisées
    2. Mettre à jour la configuration

      1. Pointez les fichiers de configuration vers le certificat SSL
  3. Démarrez le serveur Janus

    1. Exécutez Janus
./configure --prefix=/opt/janus
Copier après la connexion
  1. Vérifier le fonctionnement

    1. Vérifiez les journaux pour voir que tout fonctionne sans aucune erreur.

Étape 2 : Développement de l'application côté client

  1. Configurer l'environnement de développement

    1. Choisissez un framework front-end

      1. Vous pouvez choisir entre React, Angular ou tout autre framework front-end
    2. Inclure les bibliothèques WebRTC

      1. Vous pouvez également utiliser les bibliothèques d'assistance WebRTC comme adapter.js pour la compatibilité avec différents navigateurs
  2. Établir un serveur de signalisation

    1. Connectez-vous à Janus via Websockets
    2. Implémentez la poignée de main afin de créer une nouvelle session puis attachez un plugin de salle vidéo
  3. Créer ou rejoindre une salle vidéo

    1. Envoyer une demande au serveur Janus pour créer une nouvelle salle ou rejoindre une salle existante sur le serveur
  4. Gérer les flux multimédias locaux

    1. Affichez les flux multimédias locaux à l'utilisateur si vous le souhaitez, nous afficherons également les flux distants dans la section ultérieure ci-dessous
make
sudo make install
sudo make configs
Copier après la connexion

Joignez le flux local à l'élément vidéo dans le HTML pour lire le flux à l'utilisateur

5. Publier sur Janus

  • Utilisez RTCPeerConnection pour créer une offre SDP

  • Envoyer l'offre à Janus en utilisant l'API

  • Recevez la réponse SDP du Janus et définissez-la comme description à distance

6. Abonnez-vous aux flux à distance

  • Gérez les messages de participation et d'événement pour écouter les notifications des autres participants à la réunion

  • Créez les connexions Peer pour les abonnés, c'est-à-dire pour chaque participant distant dont vous avez besoin pour créer une nouvelle RTCPeerConnection

  • Gérer les flux distants, récupérer les flux distants et les attacher aux éléments vidéo HTML pour les lire sur la vidéo sur le navigateur Web de l'utilisateur

  1. Implémenter l'écouteur et les gestionnaires d'événements

    1. Surveillez les événements comme oniceconnectionstatechange et onicecandidate et gérez ces événements lorsqu'ils se produisent et implémentez la logique de reconnexion si nécessaire

Explorer Metered.ca SFU comme alternative à Janus

Qu'est-ce que Metered Global Cloud SFU

  1. Metered Global Cloud SFU est une unité de transfert sélectif basée sur le cloud de Metered.ca

  2. Avec Metered SFU, les développeurs peuvent créer tout type d'application, y compris la transmission vidéo, audio et de données

  3. Le Metered SFU fonctionne à l'aide de l'API WebRTC native et de HTTP sans avoir besoin de SDK propriétaires.

  4. Les utilisateurs sont également automatiquement acheminés vers la SFU la plus proche en fonction de leur situation géographique

  5. Plusieurs SFU sont connectées globalement les unes aux autres à l'aide d'une interconnexion à haut débit, garantissant la latence la plus faible possible

Principales fonctionnalités de Metered Global SFU

  • Distribution mondiale :

    • Les utilisateurs sont connectés au SFU fermé en fonction de leur situation géographique et bénéficient ainsi d'une latence la plus faible et de performances élevées
  • Indépendance de la plateforme

    • Élimine le besoin de tout SDK propriétaire, vous permettant ainsi de développer sur différentes plates-formes à l'aide des propres API WebRTC
  • Modèle de publication-abonnement flexible :

    • Capacité de participants illimités et différentes structures de sessions.
  • Évolutivité

    • Vous pouvez organiser de petites réunions ainsi que des sessions de diffusion en direct à grande échelle avec des milliers d'utilisateurs
  • Efficacité des coûts :

    • Les frais sont basés sur le taux de transfert de données, offrant des économies significatives pour les scénarios d'utilisation élevée
    • Une facturation à l'utilisation est également disponible.

Comment fonctionne le SFU mesuré

Flux de connexion

  1. Établir une connexion

    1. Créer une connexion homologue
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

b. Envoyer une offre SDP locale

  • Générez l'offre SDP, puis envoyez-la à la SFU Metered.ca à l'aide d'une requête API HTTP.

c. Recevez le SDP à distance SFU

  • Définissez le SDP reçu comme description distante sur votre peerConnection

d. Connexion établie

  • Ajouter la piste média
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
  1. Publier un morceau

    1. Ajouter une piste multimédia
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
Copier après la connexion
Copier après la connexion
Copier après la connexion

b. Générer et envoyer une offre SDP

  • Envoyer l'offre SDP mise à jour à la SFU

  • Recevoir et définir la réponse de SFU au SDP

  1. S'abonner à un morceau

      1. Demander l'abonnement à la piste auprès de la SFU

        1. Envoyer la demande au SFU en utilisant le trackid et le remoteTrackSessionId du flux souhaité.
      1. Définissez le SDP reçu sur votre peerConnection
      2. Gérez les médias entrants et l'événement ontrack pour afficher le flux entrant à l'utilisateur

Avantages du SFU avec compteur par rapport à Janus

  1. Évolutivité

    1. Distribution média

      1. Les clients envoient tous leurs flux médias à la SFU une seule fois, peu importe le nombre de participants
      2. SFU gère ensuite la distribution des streams à tous les abonnés qui demandent les streams spécifiques
    2. Diffusion à grande échelle

      1. Metered SFU prend en charge les petites réunions ainsi que la diffusion en direct à grande échelle vers des milliers d'utilisateurs
  2. Indépendance de la plateforme

    1. Aucun SDK propriétaire requis
    2. Complexité réduite
  3. Modèle flexible de publication et d'abonnement

    1. Aucune contrainte de salle : le SFU mesuré fonctionne sur des sessions plutôt que sur des salles prédéfinies.
    2. Les sessions peuvent publier et s'abonner à des flux sans limite sur le nombre de participants.
    3. Conceptions dynamiques et évolutives : idéales pour les conceptions évolutives telles que la diffusion en direct.
  4. Efficacité des coûts

    1. Metered SFU est rentable car nous facturons en fonction des données transférées par Go plutôt que par minute
    2. Seules les données sortantes sont facturées et les données entrantes vers SFU sont gratuites, ce qui est particulièrement rentable dans des applications telles que la surveillance où les flux sont continuellement téléchargés vers SFU mais sont rarement consultés
  5. Réseau mondial SFU :

    1. Le Metered SFU a une portée mondiale avec des SFU sur les 5 continents
    2. Les flux multimédias sont acheminés via des liaisons d'interconnexion SFU à haut débit
    3. Cela permet aux utilisateurs de différentes parties du monde de bénéficier d'une communication à faible latence

Comparaison de SFU avec compteur avec Janus

  1. Déploiement et maintenance

    1. SFU avec compteur :

      1. Infrastructure de services gérée basée sur le cloud
      2. Décharge les responsabilités opérationnelles et de maintenance permettant aux développeurs de se concentrer sur les fonctionnalités de l'application
    2. Janus

      1. Nécessite l'auto-hébergement, la configuration du serveur et la maintenance continue. Il n'est pas non plus entièrement gratuit car vous devez payer pour les serveurs cloud
      2. Nécessite la gestion des mises à jour, de la mise à l'échelle et des correctifs de sécurité
  2. Évolutivité et performances

    1. SFU mesuré

      1. S'adapte automatiquement et peut gérer n'importe quel nombre de participants
      2. Avec des SFU dans chaque emplacement géographique, les participants du monde entier bénéficient d'une faible latence et de hautes performances
    2. Janus

      1. non évolutif à l'échelle mondiale et dépend des ressources du serveur que vous avez allouées
      2. Nécessite des configurations complexes comme le clustering pour les cas d'utilisation à charge élevée
  3. Structure des coûts

    1. SFU mesuré

      1. Facturé sur le transfert de données en Go, ce qui est moins cher et également payant au fur et à mesure
      2. Plus prévisible et moins coûteux pour les applications nécessitant une utilisation élevée des données
    2. Janus

      1. Bien qu'open source, l'utilisation de Janus entraîne des coûts opérationnels, notamment l'hébergement et la maintenance du serveur
      2. Les coûts peuvent augmenter considérablement en cas de mise à l'échelle et d'utilisation élevée
  4. Flexibilité et fonctionnalités

    1. SFU mesuré

      1. Modèle de publication et d'abonnement flexible et évolutif
      2. simplifie le développement avec les API WebRTC standard et prend en charge une participation illimitée
    2. Janus

      1. Propose une architecture basée sur des plugins avec des fonctionnalités telles que le streaming de salles vidéo et autres
      2. Nécessite une configuration et une personnalisation potentielle pour des cas d'utilisation spécifiques
  5. Facilité d'intégration

    1. SFU mesuré

      1. Simplifie le processus de développement avec les API WebRTC standards
      2. Réduit les délais de mise sur le marché en raison de la nécessité de réfléchir à la configuration de l'infrastructure, aux exigences du serveur, etc.

Janus WebRTC server and SFU: a real time video calling app

Serveurs TURN mesurés

  1. API : TURN gestion du serveur avec une API puissante. Vous pouvez faire des choses comme ajouter/supprimer des informations d'identification via l'API, récupérer par utilisateur/informations d'identification et métriques utilisateur via l'API, activer/désactiver les informations d'identification via l'API, récupérer les données d'utilisation par date via l'API.

  2. Ciblage de géolocalisation globale : Dirige automatiquement le trafic vers les serveurs les plus proches, pour une latence la plus faible possible et des performances de la plus haute qualité. moins de 50 ms de latence partout dans le monde

  3. Serveurs dans toutes les régions du monde : Toronto, Miami, San Francisco, Amsterdam, Londres, Francfort, Bangalore, Singapour, Sydney, Séoul, Dallas, New York

  4. Faible latence : moins de 50 ms de latence, partout dans le monde.

  5. Rentable : tarification à l'utilisation avec réductions sur la bande passante et le volume disponibles.

  6. Administration facile : Obtenez des journaux d'utilisation, des e-mails lorsque les comptes atteignent les limites de seuil, des enregistrements de facturation et une assistance par e-mail et par téléphone.

  7. Conforme aux normes : Conforme aux RFC 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 sur UDP, TCP, TLS et DTLS.

  8. Multi‑Tenancy : Créez plusieurs informations d'identification et séparez l'utilisation par client ou par différentes applications. Obtenez des journaux d'utilisation, des enregistrements de facturation et des alertes de seuil.

  9. Fiabilité d'entreprise : 99,999 % de disponibilité avec SLA.

  10. Échelle d'entreprise : Sans limite sur le trafic simultané ou le trafic total. Les serveurs TURN mesurés offrent une évolutivité d'entreprise

  11. 5 Go/mois gratuits : Obtenez 5 Go chaque mois d'utilisation gratuite du serveur TURN avec le forfait gratuit

  12. Fonctionne sur les ports 80 et 443

  13. Prend en charge TURNS SSL pour autoriser les connexions via des pare-feu d'inspection approfondie des paquets.

  14. Prend en charge TCP et UDP

  15. STUN gratuit et illimité

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!