1

我写了一个 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;
    }

节点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"
        ]
    }]
}
4

1 回答 1

0

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

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

于 2022-01-27T14:55:00.987 回答