Detailed explanation of node.js video streaming test based on FFMPEG
This article mainly introduces the detailed explanation of NODEJS based on FFMPEG video streaming test. The editor thinks it is quite good. Now I will share it with you and give you a reference. Let’s follow the editor to take a look, I hope it can help everyone.
With ffmpeg as the core, it packages a client software that receives transcoding in the LAN and pushes it to the Internet. This article only uses the basic functions of ffmpeg, including streaming, transcoding, streaming and simple playback settings.
Workflow
Pull the remote video stream, the video stream format is rtsp
-
Convert to common playback format rtmp
Push to the playback port rtmp://your push end address. Users can directly play the content after using the playback software to connect to this address
Required tools and software
1. ffmpeg command line tool official website link, the advantage of choosing it is:
Free
No installation required, greatly reducing user operation complexity
-
Command line startup call
2. The nodejs version number is v6.11.3. (Electron is used in the actual project, but if there is no requirement to package it into a client, nodejs can run normally)
3. The tsc version number is v2.6.1. The project uses TypeScript as the main writing language, and there is no problem if you use JavaScript.
If you use tsc, please use version 2.0 or above. The built-in @type tool will greatly improve the coding efficiency
4. The version number of fluent-ffmpeg is v2. 1.2. This nodejs package encapsulates the command line calling part of ffmpeg, which enhances the readability of the code. If you are familiar with the ffmpeg command line user manual, you do not need to use this package.
npm install --save fluent-ffmpeg //使用js编码的用户,可以忽略下条命令 npm install --save @types/fluent-ffmpeg
VLC playback software. Used to monitor whether streaming, transcoding, and playback are normal. Official website link
Implementation code
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); }) }
Summary
Through monitoring The command obtained by "start" can also be called through exec(yourCommandLine), but the running result of ffmpeg cannot be controlled at this time. After the program ends, the ffmpeg process is still running until the stream reports an error or the process is manually stopped. It is not clear yet why fluent-ffmpeg can notify the third-party process to close after the ontology process ends. The guess is that the process is cut off through command line input. If only through ChildProcess.kill(), the third-party process cannot be shut down.
When running on an I5 8G machine, single-stream push has occupied about 35% of the CPU. Multi-stream push requires other solutions.
Related recommendations:
Node.js design pattern uses streams for encoding
Asynchronous Node.js Flow control
nodejs implements the function of crawling website images_node.js
The above is the detailed content of Detailed explanation of node.js video streaming test based on FFMPEG. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











How to use WebSocket and JavaScript to implement an online speech recognition system Introduction: With the continuous development of technology, speech recognition technology has become an important part of the field of artificial intelligence. The online speech recognition system based on WebSocket and JavaScript has the characteristics of low latency, real-time and cross-platform, and has become a widely used solution. This article will introduce how to use WebSocket and JavaScript to implement an online speech recognition system.

WebSocket and JavaScript: Key technologies for realizing real-time monitoring systems Introduction: With the rapid development of Internet technology, real-time monitoring systems have been widely used in various fields. One of the key technologies to achieve real-time monitoring is the combination of WebSocket and JavaScript. This article will introduce the application of WebSocket and JavaScript in real-time monitoring systems, give code examples, and explain their implementation principles in detail. 1. WebSocket technology

Introduction to how to use JavaScript and WebSocket to implement a real-time online ordering system: With the popularity of the Internet and the advancement of technology, more and more restaurants have begun to provide online ordering services. In order to implement a real-time online ordering system, we can use JavaScript and WebSocket technology. WebSocket is a full-duplex communication protocol based on the TCP protocol, which can realize real-time two-way communication between the client and the server. In the real-time online ordering system, when the user selects dishes and places an order

How to use WebSocket and JavaScript to implement an online reservation system. In today's digital era, more and more businesses and services need to provide online reservation functions. It is crucial to implement an efficient and real-time online reservation system. This article will introduce how to use WebSocket and JavaScript to implement an online reservation system, and provide specific code examples. 1. What is WebSocket? WebSocket is a full-duplex method on a single TCP connection.

JavaScript and WebSocket: Building an efficient real-time weather forecast system Introduction: Today, the accuracy of weather forecasts is of great significance to daily life and decision-making. As technology develops, we can provide more accurate and reliable weather forecasts by obtaining weather data in real time. In this article, we will learn how to use JavaScript and WebSocket technology to build an efficient real-time weather forecast system. This article will demonstrate the implementation process through specific code examples. We

JavaScript tutorial: How to get HTTP status code, specific code examples are required. Preface: In web development, data interaction with the server is often involved. When communicating with the server, we often need to obtain the returned HTTP status code to determine whether the operation is successful, and perform corresponding processing based on different status codes. This article will teach you how to use JavaScript to obtain HTTP status codes and provide some practical code examples. Using XMLHttpRequest

Usage: In JavaScript, the insertBefore() method is used to insert a new node in the DOM tree. This method requires two parameters: the new node to be inserted and the reference node (that is, the node where the new node will be inserted).

How to install PHPFFmpeg extension on server? Installing the PHPFFmpeg extension on the server can help us process audio and video files in PHP projects and implement functions such as encoding, decoding, editing, and processing of audio and video files. This article will introduce how to install the PHPFFmpeg extension on the server, as well as specific code examples. First, we need to ensure that PHP and FFmpeg are installed on the server. If FFmpeg is not installed, you can follow the steps below to install FFmpe
