Verwenden Sie Node-Media-Server, um einen einfachen Streaming-Media-Server zu erstellen

Verwenden Sie Node-Media-Server, um einen einfachen Streaming-Media-Server zu erstellen

Zeichnen Sie einige der Prozesse der Verwendung des Node-Media-Servers auf. Die Umgebung dieses Artikels ist Windows. Dieser Artikel ist für Anfänger geeignet.

Verwendete Dinge: nodeJs , ffmpeg , node-media-server .

Hier einige Punkte (bitte weisen Sie auf etwaige Fehler hin):

Node-Media-Server ist ein Streaming-Media-Server. Man kann ihn sich als eine Transitstation vorstellen, die dazu dient, das Stream-Format zu konvertieren oder einige Operationen am Video-Stream durchzuführen und die Stream-Adresse nach außen zu übertragen.

ffmpeg wird als Streaming-Tool verwendet, um das Video oder den Videostream, den Sie konvertieren müssen, auf den Streaming-Medienserver zu übertragen.

Beim Pulling-Stream wird der Videostream vom Streaming-Server abgerufen, und die Zuschauer sehen ihn, indem sie die vom Streaming-Server veröffentlichte Stream-Adresse abrufen. Wenn Sie es mit einem Videoplayer abspielen, ziehen Sie den Stream.

Installieren

Der Node-Media-Server wird auf Basis von Node.Js entwickelt, Sie müssen ihn daher zuerst mit npm installieren.

npm installiere Node-Media-Server

Schreiben und Ausführen von Node-Media-Server

Erstellen Sie eine neue app.js. Und schreiben Sie den folgenden Code, dann führen Sie app.js aus

const NodeMediaServer = erfordern('node-media-server');
const konfiguration = {
  rtmp:
    Hafen: 1935,
    Blockgröße: 60000,
    gop_cache: wahr,
    Ping: 60,
    ping_timeout: 30
  },
  http: {
    Port: 8000,
    allow_origin: '*',
  }
};
 
var nms = neuer NodeMediaServer(Konfiguration)
nms.run();

Sie können auf die Adresse localhost:8000/admin zugreifen, um auf die Node-Media-Server-Verwaltungsschnittstelle zuzugreifen. Die Screenshots sind wie folgt:

Verwenden Sie den FFmpeg-Befehl, um die Adresse zu pushen.

Pushen von Videodateien

Wenn Sie den folgenden Code ausführen, müssen Sie den Node-Media-Server starten.

ffmpeg -re -i ./video.mp4 -c copy -f flv rtmp://localhost:1935/live/STREAM_NAME

Der obige Befehl generiert zwei Stream-Adressen, nachdem er den Node-Media-Server durchlaufen hat. Eine Art RTMP. Ein flv. Ersteres kann auf einem Computer gespielt werden, Letzteres sowohl auf einem Mobiltelefon als auch auf einem Computer. Die RTMP-Adresse ist die Befehlsadresse in FFmpeg

Die FLV-Adresse lautet: http://localhost:8000/live/STREAM_NAME.flv

RTSP-Stream pushen

Um RTSP (Kamera-Videostream) zu pushen, ändern Sie einfach das obige ./video.mp4. Während des Tests stellte der Blogger fest, dass das Pushen von RTSP-Streams entweder zu einem grünen Bildschirm oder zu Paketverlusten führte. Insbesondere in Kombination mit HLS war die Paketverlustrate sogar noch höher. Daher wird die Verwendung von Befehlen zum Pushen von RTSP-Streams nicht empfohlen.

Konvertieren Sie das HLS-Stream-Format

Beachten Sie beim Konvertieren von HLS-Streams, dass Sie den Mediaroot-Parameter angeben müssen. Obwohl der Standardwert im Node-Media-Server festgelegt ist, wird dennoch empfohlen, ihn einmal festzulegen. Verwenden Sie dann die folgende Konfiguration.

const NodeMediaServer = erfordern('node-media-server');
const ff = erfordern('ffmpeg');
const konfiguration = {
  rtmp:
    Hafen: 1935,
    Blockgröße: 60000,
    gop_cache: wahr,
    Ping: 60,
    ping_timeout: 30
  },
  http: {
    Port: 8979,
    mediaroot: './media/', // Es wird empfohlen, allow_origin: '*' zu schreiben,
  },
  trans: { // Der Parameter hier ist der Trans-Parameter, nicht der Relay-Parameter. Die HLS-Konfiguration im Relay-Parameter ist ungültig ffmpeg: './bin/ffmpeg.exe', //Geben Sie den FFmpeg-Standort an tasks: [
      {
        App: 'live',
        ac: "ac",
        vc: "libx264",
        hls: stimmt,
        hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
        Bindestrich: wahr,
        dashFlags: '[f=dash:Fenstergröße=3:extra_Fenstergröße=5]'
      }
    ]
  }
};
 
var nms = neuer NodeMediaServer(Konfiguration)
nms.run();

Nachdem Sie den obigen Code gestartet haben, verwenden Sie FFmpeg, um den Stream zu pushen. Nach einer Weile werden Sie feststellen, dass im Verzeichnis, auf das mediaroot verweist, ein Ordner live/STREAM_NAME generiert wird, der die m3u8-Datei enthält. Da zunächst die m3u8 Datei erzeugt werden muss, kommt es bei einer Streaming Kamera zu einer relativ großen Verzögerung.

Die m3u8-Adresse lautet: http://localhost:8000/live/STREAM_NAME/index.m3u8

Wenn bei der M3U8-Wiedergabe Probleme auftreten, versuchen Sie, die Parameter „ac“ und „vc“ zu entfernen. Der OP hat diese beiden Parameter in der Praxis nicht verwendet.

Verwenden Sie Code, um RTSP zu streamen

Für einige Benutzer kann es erforderlich sein, den Videostream der RTSP-Kamera zu pushen, um eine Cross-End-Vorschau zu erhalten. Der Blogger empfiehlt diese Methode. Bei dieser Methode muss zum Ausführen des FFmpeg-Befehls nicht cmd verwendet werden. Beim Test des Bloggers betrug die Verzögerung 3 Sekunden (Intranet, da keine externe Netzwerkadresse vorhanden ist, ist das externe Netzwerk nicht sehr klar). Weniger Verzögerung.

Der Code lautet wie folgt:

const NodeMediaServer = erfordern('node-media-server');
const konfiguration = {
  rtmp:
    Hafen: 1935,
    Blockgröße: 60000,
    gop_cache: wahr,
    Ping: 60,
    ping_timeout: 30
  },
  http: {
    Port: 8979,
    Medienstamm: "./media/",
    allow_origin: '*',
  },
  Relais: {
    ffmpeg: './bin/ffmpeg.exe',
    Aufgaben:
      {
        App: 'live',
        Modus: "statisch",
        Rand: 'rtsp://admin:****@192.168.4.167:554/Streaming/Channels/101', //rtsp
        Name: "Technologie",
        rtsp_transport: "tcp", //["udp", "tcp", "udp_multicast", "http"]
      }
    ]
  },
};
 
var nms = neuer NodeMediaServer(Konfiguration)
nms.run();

Mit dieser Methode können zwei Videostreams generiert werden, ein RTMP- und ein FLV-Stream.

Zusammenfassen

Weil der Blogger einen Streaming-Media-Server hauptsächlich für das Projekt zur Übertragung des Kamera-Streams erstellt hat, die JAVA-Kollegen sich jedoch zuvor damit befasst hatten und feststellten, dass dies viele Hardwareressourcen verbrauchen würde. Der Blogger konnte jedoch nicht herausfinden, wie viele Ressourcen bei Verwendung des Node-Media-Servers verbraucht wurden, sodass noch spezifische Tests erforderlich sind. Um unnötigen Leistungsverbrauch beim Kamera-Streaming zu vermeiden, beabsichtigt der OP außerdem, den Server die Streaming-Media-Umschaltfunktion (mit Code zum Umschalten des RTSP-Streams) nur starten zu lassen, wenn der Beobachter die Vorschau initiiert. Wenn der Beobachter die Vorschau schließt, wird die Streaming-Media-Funktion sofort deaktiviert. Dadurch wird unnötiger Leistungsverbrauch vermieden. Schließlich kann es direkt über Code bedient werden, was bequemer ist und auch den Server etwas entlasten kann.

Dies ist das Ende dieses Artikels über die Verwendung von Node-Media-Server zum Erstellen eines einfachen Streaming-Media-Servers. Weitere Informationen zur Verwendung von Node-Media-Server zum Erstellen eines Streaming-Media-Servers finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Nodejs erstellt einen lokalen Server, um domänenübergreifende Probleme einfach zu lösen
  • So erstellen Sie einen lokalen Server und greifen mit nodejs auf Dateien zu
  • Zusammenfassung mehrerer Methoden zum Erstellen eines lokalen Dateiservers mit nodeJS
  • Tutorial zum Erstellen eines einfachen Webservers mit node.js
  • Nodejs erstellt einen einfachen Webserver, ausführliche Erklärung und Beispiel
  • So erstellen Sie einen Webserver mit Nodejs
  • Detaillierte Erläuterung von node.js zum Erstellen eines Proxyservers zum Anfordern von Daten
  • NodeJs erstellt einen lokalen Server und verwendet den Mobiltelefonzugriff, um das Beispiel zu erklären
  • Eine einfache Möglichkeit, einen statischen Dateiserver mit Node.js unter Windows zu erstellen
  • Node baut seinen eigenen Server über Express

<<:  Detaillierte Erläuterung des geplanten Ausführungsbefehls von Crontab unter Linux

>>:  So fügen Sie einer großen Datentabelle in MySQL Felder hinzu

Artikel empfehlen

Beispiel für die Kompilierung von LNMP im Docker-Container

Inhaltsverzeichnis 1. Projektbeschreibung 2. Ngin...

Implementierung der Docker-Bereitstellung des Nuxt.js-Projekts

Offizielle Docker-Dokumentation: https://docs.doc...

js implementiert einen einzigen Klick zum Ändern der Tabelle

Pure js implementiert eine mit einem Klick bearbe...

So ändern Sie das MySQL-Tabellenpartitionierungsprogramm

So ändern Sie das MySQL-Tabellenpartitionierungsp...

CSS3-Beispielcode zum Erreichen einer Elementbogenbewegung

So verwenden Sie CSS, um die Bogenbewegung von El...

Einführung in die Verwendung des MySQL pt-slave-restart-Tools

Inhaltsverzeichnis Beim Einrichten einer MySQL-Ma...

Lizenzschlüssel für VMware Workstation Pro 16 mit Nutzungs-Tutorial

VMware Workstation ist eine leistungsstarke virtu...

CSS-Spezifikation BEM CSS und OOCSS Beispielcode detaillierte Erklärung

Vorwort Aufgrund der unterschiedlichen Codiergewo...

Detaillierte Beispiele für Variablen- und Funktionspromotion in JavaScript

js-Ausführung Phase der lexikalischen Analyse: um...