【wasm】

1. 首次遇到wasm


const fs = require('fs');
var window = {}
var Module = {}
function _emscripten_resize_heap(requestedSize) {
    var oldSize = HEAPU8.length;
    requestedSize = requestedSize >>> 0;
    abortOnCannotGrowMemory(requestedSize)
}
var wasmTable;
var __ATPRERUN__ = [];
var __ATINIT__ = [];
var __ATPOSTRUN__ = [];
var runtimeInitialized = false;
var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;

function addOnPreRun(cb) {
    __ATPRERUN__.unshift(cb)
}
function addOnInit(cb) {
    __ATINIT__.unshift(cb)
}
function addOnPostRun(cb) {
    __ATPOSTRUN__.unshift(cb)
}
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null;

function updateMemoryViews() {
    var b = wasmMemory.buffer;
    Module["HEAP8"] = HEAP8 = new Int8Array(b);
    Module["HEAP16"] = HEAP16 = new Int16Array(b);
    Module["HEAP32"] = HEAP32 = new Int32Array(b);
    Module["HEAPU8"] = HEAPU8 = new Uint8Array(b);
    Module["HEAPU16"] = HEAPU16 = new Uint16Array(b);
    Module["HEAPU32"] = HEAPU32 = new Uint32Array(b);
    Module["HEAPF32"] = HEAPF32 = new Float32Array(b);
    Module["HEAPF64"] = HEAPF64 = new Float64Array(b)
}

function removeRunDependency(id) {
    runDependencies--;
    if (Module["monitorRunDependencies"]) {
        Module["monitorRunDependencies"](runDependencies)
    }
    if (runDependencies == 0) {
        if (runDependencyWatcher !== null) {
            clearInterval(runDependencyWatcher);
            runDependencyWatcher = null
        }
        if (dependenciesFulfilled) {
            var callback = dependenciesFulfilled;
            dependenciesFulfilled = null;
            callback()
        }
    }
}

function stringToArrayBuffer(str) {
    const encoder = new TextEncoder();
    return encoder.encode(str);
}

function instantiateAsync(nntext,outputlogpath) {
    if (true) {
        
        const datafile = fs.readFileSync("./somelibs/encrypt.wasm");
        var result1 =  WebAssembly.instantiate(datafile, { a: { a: _emscripten_resize_heap } });
        result1.then(function(results){
            var exports = results.instance.exports;
            wasmMemory = exports["b"];
            updateMemoryViews();
            wasmTable = exports["e"];
            addOnInit(exports["c"]);
            removeRunDependency("wasm-instantiate");
    
            var data = stringToArrayBuffer(nntext)
            let strBuffer = new Uint8Array(data);
    
            let strPointer = exports["f"](strBuffer.length + 1);
            Module.HEAPU8.set(strBuffer, strPointer);
            Module.HEAPU8[strPointer + strBuffer.length] = 0;
    
            exports["d"](strPointer, strBuffer.length);
    
            let strBuffer1 = new Uint8Array(Module.HEAPU8.buffer, strPointer, strBuffer.le_mallocngth);
            var content = new TextDecoder().decode(strBuffer1);

            var content = content.trim().replace(/\0/g, "")+"\n";
            filePath = "./somelibs/data.txt"
            if (fs.existsSync(filePath)) {
              fs.appendFile(filePath, content, (err) => {
                if (err) {
                  console.error(err);
                  return;
                }
                console.log('String appended to file.');
              });
            } else {
              fs.appendFileSync(filePath, content);
              console.log('File created and string appended.');
            }
            return content
        })

    }
}


#text是一段加密的响应文本
def instantiateAsync_data(text):
    with open("./somelibs/m2.js",'r',encoding='utf-8') as f:
        cms = execjs.compile(f.read())
    try:
        return cms.call("instantiateAsync", text)
    except Exception as e:
        return print(f">>> 解析中---{e}")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebAssembly(Wasm)可以与FFmpeg集成,以在网页中进行视频处理和编解码操作。通过结合Wasm和FFmpeg,您可以在浏览器中实现强大的视频处理功能,如转码、剪辑、水印添加等。 以下是使用Wasm和FFmpeg进行视频处理的一般步骤: 1. 获取FFmpeg的Wasm版本:首先,您需要获取FFmpeg的Wasm版本。有一些项目在GitHub上提供了编译好的Wasm版本,您可以从这些项目中获取FFmpeg的Wasm文件。 2. 加载Wasm模块:将FFmpeg的Wasm文件加载到您的网页中。您可以使用JavaScript的WebAssembly API来加载和实例化Wasm模块。 3. 初始化FFmpeg:在Wasm模块加载完成后,您需要通过调用FFmpeg的初始化函数来初始化FFmpeg环境。这通常涉及到设置输入输出流、注册解码器和编码器等操作。 4. 执行视频处理操作:一旦FFmpeg成功初始化,您可以使用FFmpeg提供的各种函数执行视频处理操作。例如,您可以调用解码函数将视频解码为原始帧数据,然后对帧数据进行处理,最后调用编码函数将处理后的帧数据编码为目标视频格式。 5. 输出处理结果:根据您的需求,您可以将处理后的视频保存到本地文件或直接在网页上播放。 请注意,在使用Wasm和FFmpeg进行视频处理时,考虑到性能和资源的限制是非常重要的。视频处理通常是一项计算密集型任务,可能会对浏览器的性能产生一定的影响。因此,您应该仔细考虑处理的复杂性,并评估在特定设备和浏览器上的性能表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值