electron打包的一些坑

我们知道使用electron打包的时候设置asar为true,electron-builder会智能的把一些native的程序不打包到app.asar里面,但是我碰到一个很奇怪的问题,周五的时候需要使用语音的格式转换,用到了amrToMp3和ffmpeg-static这两个库,其中amrToMp3的主要代码:

const exec = require('child_process').exec
const path = require('path')
const ffmpeg = require('ffmpeg-static')
const ffmpegPath = ffmpeg.path
function amrToMp3(filepath, outputDir = './src/mp3') {
  return new Promise((resolve, reject) => {
    const basename = path.basename(filepath)
    const filename = basename.split('.')[0]
    const etc = basename.split('.')[1]
    if (etc != 'amr') {
      console.log('please input a amr file')
      return
    const cmdStr = `${ffmpegPath} -y -i ${filepath} ${outputDir}/${filename}.mp3`
    exec(cmdStr, (err, stdout, stderr) => {
      if (err) {
        console.log('error:' + stderr)
        reject('error:' + stderr)
      } else {
        resolve(`${outputDir}/${filename}.mp3`)
        console.log(`transform to mp3 success!  ${filepath}->${outputDir}/${filename}.mp3`)

其中用到了exec这个命令,ffmpegPath打包后基本是****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg,但是打包后运行提示了can not found ****/app.asar/src/node_modules/ffmpeg-static/bin/darwin/x64/ffmpeg 很尴尬,但是我去解压了,明明是存在的,后来我去看了类似的一个库node-notifier,发现用的是execFile这个命令,然后我修改了一下,结果。。。。居然就可以了。这个地方谁知道原因,求解答。。。。

修改之后的程序代码:

var ffmpegPath = path.join( __dirname, 'bin', platform, arch, platform === 'win32' ? 'ffmpeg.exe' : 'ffmpeg' execFile(ffmpegPath, ['-y', '-i', inputPath, cmdStr], function (err, stdout, stderr) { if (err) { console.log('error:' + stderr); reject('error:' + stderr); } else { resolve(outputDir + '/' + filename + '.mp3'); console.log('transform to mp3 success! ' + filepath + '->' + outputDir + '/' + filename + '.mp3'); ffmpeg-static 适用于Mac OSX,Linux,Windows和FreeBSD的静态二进制文件。 支持macOS(64位和arm64),Linux(32和64位,armhf,arm64),Windows(32和64位)和FreeBSD(64位)。 注意: ffmpeg-static的版本遵循 。 发布新版本时,我们不考虑破坏ffmpeg本身的更改,而只考虑JS接口(请参见下文)。 要阻止ffmpeg-static通过更新来破坏代码,请或使用 。 该模块通过npm安装: $ npm install ffmpeg-static 注意:在安装过程中,它将从下载相应的ffmpeg二进制文件。 FFmpeg二进制发行版的使用和分发受其各自的许可证管辖。 电子及其他跨平台包装工具 由于ffmpeg-static将下载特定于操作系统/平台的二进制文件,因此您需要在将应用程序 1、安装fluent-ffmpeg @ffmpeg-installer/ffmpeg @ffprobe-installer/ffprobe 2、启动报错 Can’t resolve ‘./lib-cov/fluent-ffmpeg’ 找到报错位置fluent-ffmpeg/index.js 设置配置process.env.FLUENTFFMPEG_COV的值为false 可通过patch-package打补丁 patch-package fluent-ffmpeg 也可通过webpack.Environm 这篇文章记录一下开发「抖直播」软件时遇到的一些技术问题,已经分享一下开发「抖直播」使用到的技术,为了避免没有我朋友圈或没看前面几篇文章的朋友蒙圈,简单介绍一下「抖直播」,它是一款可以监控抖... 本打算用ffi 实现这个功能,但是一直安装不成功,查了一下,网上说ffi好几年没有更新了,基本上node新版都安不了,可以使用ffi-napi替代,ffi-napi是作者(node-ffi-napi)根据node-ffi修改而发布到npm仓库的, 可以直接通过npm安装, 支持node.js 12和electron高版本. 安装 ffi-nap之前要确定安装了编译器,安装了主忽略,如果没安装请先在cmd中, 执行指令: npm install -g windows... 需要准备这几个东西 electron框架 ffmpeg.exe应用程序 链接:https://pan.baidu.com/s/1TyzYlWG0p7cxpqrzziVRCA 提取码:ofd2(也可自行去官网下载) fluent-ffmpeg插件 一个rtmp流地址 首先要做以下几步操作 1.将ffmpeg.exe文件放到electron项目文件夹中 2.安装插件和electron框架并设置推流... 基本命令: electron-packager <sourcedir> <appname> --platform=<platform> --arch=<arch> [optional flags...] 命令说明: sourcedir:项目源文件所在路径(唯一的必须参数) appna... yarn add @ffmpeg/ffmpeg @ffmpeg/core 在web使用时最好使用ffmpeg/@ffmpeg/dist/ffmpeg.min.js,因为这个包默认环境是node,打包出的是web,或者去看看怎么配置webpack等打包工具 这个wasm需要使用SharedArrayBuffer api,服务器的response header必须有2个字段 Cross-Origin-Opener-Policy: same-origi 这里简单的罗列一下专栏的文章目录,一方面方便大家阅读,另一方面可以快速的查找对应的文章。 需要说明的是,本专栏会持续更新,不断增加新的文章,同时,也会动态更新原有文章。...... WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。......