Heim >Web-Frontend >js-Tutorial >Janus WebRTC-Server und SFU: eine Echtzeit-Videoanruf-App

Janus WebRTC-Server und SFU: eine Echtzeit-Videoanruf-App

Susan Sarandon
Susan SarandonOriginal
2024-11-02 16:55:29419Durchsuche

In diesem Artikel erstellen wir eine Videoanruf-App mit Janus WebRTC-Server und SFU

Wir werden auch mehr über Metered.ca SFU erfahren und warum es eine bessere Option als Janus Server ist

Was ist Janus?

Janus ist ein Open-Source-WebRTC-SFU-Server für allgemeine Zwecke. Es handelt sich um ein modulares Gateway, das Echtzeit-Kommunikationsanwendungen durch die Handhabung der komplexen WebRTC-Protokolle ermöglicht und einen stabilen Server für den Medienaustausch bereitstellt

Hauptfunktionen von Janus SFU

  • Modulare Architektur: Janus verfügt über ein Plugin-basiertes System, bei dem jedes Plugin über bestimmte Funktionen verfügt. Diese Modularität ermöglicht eine individuelle Anpassung und Erweiterung

  • Protokollverwaltung: Janus verwaltet die Signalisierung und Aushandlung, die für den Aufbau von WebRTC-Verbindungen erforderlich sind.

  • Interoperabilität: Janus unterstützt Mediencodecs und ist mit verschiedenen Clients und Browsern kompatibel, sodass Janus eine umfassende Kompatibilität aufweist

  • Skalierbarkeit: Janus wurde für die effiziente Handhabung mehrerer Verbindungen entwickelt und ist innerhalb einer bestimmten geografischen Zone skalierbar. (das heißt, es funktioniert einwandfrei, wenn sich alle Benutzer, die Janus verwenden, in einer kleinen geografischen Zone befinden)

SFU (Selective Forwarding Unit) verstehen

Eine SFU oder eine Selective Forwarding Unit ist eine Medienserverarchitektur, die in WebRTC-Apps verwendet wird, um Medienströme effizient zwischen verschiedenen Medienteilnehmern weiterzuleiten

Die SFU empfängt eingehende Videostreams von jedem Teilnehmer und leitet die Streams dann je nach Wunsch selektiv an andere Teilnehmer weiter.

Das heißt, jeder Teilnehmer erhält die Streams, die der Teilnehmer anfordert, während alle Teilnehmer ihre Streams an die SFU übertragen

Vorteile der Verwendung von SFU für die effiziente Weiterleitung von Medienströmen

  1. Skalierbarkeit: SFU kann eine große Anzahl von Verbindungen verarbeiten, da die SFU keine rechenintensiven Aufgaben wie Kodierung und Dekodierung übernimmt, sondern die Streams lediglich an die Benutzer weiterleitet

  2. Geringe Latenz: Die SFU leitet die Streams ohne Verarbeitung weiter, was zu einer geringen Latenz führt. Wenn sich Ihre Benutzer jedoch auf der ganzen Welt befinden, benötigen Sie einen global verteilten SFU-Dienst wie metered.ca cloud sou

  3. Bandbreitenoptimierung

    1. Simulcast-Unterstützung: SFU kann mehrere Streams unterschiedlicher Qualität vom selben Teilnehmer streamen. Kunden können für ein reibungsloses Video-/Audio-Streaming verschiedene Streaming-Qualitäten wählen, die am besten zu ihren Geräten und Netzwerkfunktionen passen
    2. Selektives Abonnement: Kunden können nur die Streams abonnieren, die sie benötigen, wodurch unnötige Bandbreitennutzung reduziert wird.
  4. Flexibilität und Kontrolle: Teilnehmer haben eine größere Flexibilität darüber, was sie empfangen möchten. Wenn sie beispielsweise nur Audio- oder Videostreams ausgewählter Teilnehmer empfangen möchten, haben sie die Möglichkeit dazu Mach das

  5. Kosteneffizienz: Da SFU im Vergleich zu MCU weniger Verarbeitung erfordert, kann eine kleinere Instanz in der Cloud für Sie arbeiten

  6. Erhaltung der Medienqualität: SFU bewahrt die Medienqualität, da sie keine Verarbeitung der Medienströme durchführt, sondern die Streams lediglich an die gewünschten Teilnehmer weiterleitet.

  7. Einfachere Implementierung erweiterter Funktionen

    1. Dynamische Layouts-Kunden können ihre eigenen Layouts mit den Videostreams anpassen, die sie empfangen. Anstelle vordefinierter Layouts, die Sie mit Video-SDK und APIs erhalten
    2. Erkennung aktiver Sprecher: SFU kann Streams nur des aktiven Sprechers weiterleiten, wodurch der Fokus verbessert und unnötige Datenübertragungen reduziert werden.
    3. Aufzeichnung und Streaming: SFU kann den Medienstream an Aufzeichnungsdienste oder Sendeplattformen weiterleiten, ohne die Kommunikation zwischen Geräten und Benutzern zu beeinträchtigen
  8. Verbesserte Zuverlässigkeit: Da keine Medienverarbeitung auf dem Server erfolgt, gibt es weniger Fehlerquellen. SFU kann aus Redundanzgründen auch geclustert werden, um sicherzustellen, dass die Dienste auch dann aktiv bleiben, wenn bei einem Server ein Problem auftritt.


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

Implementieren Sie Janus in Ihrer Anwendung

Die Integration von Janus SFU in Ihre App umfasst diese Schritte. Hier finden Sie eine Schritt-für-Schritt-Anleitung zur Implementierung von Janus in Ihre Anwendung.

Schritt 1: Einrichten des Janus-Servers

  1. Systemvorbereitung

    1. Servervorbereitung: Stellen Sie sicher, dass ein Ubuntu- oder Debian-Server läuft.
    2. Abhängigkeiten installieren: Janus erfordert Bibliotheken wie
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)

Sie können diese Abhängigkeiten problemlos auf Ubuntu oder Debian installieren

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

Janus herunterladen und erstellen

  • Klonen Sie das Repo
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)
  • Navigieren Sie zum Verzeichnis
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
  • Konfigurationsskripte generieren
git clone https://github.com/meetecho/janus-gateway.git
  • Konfigurieren Sie den Build
cd janus-gateway
  • Kompilieren und installieren
sh autogen.sh
  1. Janus konfigurieren

    1. Bearbeiten Sie die Konfigurationsdateien

      1. Die Datei befindet sich in /opt/janus/etc/janus/
      2. Wichtige Dateien sind janus.cfg, janus.transport.websockets.cfg und janus.plugin.videoroom.cfg
    2. Aktivieren Sie die benötigten Plugins

      1. Stellen Sie sicher, dass das Videoraum-Plugin aktiviert ist, um die SFU verwenden zu können
      2. Sie können auch den WebSockets-Transport konfigurieren, wenn Sie diesen für die Signalisierung in Ihrer Anwendung verwenden möchten
  2. SSL-Zertifikat einrichten

    1. SSL-Zertifikat generieren

      1. Sie können mit Lets Encrypt ein selbstsigniertes Zertifikat generieren, wenn Sie sichere Verbindungen verwenden möchten. Dies ist ein optionaler Schritt, wenn Sie sichere Verbindungen verwenden möchten
    2. Konfiguration aktualisieren

      1. Verweisen Sie die Konfigurationsdateien auf das SSL-Zertifikat
  3. Starten Sie den Janus-Server

    1. Run Janus
./configure --prefix=/opt/janus
  1. Funktion überprüfen

    1. Überprüfen Sie die Protokolle, um zu sehen, dass alles fehlerfrei läuft.

Schritt 2: Entwicklung der clientseitigen Anwendung

  1. Richten Sie die Entwicklungsumgebung ein

    1. Wählen Sie ein Frontend-Framework

      1. Sie können zwischen React, Angular oder einem anderen Frontend-Framework wählen
    2. WebRTC-Bibliotheken einbeziehen

      1. Sie können auch WebRTC-Hilfsbibliotheken wie adapter.js verwenden, um die Kompatibilität mit verschiedenen Browsern zu gewährleisten
  2. Signalisierungsserver einrichten

    1. Verbinden Sie sich über Websockets mit Janus
    2. Implementieren Sie den Handshake, um eine neue Sitzung zu erstellen, und hängen Sie dann ein Videoraum-Plugin an
  3. Erstellen Sie einen Videoraum oder treten Sie ihm bei

    1. Senden Sie eine Anfrage an den Janus-Server, um einen neuen Raum zu erstellen oder einem vorhandenen Raum auf dem Server beizutreten
  4. Verwalten Sie lokale Medienströme

    1. Zeigen Sie dem Benutzer die lokalen Medienstreams, wenn Sie möchten. Im späteren Abschnitt unten zeigen wir auch die Remote-Streams
make
sudo make install
sudo make configs

Hängen Sie den lokalen Stream an das Videoelement im HTML an, um den Stream für den Benutzer abzuspielen

5. Auf Janus veröffentlichen

  • Verwenden Sie die RTCPeerConnection, um ein SDP-Angebot zu erstellen

  • Senden Sie das Angebot über die API an Janus

  • Erhalten Sie die SDP-Antwort vom Janus und legen Sie sie als Remote-Beschreibung fest

6. Abonnieren Sie Remote-Streams

  • Verarbeiten Sie die Beitritts- und Ereignisnachrichten, um Benachrichtigungen von anderen Besprechungsteilnehmern abzuhören

  • Erstellen Sie die Peer-Verbindungen für Abonnenten, d. h. für jeden Remote-Teilnehmer müssen Sie eine neue RTCPeerConnection erstellen

  • Verarbeiten Sie Remote-Streams, rufen Sie die Remote-Streams ab und hängen Sie sie an HTML-Videoelemente an, um sie im Webbrowser des Benutzers als Video abzuspielen

  1. Ereignis-Listener und -Handler implementieren

    1. Überwachen Sie Ereignisse wie oniceconnectionstatechange und onicecandidate, behandeln Sie diese Ereignisse, wenn sie auftreten, und implementieren Sie bei Bedarf die Wiederverbindungslogik

Erkunden Metered.ca SFU als Alternative zu Janus

Was ist Metered Global Cloud SFU?

  1. Metered Global Cloud SFU ist eine cloudbasierte Selective Forwarding Unit von Metered.ca

  2. Mit Metered SFU können Entwickler jede Art von Anwendung erstellen, einschließlich Video-, Audio- und Datenübertragung

  3. Die Metered SFU läuft über die native WebRTC-API und HTTP, ohne dass proprietäre SDKs erforderlich sind.

  4. Benutzer werden basierend auf ihrem geografischen Standort auch automatisch zur nächstgelegenen SFU weitergeleitet

  5. Mehrere SFUs sind global über Hochgeschwindigkeitsverbindungen miteinander verbunden, um eine möglichst geringe Latenz zu gewährleisten

Hauptfunktionen von Metered Global SFU

  • Globale Verbreitung:

    • Benutzer werden basierend auf ihrem geografischen Standort mit der geschlossenen SFU verbunden und haben daher die geringste Latenz und hohe Leistung
  • Plattformunabhängigkeit

    • Es ist kein proprietäres SDK mehr erforderlich, sodass Sie mithilfe der WebRTC-eigenen APIs plattformübergreifend entwickeln können
  • Flexibles Publish-Subscribe-Modell:

    • Kapazität für unbegrenzte Teilnehmer und unterschiedliche Sitzungsstrukturen.
  • Skalierbarkeit

    • Sie können sowohl kleine Meetings als auch große Live-Streaming-Sitzungen mit Tausenden von Benutzern abhalten
  • Kosteneffizienz:

    • Die Gebühren basieren auf der Datenübertragungsrate und bieten erhebliche Einsparungen bei Szenarien mit hoher Nutzung.
    • Außerdem ist eine Pay-per-Use-Abrechnung möglich.

So funktioniert Metered SFU

Verbindungsfluss

  1. Verbindung herstellen

    1. Erstellen Sie eine Peer-Verbindung
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)

b. Senden Sie ein lokales SDP-Angebot

  • Generieren Sie das SDP-Angebot und senden Sie es dann mithilfe einer HTTP-API-Anfrage an die SFU von Metered.ca.

c. Empfangen Sie SFU-Remote-SDP

  • Legen Sie das empfangene SDP als Remote-Beschreibung auf Ihrer Peer-Verbindung fest

d. Verbindung hergestellt

  • Fügen Sie die Medienspur hinzu
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)
  1. Einen Track veröffentlichen

    1. Medienspur hinzufügen
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

b. SDP-Angebot erstellen und senden

  • Senden Sie das aktualisierte SDP-Angebot an die SFU

  • Empfangen Sie die SFU-Antwort und legen Sie sie für den SDP fest

  1. Abonnieren eines Titels

      1. Fordern Sie das Streckenabonnement bei der SFU an

        1. Senden Sie die Anfrage mit der Trackid und remoteTrackSessionId des gewünschten Streams an die SFU.
      1. Stellen Sie das empfangene SDP auf Ihrer Peer-Verbindung ein
      2. Verarbeiten Sie die eingehenden Medien und das Ontrack-Ereignis, um dem Benutzer den eingehenden Stream anzuzeigen

Vorteile von Metered SFU gegenüber Janus

  1. Skalierbarkeit

    1. Medienverteilung

      1. Kunden senden alle ihre Medienströme einmal an die SFU, egal wie viele Teilnehmer es gibt
      2. SFU verwaltet dann die Verteilung der Streams an alle Abonnenten, die die spezifischen Streams anfordern
    2. Groß angelegtes Streaming

      1. Metered SFU unterstützt kleine Meetings sowie groß angelegtes Live-Streaming für Tausende von Benutzern
  2. Plattformunabhängigkeit

    1. Keine proprietären SDKs erforderlich
    2. Reduzierte Komplexität
  3. Flexibles Publish-Subscribe-Modell

    1. Keine Raumbeschränkungen: Die gemessene SFU arbeitet in Sitzungen und nicht in vordefinierten Räumen.
    2. Sitzungen können ohne Begrenzung der Teilnehmerzahl veröffentlicht und Streams abonniert werden.
    3. Dynamische und skalierbare Designs: Am besten für skalierbare Designs wie Live-Streaming geeignet.
  4. Kosteneffizienz

    1. Metered SFU ist kosteneffizient, da wir die Abrechnung auf Basis der übertragenen Daten pro GB und nicht pro Minute abrechnen
    2. Nur ​​ausgehende Daten werden berechnet und eingehende Daten zur SFU sind kostenlos. Dies ist besonders kostengünstig bei Anwendungen wie der Überwachung, bei denen die Streams kontinuierlich auf die SFU hochgeladen, aber selten angesehen werden
  5. Globales SFU-Netzwerk:

    1. Die Metered SFU hat eine globale Reichweite mit SFUs auf allen 5 Kontinenten
    2. Die Medienströme werden über Hochgeschwindigkeits-SFU-Verbindungen weitergeleitet
    3. Dies ermöglicht Benutzern aus verschiedenen Teilen der Welt eine Kommunikation mit geringer Latenz

Vergleich der gemessenen SFU mit Janus

  1. Bereitstellung und Wartung

    1. Gemessene SFU:

      1. Cloudbasierte, verwaltete Service-Infrastruktur
      2. Entlastet Betriebs- und Wartungsaufgaben, sodass sich Entwickler auf Anwendungsfunktionen konzentrieren können
    2. Janus

      1. Erfordert Selbsthosting, Servereinrichtung und laufende Wartung. Außerdem ist es nicht völlig kostenlos, da Sie für Cloud-Server bezahlen müssen
      2. Erfordert die Verwaltung von Updates, Skalierung und Sicherheitspatches
  2. Skalierbarkeit und Leistung

    1. Gemessene SFU

      1. Automatisch skalierbar und kann eine beliebige Anzahl von Teilnehmern verarbeiten
      2. Mit SFUs an jedem geografischen Standort profitieren Teilnehmer in allen Teilen der Welt von geringer Latenz und hoher Leistung
    2. Janus

      1. nicht global skalierbar und abhängig von den von Ihnen zugewiesenen Serverressourcen
      2. Erfordert komplexe Setups wie Clustering für Anwendungsfälle mit hoher Auslastung
  3. Kostenstruktur

    1. Gemessene SFU

      1. Die Abrechnung erfolgt über die Datenübertragung in GB, was günstiger ist und auch „Pay-as-you-go“ erfolgt
      2. Berechenbarere und geringere Kosten für Anwendungen, die eine hohe Datennutzung erfordern
    2. Janus

      1. Obwohl Open Source mit der Nutzung von Janus verbunden ist, fallen Betriebskosten an, einschließlich Server-Hosting und -Wartung
      2. Die Kosten können durch Skalierung und hohe Nutzung erheblich steigen
  4. Flexibilität und Funktionen

    1. Gemessene SFU

      1. Flexibles und skalierbares Veröffentlichungs- und Abonnementmodell
      2. vereinfacht die Entwicklung mit Standard-WebRTC-APIs und unterstützt unbegrenzte Teilnahme
    2. Janus

      1. Bietet Plugin-basierte Architektur mit Funktionen wie Videoraum-Streaming und anderen
      2. Erfordert Konfiguration und mögliche Anpassung für bestimmte Anwendungsfälle
  5. Einfache Integration

    1. Gemessene SFU

      1. Vereinfacht den Entwicklungsprozess mit Standard-WebRTC-APIs
      2. Reduziert die Markteinführungszeit, da über die Einrichtung der Infrastruktur, Serveranforderungen usw. nachgedacht werden muss

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

Gemessene TURN-Server

  1. API: TURN-Serververwaltung mit leistungsstarker API. Sie können beispielsweise Anmeldeinformationen über die API hinzufügen/entfernen, Pro Benutzer/Anmeldeinformationen und Benutzermetriken über die API abrufen, Anmeldeinformationen über die API aktivieren/deaktivieren und Nutzungsdaten nach Datum über die API abrufen.

  2. Globales geografisches Standort-Targeting: Leitet den Datenverkehr automatisch an die nächstgelegenen Server weiter, um möglichst geringe Latenz und höchste Leistungsqualität zu gewährleisten. Weniger als 50 ms Latenz überall auf der Welt

  3. Server in allen Regionen der Welt: Toronto, Miami, San Francisco, Amsterdam, London, Frankfurt, Bangalore, Singapur, Sydney, Seoul, Dallas, New York

  4. Geringe Latenz: weniger als 50 ms Latenz, überall auf der Welt.

  5. Kostengünstig: Pay-as-you-go-Preisgestaltung mit verfügbaren Bandbreiten- und Mengenrabatten.

  6. Einfache Verwaltung: Erhalten Sie Nutzungsprotokolle, E-Mails, wenn Konten Schwellenwerte erreichen, Abrechnungsunterlagen sowie E-Mail- und Telefonsupport.

  7. Standardkonform: Entspricht RFCs 5389, 5769, 5780, 5766, 6062, 6156, 5245, 5768, 6336, 6544, 5928 über UDP, TCP, TLS und DTLS.

  8. Mehrmandantenfähigkeit: Erstellen Sie mehrere Anmeldeinformationen und trennen Sie die Nutzung nach Kunden oder verschiedenen Apps. Erhalten Sie Nutzungsprotokolle, Abrechnungsaufzeichnungen und Schwellenwertwarnungen.

  9. Unternehmenszuverlässigkeit: 99,999 % Betriebszeit mit SLA.

  10. Enterprise Scale: Ohne Begrenzung des gleichzeitigen Datenverkehrs oder des Gesamtdatenverkehrs. Gemessene TURN-Server bieten Unternehmensskalierbarkeit

  11. 5 GB/Monat kostenlos: Mit dem kostenlosen Plan erhalten Sie jeden Monat 5 GB kostenlose TURN-Servernutzung

  12. Läuft auf Port 80 und 443

  13. Unterstützt TURNS SSL, um Verbindungen durch Deep-Packet-Inspection-Firewalls zu ermöglichen.

  14. Unterstützt sowohl TCP als auch UDP

  15. Kostenloser, unbegrenzter STUN

Das obige ist der detaillierte Inhalt vonJanus WebRTC-Server und SFU: eine Echtzeit-Videoanruf-App. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn