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
Ziehen Sie den Remote-Videostream ab, das Videostream-Format ist rtsp
Erforderliche Tools und Software
1. Link zur offiziellen Website des ffmpeg-Befehlszeilentools. Die Vorteile der Auswahl sind:
Kostenlos
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
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); }) }
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!