decoder_wasm icon indicating copy to clipboard operation
decoder_wasm copied to clipboard

作者您好,一个编译问题

Open wusopp opened this issue 3 years ago • 7 comments

您好,请教一个编译问题。我这边按照示例说明,编译了ffmpeg4.1.6版本,但总是提示。编译其他版本也是一样的,编译环境采用的是Ubuntu18.04

当载入H264或者H265后,总是出现报错,如下 libffmpeg_265.js:1 Uncaught TypeError: Cannot read property 'slice' of undefined at convertJsFunctionToWasm (libffmpeg_265.js:1) at addFunctionWasm (libffmpeg_265.js:1) at Object.addFunction (libffmpeg_265.js:1) at decode_seq (video.js:30) at handleVideoFiles (video.js:14) at HTMLInputElement.onchange (main.html:11)

音频播放无问题

但使用从源程序中下载的libffmpeg_265.js 和 libffmpeg_265.wasm 却不会报错,是编译上哪里出问题了么?还是需要代码进行调整?

wusopp avatar Jul 09 '20 08:07 wusopp

版本信息如下,编译ffmpeg4.1 ,ffmpeg4.2 版本均有此问题。其中禁用了--disable-pthreads ,否则编译无法通过

emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.39.18 clang version 11.0.0 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-llvm-llvm--project 613c4a87ba9bb39d1927402f4dd4c1ef1f9a02f7) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /home/emscripten/emsdk/upstream/bin Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0 Candidate multilib: .;@m64 Selected multilib: .;@m64 shared:INFO: (Emscripten: Running sanity checks)

wusopp avatar Jul 09 '20 10:07 wusopp

我们用的编译代码就是github上的版本,没有额外的更改,也没有设置--disable-pthreads。 看emcc的版本,你的好像还要更新一些 emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.38.45 clang version 6.0.1 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-emscripten--core-emscripten--fastcomp--clang 98df4be387dde3e3918fa5bbb5fc43e1a0e1daac) (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-emscripten--core-emscripten--fastcomp 6c7e775325067e33fa60611e619a8b987b6d0c35) (emscripten 1.38.31 : 1.38.31) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /data/github/emsdk/fastcomp/fastcomp/bin Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.8.2 Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.8.5 Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.8.5 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 shared:INFO: (Emscripten: Running sanity checks)

另外,之前碰到了一些编译问题,gcc是单独安装的 [root@player1-15f477ac5 ~]# gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../configure --enable-checking=release --enable-language=c,c++ --disable-multilib Thread model: posix gcc version 9.1.0 (GCC)

snxly avatar Jul 13 '20 02:07 snxly

我们用的编译代码就是github上的版本,没有额外的更改,也没有设置--disable-pthreads。 看emcc的版本,你的好像还要更新一些 emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.38.45 clang version 6.0.1 (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-emscripten--core-emscripten--fastcomp--clang 98df4be387dde3e3918fa5bbb5fc43e1a0e1daac) (/b/s/w/ir/cache/git/chromium.googlesource.com-external-github.com-emscripten--core-emscripten--fastcomp 6c7e775325067e33fa60611e619a8b987b6d0c35) (emscripten 1.38.31 : 1.38.31) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /data/github/emsdk/fastcomp/fastcomp/bin Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.8.2 Found candidate GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.8.5 Selected GCC installation: /usr/lib/gcc/x86_64-redhat-linux/4.8.5 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 shared:INFO: (Emscripten: Running sanity checks)

另外,之前碰到了一些编译问题,gcc是单独安装的 [root@player1-15f477ac5 ~]# gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/9.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../configure --enable-checking=release --enable-language=c,c++ --disable-multilib Thread model: posix gcc version 9.1.0 (GCC)

好的,我这边先尝试下

wusopp avatar Jul 13 '20 02:07 wusopp

@wusopp 请教一下,这问题解决了么?我现在也遇到这问题,谢谢!

lantf avatar Oct 16 '20 07:10 lantf

@wusopp 请教一下,这问题解决了么?我现在也遇到这问题,谢谢!

你可以试试 1.38.45 版本的,我当时是这个问题,仅供参考。

wusopp avatar Oct 16 '20 09:10 wusopp

@wusopp 请教一下,这问题解决了么?我现在也遇到这问题,谢谢!

你可以试试 1.38.45 版本的,我当时是这个问题,仅供参考。

用1.38以上的版本,就会出现以上的问题吗?

smilemoon avatar Apr 06 '21 09:04 smilemoon

var videoCallback = Module.addFunction(function (addr_y, addr_u, addr_v, stride_y, stride_u, stride_v, width, height, pts) {
        console.log("[%d]In video callback, size = %d * %d, pts = %d", ++videoSize, width, height, pts)
        let size = width * height + (width / 2)  * (height / 2) + (width / 2)  * (height / 2)
        let data = new Uint8Array(size)
        let pos = 0
        for(let i=0; i< height; i++) {
            let src = addr_y + i * stride_y
            let tmp = HEAPU8.subarray(src, src + width)
            tmp = new Uint8Array(tmp)
            data.set(tmp, pos)
            pos += tmp.length
        }
        for(let i=0; i< height / 2; i++) {
            let src = addr_u + i * stride_u
            let tmp = HEAPU8.subarray(src, src + width / 2)
            tmp = new Uint8Array(tmp)
            data.set(tmp, pos)
            pos += tmp.length
        }
        for(let i=0; i< height / 2; i++) {
            let src = addr_v + i * stride_v
            let tmp = HEAPU8.subarray(src, src + width / 2)
            tmp = new Uint8Array(tmp)
            data.set(tmp, pos)
            pos += tmp.length
        }
        var obj = {
            data: data,
            width,
            height
        }
        displayVideoFrame(obj);
    }, 'viiiiiiiii');

这里改成这样,新的版本https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html#calling-javascript-functions-as-function-pointers-from-c 需要传函数的返回还有参数类型

vincentxuc avatar May 19 '21 05:05 vincentxuc