从流中构建值的正确方法是什么?

时间:2017-02-05 09:47:14

标签: node.js

我正在子进程中运行ffmpeg命令;它将视频文件转换为新格式,将新视频的块发送到stdout,然后用事件处理程序捕获它。

如果我想将视频保存为文件,我可以为该文件创建一个可写流,并将子进程的stdout传递给它,这很好。但现在我想从视频生成屏幕截图,保存为文件,但要在内存中创建该图像的base64表示,然后将其保存在数据库中。 (我知道一般不建议在数据库中保存图像。)

我现在想知道,建议的方法是,随着时间的推移建立一个价值。

现在,我已经声明了一个数组chunks。每当我从ffmpeg进程中获取一大块新数据时,我都会对其进行64位编码,然后将其推送到chunks。当我从流中获得close事件时,我会在该数组上调用join(),这就是我的价值。

这很好用,因为我的截图最大为1 MB。但这是一件蠢事吗? Node库中有什么东西,像流,缓冲区或UIntArray这样的结构,是出于这种目的,而不是构建一个数组然后加入它?

1 个答案:

答案 0 :(得分:1)

我正在使用Buffers数组,如下所示:

let chunks = [];
stream.on('data', chunk => chunks.push(chunk));
stream.on('end', () => {
    let result = Buffer.concat(chunks).toString('base64');
    // Do something with result
});

这是最有效的内存方式。没有额外的结构。没有内存重复。