我如何在电子应用中捆绑ffmpeg



我正在构建从electron-webpack样板开始的电子应用程序。

我找到了这个节点模块@ffmpeg-installer/ffmpeg,该模块将兼容的预编译二进制列入/node_modules目录,然后使该可执行文件的路径可通过。

const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path

这在开发过程中正常工作,但是当我构建可分配并运行它时,我会在尝试使用该路径产生子过程时会出现错误。大概是因为路径没有指向二进制。

运行分布式时,将路径设置为以下内容。

/Users/me/project/dist/mac/AppName.app/Contents/Resources/app.asar/node_modules/@ffmpeg-installer/darwin-x64/ffmpeg

但是,在AppName.app软件包中查看内容时,我在以下路径中找到二进制文件。

/Users/me/project/dist/mac/AppName.app/Contents/Resources/app.asar.unpacked/node_modules/@ffmpeg-installer/darwin-x64/ffmpeg

我应该如何使用electron-webpackelectron-builder

从这里:

安装:npm i ffmpeg-static ffprobe-static

包括在您的package.json中:

build{
...
    "asarUnpack":[
        "node_modules/ffmpeg-static/bin/${os}/${arch}/ffmpeg",
        "node_modules/ffmpeg-static/index.js",
        "node_modules/ffmpeg-static/package.json"
        ]
    }

在您的JS中设置路径:

const ffmpeg = require('fluent-ffmpeg');
//Get the paths to the packaged versions of the binaries we want to use
const ffmpegPath = require('ffmpeg-static').replace(
    'app.asar',
    'app.asar.unpacked'
);
const ffprobePath = require('ffprobe-static').path.replace(
    'app.asar',
    'app.asar.unpacked'
);
//tell the ffmpeg package where it can find the needed binaries.
ffmpeg.setFfmpegPath(ffmpegPath);
ffmpeg.setFfprobePath(ffprobePath);

可能是因为电子会将应用程序捆绑在asar存档中(例如zip/tar/jar)。因此,无法解决通往可执行文件的路径。尝试将asar: false传递到electron-builder(在electron-builder.json中)。

最新更新