fluent-ffmpeg在electron框架中实现推流

需要准备这几个东西
electron框架
ffmpeg.exe应用程序 链接:https://pan.baidu.com/s/1TyzYlWG0p7cxpqrzziVRCA  提取码:ofd2(也可自行去官网下载)
fluent-ffmpeg插件
一个rtmp流地址

首先要做以下几步操作
1.将ffmpeg.exe文件放到electron项目文件夹中
2.安装插件和electron框架并设置推流地址相关的代码(electron相关的配置我之前的文章有),通过node的path模块找到第一步放的ffmpeg文件。ffmpeg是需要命令行来实现的,electron就可以使用命令行这里我通过fluent-ffmpeg插件来实现ffmpeg推送实时音频的功能。(当然也可以直接用node的子进程来实现https://blog.csdn.net/qq_40816649/article/details/103203263

更多的ffmpeg和fluent-ffmpeg可以查看官方文档http://ffmpeg.org/ -- https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

const {
  app,
  BrowserWindow,
  ipcMain,
  Menu}            = require('electron');
const ffmpeg       = require("fluent-ffmpeg");
const path         = require('path')

function connectRTMP(audio) {//连接rtmp流
  const ffmpegPath = path.join(__dirname, './ffmpeg.exe')
  command = ffmpeg()
    .setFfmpegPath(ffmpegPath)
    .input(`audio=${audio}`)
    .inputFormat("dshow")
    .addOptions([
      "-vcodec libx264",
      "-preset ultrafast",
      "-acodec aac",
      "-pix_fmt yuv422p"
    ])
    .format("flv")
    .output('rtmp://xxxxxxxxxx', {
      end: true
    })
    .on("start", function (commandLine) {
      console.log("commandLine: " + commandLine);
      win.webContents.send('isStart');//推流成功
    })
    .on("error", function (err, stdout, stderr) {
      win.webContents.send('isError');//推流失败
    })
    .on("end", function () {
      
    });
  command.run();
}

3.推流之后可以通过可以通过vlc播放该流地址来查看是否推流成功

Electron是一个开源的框架,用于构建跨平台的桌面应用程序。它使用了Node.js和Chromium,可以使用HTML,CSS和JavaScript来构建应用程序。而FFmpeg是一个开源的跨平台的音视频处理工具,可以用于录制、转码、剪辑等操作。在Electron,可以使用FFmpeg来进行音视频处理,例如录制桌面、窗口或摄像头的视频,并进行推流或保存为文件。 通过在Electron使用FFmpeg,可以实现以下功能: 1.录制桌面、窗口或摄像头的视频。 2.对视频进行转码、剪辑、添加水印等处理。 3.将处理后的视频进行推流或保存为文件。 举个例子,如果你想要录制桌面并添加音频,可以使用以下代码: ``` const ffmpegPath = require('ffmpeg-static').path; const ffmpeg = require('fluent-ffmpeg'); ffmpeg.setFfmpegPath(ffmpegPath); const desktopStream = ffmpeg() .input('desktop') .inputFormat('gdigrab') .inputOptions('-offset_x 0') .inputOptions('-offset_y 0') .inputOptions('-video_size 1920x1080') .input(`audio=${audio[0]}`) .inputFormat('dshow') .complexFilter([ { filter: 'overlay', options: { x: 'main_w-overlay_w', y: 'main_h-overlay_h' }, inputs: ['[0:v]', '[1:v]'], }, ]) .outputOptions('-pix_fmt yuv420p') .outputOptions('-preset ultrafast') .outputOptions('-tune zerolatency') .outputOptions('-crf 25') .outputOptions('-g 60') .outputOptions('-keyint_min 60') .outputOptions('-f flv') .output('rtmp://your-streaming-server-url') .on('start', () => { console.log('Recording started'); }) .on('error', (err) => { console.log(`Error: ${err.message}`); }) .on('end', () => { console.log('Recording ended'); }) .run(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值