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)的连接,实现视频流和(或)音频流或者其他任意数据的传输。......