gpt4 book ai didi

ffmpeg - Emscripten:将库链接到项目

转载 作者:行者123 更新时间:2023-12-04 22:54:27 26 4
gpt4 key购买 nike

我正在尝试使用 Emscripten 构建一个使用 ffmpeg 库到 WebAssembly 的小项目。在此之前,我通过将一些简单的程序从 C 转换为 Wasm 来进行尝试,它运行良好,但那时我没有使用任何其他库。
对于 C++,我正在使用 Visual Studio FFmpeg 我在项目的“属性”中链接如下:

  • 我放置在“包含”目录中的所有 .h 头文件,并将其添加为“C/C++”部分中的“附加包含目录”
  • 我放置在“lib”中并在“链接器”部分添加为“附加库目录”的所有 .lib 和 .dll.a(例如 avcodec.lib 或 libavcodec.dll.a)文件

  • 所有包含在内,程序本身运行良好,所以现在我尝试使用 Emscripten 准备一个 Wasm 模块,使用与我之前使用的相同命令,但已经知道这不会起作用:
    em++ cut_video.cpp -Os -g1 -L lib -I include -s WASM=1 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 -s EXPORT_ES6=1 -s MODULARIZE=1 -s "EXPORT_NAME='Editor'" -s "ENVIRONMENT='web'" -s EXPORTED_FUNCTIONS="['_doubler', '_cut_video', '_cut_video1']" -s ERROR_ON_UNDEFINED_SYMBOLS=0  -s ASSERTIONS=1 --bind -o cutter.js
    我添加了“-I include”参数,它假设指向我上面提到的相同的头文件,这对 Emscripten 来说似乎很好,因为它解决了初始错误。
    Emscripten 已经从 ffmpeg 库中发现了函数的问题,所以我添加了“ERROR_ON_UNDEFINED_SYMBOLS=0”,只是为了看看当我将此模块添加到前端应用程序时会发生什么。显然它最终会出现错误“缺少函数:av_register_all”,这是我代码中的第一个 ffmpeg 函数。
    我发现所有可能有用的解释对我来说真的不清楚,因为通常我不使用 C++ 或 Linux 环境,所以我不熟悉 Makefile 左右。
    有没有办法,根据我所描述的以及我的项目是如何使用 Visual Studio 准备的,告诉 Emscripten 为我的应用程序使用 FFmpeg 的那些预构建 .dll.a 或 .lib 文件?或者我应该如何修改我的项目以使其能够被 Emscripten 接受?
    编辑:自 cut_video.cpp 文件很大,也许在此处粘贴 link to this file on github 是一个更好的主意而不是一大段代码。

    最佳答案

    FFmpeg 和 Emscripten
    使用 Emscripten 构建 FFmpeg 库并非易事,但您可以按照 ffmpeg.wasm教程:

  • Introduction
  • Build with Emscripten

  • 仔细阅读所有教程直到结束,因为可能会出现很多问题。
    笔记
    我建议你从教程中使用的 FFmpeg 和 Emscripten 版本开始,看看 build-ffmpeg.sh脚本。脚本本身导出一个带有 main 函数的 wasm 文件
    https://github.com/ffmpegwasm/ffmpeg.wasm-core/blob/85f0e51d9a94447a3b3481c7a4794c2eb9abbfee/wasm/build-scripts/build-ffmpeg.sh#L22
    -s EXPORTED_FUNCTIONS="[_main, _proxy_main]"  # export main and proxy_main funcs
    即来自fftools/ffmpeg.c的main函数。这会对你有很大帮助。
    有用的资源
    请注意,在 Emscripten 文档中有一个移植到 WASM/Javascript 的 C/C++ 库/项目列表,还有一些 FFmpeg 项目请参阅 utilities
    快乐编码!

    关于ffmpeg - Emscripten:将库链接到项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66933160/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com