Heim > Web-Frontend > js-Tutorial > Hauptteil

Nodejs führt Live-Video-Streaming auf Basis von ffmpeg durch

php中世界最好的语言
Freigeben: 2018-04-14 15:39:08
Original
13742 Leute haben es durchsucht

Dieses Mal werde ich Ihnen NodeJS auf Basis von ffmpeg für das Live-Video-Streaming vorstellen. Was sind die Vorsichtsmaßnahmen für NodeJS auf Basis von ffmpeg für Live-Video-Streaming?

Mit ffmpeg als Kern verpackt es eine Client-Software, die Transkodierung im LAN empfängt und an das Internet weiterleitet. In diesem Artikel werden nur die Grundfunktionen von ffmpeg verwendet, einschließlich Streaming, Transkodierung, Streaming und einfache Wiedergabeeinstellungen.

Workflow

  1. Ziehen Sie den Remote-Videostream ab, das Videostream-Format ist rtsp

  2. , konvertieren Sie ihn in das allgemeine Wiedergabeformat rtmp

  3. und übertragen Sie ihn an den Wiedergabeport rtmp ://Ihre Push-Endadresse, Benutzer können Inhalte direkt abspielen, nachdem sie mit der Wiedergabesoftware eine Verbindung zu dieser Adresse hergestellt haben

Erforderliche Tools und Software

1. Link zur offiziellen Website des ffmpeg-Befehlszeilentools. Die Vorteile der Auswahl sind:

  1. Kostenlos

  2. Keine Installation erforderlich, wodurch die Komplexität der Benutzerbedienung erheblich reduziert wird

  3. Startaufruf über die Befehlszeile

2. Die Versionsnummer von nodejs ist v6.11.3. (Electron wird im eigentlichen Projekt verwendet, aber wenn keine Notwendigkeit besteht, es in einen Client zu packen, können NodeJS normal ausgeführt werden)

3. Die TSC-Versionsnummer ist v2.6.1. Das Projekt verwendet TypeScript als Hauptschreibsprache und es gibt kein Problem, wenn Sie JavaScript verwenden.

Wenn Sie tsc verwenden, verwenden Sie bitte Version 2.0 oder höher. Das integrierte @type-Tool verbessert die Codierungseffizienz erheblich.

4. Die Versionsnummer von fluent-ffmpeg ist v2.1.2. Dieses NodeJS-Paket kapselt den Befehlszeilenaufrufteil von ffmpeg, was die Lesbarkeit des Codes verbessert. Wenn Sie mit dem ffmpeg-Befehlszeilen-Benutzerhandbuch vertraut sind, müssen Sie dieses Paket nicht verwenden.

  npm install --save fluent-ffmpeg
  //使用js编码的用户,可以忽略下条命令
  npm install --save @types/fluent-ffmpeg
Nach dem Login kopieren

VLC-Wiedergabesoftware. Wird verwendet, um zu überwachen, ob Streaming, Transkodierung und Wiedergabe normal sind. Offizieller Website-Link

Implementierungscode

  const ffmpegPath = "./dist/ffmpegProgram/bin/ffmpeg.exe";
  const ffprobePath = "./dist/ffmpegProgram/bin/ffprobe.exe";
  const flvtoolPath = "./dist/ffmpegProgram/bin/ffplay.exe";
  export function startPushVideo():void{
    getCommands().then((commands:ffmpegPaths[])=>{
      for(let key in commands){
        let command = commands[key];
        //设置输入流地址
        let ffCommand = ffmpeg(command.inputPath)
        //设置输出流地址
        .output(command.outputPath)
        //因需要打包客户端软件,故而将ffmpeg打包进软件中
        //需设置各应用程序的对应路径
        //若仅在本机使用,可以跳过该步骤
        //设置环境变量,添加 PATH 即可
        .setFfmpegPath(ffmpegPath)
        .setFfprobePath(ffprobePath)
        .setFlvtoolPath(flvtoolPath)
        //为保证灵活性,非必须参数采用配置文件读取模式
        .size(command.size);
        for(let key in command.args){
          ffCommand.outputOption(command.args[key]);
        }
        ffCommand.on("start",(commandLine)=>{
          //commandLine 为实际上调用的命令行命令,拼接逻辑为
          //您的ffmpeg所在路径 -i inputOptions 您的拉流协议和路径 outputOptions 推送流协议和地址
          //ffmpeg -i "rtsp://yourPullUrl" -f flv -r 25 -s 640x480 -an "rtmp://yourPushUrl"
          console.log('[' + showTime() + '] Vedio is Pushing !');
          console.log('[' + showTime() + '] Spawned Ffmpeg with command !');
          console.log('[' + showTime() + '] Command: ' + commandLine);
        })
        .on('error', function(err, stdout, stderr) {
          console.log('error: ' + err.message);
          console.log('stdout: ' + stdout);
          console.log('stderr: ' + stderr);
        })
        .on('end', function() {
          console.log('[' + showTime() + '] Vedio Pushing is Finished !');
        })
        .run();
      }
    },(error)=>{
      console.log('error: ' + error);
    })
  }
Nach dem Login kopieren

Zusammenfassung

Der durch Abhören von „start“ erhaltene Befehl kann auch über exec (yourCommandLine) aufgerufen werden, ffmpeg kann jedoch derzeit nicht gesteuert werden. Betriebsergebnisse. Nach Programmende läuft der ffmpeg-Prozess noch, bis der Stream einen Fehler meldet oder der Prozess manuell gestoppt wird. Es ist nicht klar, warum fluent-ffmpeg Sie können den Drittanbieterprozess benachrichtigen, dass er geschlossen wird, nachdem der Ontologieprozess beendet ist. Die Vermutung besteht darin, den Prozess über die Befehlszeileneingabe abzubrechen, und sei es nur über ChildProcess.kill() Es ist nicht möglich, Prozesse Dritter zu schließen.

Bei der Ausführung auf einem I5 8G-Rechner hat Single-Stream-Push etwa 35 % der CPU belegt. Multi-Stream-Push erfordert andere Lösungen.

Ich glaube, dass Sie die Methode zum Lesen dieses Artikels beherrschen. Weitere spannende Artikel finden Sie auf der chinesischen PHP-Website.

Empfohlene Lektüre:

Detaillierte Erläuterung der Schritte zum Festlegen globaler Stile in Vue2.0

Verwenden Sie NodeJS zum Transkodieren Videos

Welche Schritte sind erforderlich, um eine vollständige Angular4 FormText-Komponente zu implementieren

Das obige ist der detaillierte Inhalt vonNodejs führt Live-Video-Streaming auf Basis von ffmpeg durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!