【问题标题】:Node addon don't work in electron, but worked in nodejs节点插件在电子中不起作用,但在 nodejs 中起作用
【发布时间】:2021-12-09 10:04:45
【问题描述】:

我写了一个 nodejs 插件,用 node-gyp 编译。 它不适用于电子,但 nodejs 工作。 nodejs 和 electron 节点版本相同。

插件做这些事情:

  1. 加载 ffmpeg 静态库并打开 rtsp 或本地文件。
  2. 将帧转换为 rgba 颜色到 arraybuffer 并调用电子的主进程。
  3. 渲染器进程处理数据事件并将数据渲染到画布元素。

在电子中,以下代码总是返回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"
        ]
    }]
}

【问题讨论】:

    标签: node.js electron node-gyp node-addon-api n-api


    【解决方案1】:

    Electron 已经包含 ffmpeg(与普通 Node.js 不同),让您别无选择,只能与包含的版本链接 - 否则您将遇到符号冲突和奇怪的行为 - 这是您的情况 - 因为某些符号将被解析为您的版本,其他为内置版本。

    也许有一种可能的解决方法是将 ffmpeg 静态构建到您的插件中。

    【讨论】:

    • 感谢您的解释,我用ffmpeg编译的新进程解决了这个问题,并处理了解码任务。 node-api 通过共享内存与进程通信。现在它工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 2018-10-23
    • 2017-01-25
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多