尝试把
https://github.com/strukturag/libde265 编译到 wasm
结果因为 emscripten 默认栈大小只有 64K,爆栈了,真是各有各的搞笑死法,把栈调到 128K 好了
但是 1920x864 分辨率 60FPS 4Mbps 码率的视频都差一点(确认已经 -flto -O3 -msimd128,大约 22ms 一帧
而且我的生产环境也上不了多线程
今天尝试 port edge264
https://github.com/tvlabs/edge264/issues/15#issuecomment-3778814842这次更搞笑,有个方法直接就要 420K 的栈空间
还剩下几个兼容性问题,不知道是 port 的不对还是本来就有问题
Baseline profile level 4 倒是运行的很稳定,可是现在在用 tinyh264 也很稳定

WebAssembly compilation · Issue #15 · tvlabs/edge264
Hi @traffaillac, Thanks for creating this great library. In case you're interested, to build this as a WebAssembly module, a few very minor changes were needed: diff --git c/edge264.c w/edge264.c i...
GitHub突然想到,Android 现在也还是有个 software-only 的 H.264 解码器的
找了下在
https://cs.android.com/android/platform/superproject/main/+/main:external/libavc/examples/avcdec/main.c;bpv=0;bpt=0又是 libavc 这种 generic 到没法搜索的名字
有 ssse3 和 sse4.2 加速,还没仔细看,如果能编译到 wasm 的话应该比 tinyh264 有更好的兼容性和性能吧
我也很想把 tinyh264 重新编译一下,去掉那个自带的 postMessage 换成正常的 FFI API
首先需要找到源代码在哪里,之前找到过但是又不知道丢哪里去了
重新编译了一遍,CPU 占用从 300%~350% 降低到了 50%~60%
不明白为什么性能这么高或者为什么原来性能那么低
文件总大小从 184KB 缩小到 176KB,净重其实增加了,但是原来的 wasm 用 base64 嵌在 JS 里增大了大小
开 -msimd128 自动 vectorize 会再增加 15KB,然而性能完全没有变化(代码本身不含 SIMD 优化,只是靠 clang 自动优化
(edge264 总大小 1.26MB,CPU 占用大约就只降低 5%
怀疑 WASM 这 SIMD 就完全没用