Nodejs 由于某种原因找不到 ffmpeg 模块

问题描述

我需要使用 nodejs 和 vue 框架在网站(http、vue 框架)上显示直播视频(rtsp)。

我查阅了很多资料,了解了它们是什么以及它是如何工作的基本逻辑。 所以我打算使用 socket.io 将 rtsp 转换为带有 nodejs 的 hls 并将其显示在网络上。(如果有更有效的方法,请告诉我)

问题是,由于某种原因,当我尝试在我的后端(nodejs)中开发它时,节点只是保持向我发送一个错误,即未找到 FFMpeg 模块。已经一个多星期了.. 请帮忙。

顺便说一句,所有的都适用于 ffmpeg cmd(window powerShell)。

我如何设置(ffmpeg):

  1. https://ffmpeg.org/

    下载了 ffmpeg
  2. 添加到系统路径:C:\Users\Marie\Desktop\ffmpeg-4.3.1-2020-11-19-full_build\bin\

  3. 使用 window powerShell 进行测试并将 rstp 转换为 m3u8:

    ffmpeg -i 'rtsp://ip.ip.ip/media/video1' -hls_time 3 -hls_wrap 10 'C:\Users\Marie\Desktop\tmp\hls/streaming.m3u8'

下面是 no 的屏幕截图。 3 结果

enter image description here


我如何设置(nodejs)

  1. npm i ffmpeg fluent-ffmpeg rtsp-ffmpeg
  2. 我刚刚复制并粘贴了示例工作代码并将 rtsp 链接更改为我的。例如:(https://www.npmjs.com/package/rtsp-ffmpeg)

=> 没有成功,错误提示找不到 ffmpeg 模块

  1. 手动设置路径,例如) ffmpeg.setFfmpegPath(path)

=> 没有成功。错误说找不到 ffmpeg 模块

... 我已经认真尝试了几乎所有的事情,比如删除、重新安装 ffmpeg、更改路径、添加很多路径,.. 请帮助....

编辑: 包.json

{
  "name": "streaming","version": "1.0.0","description": "","main": "index.js","scripts": {
    "start": "node app.js"
  },"author": "","license": "ISC","dependencies": {
    "express": "^4.17.1","ffmpeg": "0.0.4","fluent-ffmpeg": "^2.1.2","jsmpeg": "^1.0.0","node-media-server": "^2.2.4","node-onvif": "^0.1.7","node-rtsp-stream": "0.0.9","rtsp-ffmpeg": "0.0.15","socket.io": "^3.0.4","ws": "^7.4.1"
  }
}

app.js

const Stream = require('node-rtsp-stream')

// let path = 'C:/Users/Marie/Desktop/ffmpeg-4.3.1-2020-11-19-full_build/bin/ffmpeg.exe'
// let path = 'C:/Users/Marie/Desktop/ffmpeg-4.3.1-2020-11-19-full_build/bin/'
let path = 'C:/Users/Marie/Desktop/ffmpeg-4.3.1-2020-11-19-full_build/bin'
const ffmpeg = require('fluent-ffmpeg')

ffmpeg.setFfmpegPath(path)

stream = new Stream({
  name: 'name',streamUrl: 'rtsp://ip.ip.ip.ip/media/video1',wsPort: 9999,ffmpegOptions: { // options ffmpeg flags
    '-stats': '',// an option with no neccessary value uses a blank string
    '-r': 30 // options with required values specify the value after the key
  }
})

错误生成 ffmpeg ENOENT

app.js(用于另一个测试)

const app = require( 'express' )(),server = require( 'http' ).Server( app ),io = require( 'socket.io' )( server ),rtsp = require( 'rtsp-ffmpeg' )

process.env.FFMPEG_PATH = 'C:/Users/Marie/Desktop/ffmpeg-4.3.1-2020-11-19-full_build/bin/ffmpeg.exe'
// console.log( rtsp.FFMpeg )

server.listen( 6147 )
var uri = 'rtsp://ip.ip.ip.ip/media/video1',stream = new rtsp.FFMpeg( { input: uri } )
io.on( 'connection',function ( socket )
{
    var pipestream = function ( data )
    {
        socket.emit( 'data',data.toString( 'base64' ) )
    }
    stream.on( 'data',pipestream )
    socket.on( 'disconnect',function ()
    {
        stream.removeListener( 'data',pipestream )
    } )
} )
app.get( '/',function ( req,res )
{
    res.sendFile( __dirname + '/index.html' )
} )

错误: 未找到 FMpeg 可执行文件。安装这个包并检查 FFMpeg.cmd 属性

nodejs 版本 = 10.16.3

解决方法

事实证明,这个库在 Windows 中不能正常工作。改成 rtsp-ffmpeg 就可以了。

相关的 git 问题:https://github.com/kyriesent/node-rtsp-stream/issues/28

  • 您必须在项目文件夹中添加 ffmepg.exe 才能在 nodejs 中触发 ffmpeg。该库可以在 Linux/Unix 中正确找到路径。此外,该库中的许多其他功能无法正常工作(可能仅在 Windows 上),因此我不建议任何需要在基于 window、web 和 nodejs 的环境中开发它的人使用它。

我让它工作的那个: https://www.npmjs.com/package/rtsp-ffmpeg

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...