我写了一个nodejs插件,用node-gip编译。它对电子不起作用,但nodejs起作用了。nodejs和electron节点具有相同的版本。
插件做这些事情:
- 加载ffmpeg静态库并打开rtsp或本地文件
- 将画框转换为rgba颜色到阵列缓冲区,并调用电子的主进程
- 渲染器进程处理数据事件并将数据渲染到画布元素
在电子中,以下代码总是返回Protol not found
int status = avformat_open_input(&pFormatContext, url, NULL, NULL);
if (0 != status) {
av_log(NULL, AV_LOG_ERROR, "ffmpeg open error: %sn", av_err2str(status));
return status;
}
节点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不同(,这让您别无选择,只能链接到包含的版本-否则您将遇到符号冲突和奇怪的行为-这就是您的情况-因为有些符号将解析到您的版本,另一些则解析到内置版本。
也许有一种可能的解决方法,就是在插件中静态构建ffmpeg。