Home Web Front-end JS Tutorial Nodejs performs live video streaming based on ffmpeg

Nodejs performs live video streaming based on ffmpeg

Apr 14, 2018 pm 03:39 PM
ffmpeg javascript nodejs

This time I will bring you nodejs based on ffmpeg for video push and live broadcast. What are the precautions for nodejs based on ffmpeg for video push and live broadcast. The following is a practical case, let's take a look.

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.

work process

  1. Pull the remote video stream, the video stream format is rtsp

  2. Convert to the common playback format rtmp

  3. 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 advantages of choosing it are:

  1. Free

  2. No installation required, greatly reducing user operation complexity

  3. 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 youuse JavaScript.

If you use tsc, please use version 2.0 or above. The built-in @type tool will greatly improve coding efficiency

4. The fluent-ffmpeg version number 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 manual, you do not need to use this package.

  npm install --save fluent-ffmpeg
  //使用js编码的用户,可以忽略下条命令
  npm install --save @types/fluent-ffmpeg
Copy after login

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);
    })
  }
Copy after login

Summary

The command obtained by listening to "start" can also be called through exec(yourCommandLine), but ffmpeg cannot be controlled at this time. operating results. After the program ends, the ffmpeg process is still running until the stream reports an error or the process is manually stopped. It’s not clear why fluent-ffmpeg You can notify the third-party process to close after the ontology process ends. The guess is to cut off the process through command line input, if only through ChildProcess.kill() It is impossible to close third-party processes.

When running on an I5 8G machine, single-stream push has occupied about 35% of the CPU. Multi-stream push requires other solutions. ​​​​​​

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

Detailed steps for setting global styles in Vue2.0

Use NodeJS to transcode videos

What are the steps required to implement a complete Angular4 FormText component

The above is the detailed content of Nodejs performs live video streaming based on ffmpeg. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Is nodejs a backend framework? Is nodejs a backend framework? Apr 21, 2024 am 05:09 AM

Node.js can be used as a backend framework as it offers features such as high performance, scalability, cross-platform support, rich ecosystem, and ease of development.

How to connect nodejs to mysql database How to connect nodejs to mysql database Apr 21, 2024 am 06:13 AM

To connect to a MySQL database, you need to follow these steps: Install the mysql2 driver. Use mysql2.createConnection() to create a connection object that contains the host address, port, username, password, and database name. Use connection.query() to perform queries. Finally use connection.end() to end the connection.

What are the global variables in nodejs What are the global variables in nodejs Apr 21, 2024 am 04:54 AM

The following global variables exist in Node.js: Global object: global Core module: process, console, require Runtime environment variables: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

What is the difference between npm and npm.cmd files in the nodejs installation directory? What is the difference between npm and npm.cmd files in the nodejs installation directory? Apr 21, 2024 am 05:18 AM

There are two npm-related files in the Node.js installation directory: npm and npm.cmd. The differences are as follows: different extensions: npm is an executable file, and npm.cmd is a command window shortcut. Windows users: npm.cmd can be used from the command prompt, npm can only be run from the command line. Compatibility: npm.cmd is specific to Windows systems, npm is available cross-platform. Usage recommendations: Windows users use npm.cmd, other operating systems use npm.

Is there a big difference between nodejs and java? Is there a big difference between nodejs and java? Apr 21, 2024 am 06:12 AM

The main differences between Node.js and Java are design and features: Event-driven vs. thread-driven: Node.js is event-driven and Java is thread-driven. Single-threaded vs. multi-threaded: Node.js uses a single-threaded event loop, and Java uses a multi-threaded architecture. Runtime environment: Node.js runs on the V8 JavaScript engine, while Java runs on the JVM. Syntax: Node.js uses JavaScript syntax, while Java uses Java syntax. Purpose: Node.js is suitable for I/O-intensive tasks, while Java is suitable for large enterprise applications.

Which one to choose between nodejs and java? Which one to choose between nodejs and java? Apr 21, 2024 am 04:40 AM

Node.js and Java each have their pros and cons in web development, and the choice depends on project requirements. Node.js excels in real-time applications, rapid development, and microservices architecture, while Java excels in enterprise-grade support, performance, and security.

Is nodejs a back-end development language? Is nodejs a back-end development language? Apr 21, 2024 am 05:09 AM

Yes, Node.js is a backend development language. It is used for back-end development, including handling server-side business logic, managing database connections, and providing APIs.

How to deploy nodejs project to server How to deploy nodejs project to server Apr 21, 2024 am 04:40 AM

Server deployment steps for a Node.js project: Prepare the deployment environment: obtain server access, install Node.js, set up a Git repository. Build the application: Use npm run build to generate deployable code and dependencies. Upload code to the server: via Git or File Transfer Protocol. Install dependencies: SSH into the server and use npm install to install application dependencies. Start the application: Use a command such as node index.js to start the application, or use a process manager such as pm2. Configure a reverse proxy (optional): Use a reverse proxy such as Nginx or Apache to route traffic to your application

See all articles