节点插件不适用于电子,但适用于 nodejs
Node addon don't work in electron, but worked in nodejs
我写了一个 nodejs 插件,用 node-gyp 编译。
它不适用于电子,但 nodejs 有效。
nodejs和electron节点版本相同
插件做这些事情:
- 加载ffmpeg静态库并打开rtsp或本地文件。
- 将frame转成rgba颜色到arraybuffer并调用electron的主进程。
- 渲染器进程处理数据事件并将数据渲染到 canvas 元素。
在electron中,后面的代码总是return Protol not found
int status = avformat_open_input(&pFormatContext, url, NULL, NULL);
if (0 != status) {
av_log(NULL, AV_LOG_ERROR, "ffmpeg open error: %s\n", av_err2str(status));
return status;
}
node-gyp 配置:
{
"targets": [{
"target_name": "ffmpeg",
"sources": ["src/ffmpeg/api/addon.c", "src/ffmpeg/api/ffmpeg.c"],
"include_dirs": [
"/home/my/ffmpeg_build/include"
],
"libraries": [
"-L$$PWD/../lib/ffmpeg-kylinux-aarch64",
"-lavformat",
"-lavcodec",
"-lavutil",
"-lswscale",
"-lswresample",
"-lx264",
"-lx265"
]
}]
}
Electron 已经包含 ffmpeg(不像 stock Node.js)让你别无选择,只能使用包含的版本 link - 否则你会遇到符号冲突和奇怪的行为 - 这就是你的情况 -因为一些符号将解析为您的版本,其他符号将解析为 built-in 版本。
也许有一个可能的解决方法是将 ffmpeg 静态构建到您的插件中。
我写了一个 nodejs 插件,用 node-gyp 编译。 它不适用于电子,但 nodejs 有效。 nodejs和electron节点版本相同
插件做这些事情:
- 加载ffmpeg静态库并打开rtsp或本地文件。
- 将frame转成rgba颜色到arraybuffer并调用electron的主进程。
- 渲染器进程处理数据事件并将数据渲染到 canvas 元素。
在electron中,后面的代码总是return Protol not found
int status = avformat_open_input(&pFormatContext, url, NULL, NULL);
if (0 != status) {
av_log(NULL, AV_LOG_ERROR, "ffmpeg open error: %s\n", av_err2str(status));
return status;
}
node-gyp 配置:
{
"targets": [{
"target_name": "ffmpeg",
"sources": ["src/ffmpeg/api/addon.c", "src/ffmpeg/api/ffmpeg.c"],
"include_dirs": [
"/home/my/ffmpeg_build/include"
],
"libraries": [
"-L$$PWD/../lib/ffmpeg-kylinux-aarch64",
"-lavformat",
"-lavcodec",
"-lavutil",
"-lswscale",
"-lswresample",
"-lx264",
"-lx265"
]
}]
}
Electron 已经包含 ffmpeg(不像 stock Node.js)让你别无选择,只能使用包含的版本 link - 否则你会遇到符号冲突和奇怪的行为 - 这就是你的情况 -因为一些符号将解析为您的版本,其他符号将解析为 built-in 版本。
也许有一个可能的解决方法是将 ffmpeg 静态构建到您的插件中。