WebAssembly 处理音视频时内存泄漏怎么排查?

A. 耘郗 阅读 15

我用 Emscripten 把 FFmpeg 编译成 wasm,在浏览器里解码 H.264 视频流,但每次播放完内存占用都不释放,Chrome 任务管理器里显示页面内存一直在涨。试过调用 Module._free(ptr) 释放指针,也检查了 C 代码里的 malloc 都有对应 free,还是不行。

是不是 wasm 模块本身的堆没清理?或者 JS 和 wasm 之间传 buffer 有引用没断开?求有经验的大佬指点下排查方向!

const videoData = new Uint8Array(arrayBuffer);
const ptr = Module._malloc(videoData.length);
Module.HEAPU8.set(videoData, ptr);
// ... 调用解码函数
Module._free(ptr); // 这样释放应该没问题吧?
我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
打工人尚昆
试试这个,确保所有通过 Module._malloc 分配的内存都调用了 Module._free,同时检查是否有全局变量或闭包持有对这些内存的引用,导致无法释放。可以使用 Chrome 的开发者工具中的 Memory 面板进行堆快照对比,找出未释放的对象。
点赞
2026-03-24 20:01