2

我需要在浏览器端解码 h264 数据,因为我正在使用 emscripten 在 web 程序集中构建 openh264 库。我已经成功构建它并尝试在 java 脚本中使用它来解码 h264 数据。但是我收到以下行的一个错误,

var open_decoder = Module.cwrap('open_decoder', 'number', null);

错误是:未捕获的类型错误:Module.cwrap 不是函数

如果有人用 emscripten 构建了 openh264,请帮我解决问题。

按照我用来使用 emscripten 构建 openh264 的步骤。

  1. $ 源 emsdk_env.sh
  2. $./emsdk 激活最新
  3. cd openh264-js-master
  4. 制作

注意:openh264 的代码已经从 github(ttyridal) 下载,并且已经有 emscripten 的 make 文件。

4

2 回答 2

5
-s EXTRA_EXPORTED_RUNTIME_METHODS=["cwrap"]

在编译源代码时在命令行中包含上述内容

emcc source.c -s EXPORTED_FUNCTIONS=['_my_add'] -s EXTRA_EXPORTED_RUNTIME_METHODS=["cwrap"]
于 2019-12-15T16:58:20.777 回答
2

可能您正在尝试Module在 Emscripten 运行时初始化之前使用,因此Module.cwrap未定义。

为确保运行时已准备就绪,请将您的代码放在 中Module.onRuntimeInitialized,如下例所示:

<!doctype html>
<html>
<body>
    <script>
        var Module = {
          onRuntimeInitialized: function() {
            my_add = Module.cwrap('my_add', 'number', ['number', 'number'])
            alert('1 + 2 = ' + my_add(1, 2));
          },
        };
    </script>
    <script async type="text/javascript" src="index.js"></script>
</body>
</html>

请参阅此 github 存储库中的完整示例

于 2019-05-09T06:27:15.140 回答