node.js - 流利的 ffmpeg 模块 : "end" event does not fire

标签 node.js ffmpeg stream buffer fluent-ffmpeg

我正在使用 fluent-ffmpeg npm 模块

我已经从我的客户端发布了一个视频,并且正在使用 new stream.Readable 来“读取”视频缓冲区。

ffmpeg 正在转换和保存文件,一切看起来都很美好,但“结束”事件从未触发。

我的代码如下:

const videoStream = new stream.Readable({
    read: function (n) {
        this.push(myVideoBuffer);
    }
});

ffmpeg(videoStream)
.on('progress', e => console.log(e))
.on('end', () => {
    console.log('ended')
    videoStream.destroy();
})
.on('error', e => console.error(e))
.save(`${process.cwd()}/media/videos/${Date.now()}.mp4`);

我得到了每个进度事件的日志,它确实保存了视频,但是“结束”事件的回调永远不会被调用。

我认为这是一个错误,因为其他一切正常。

最佳答案

显然,在我推送 Buffer 以结束流后,我必须将 null 推送到我的 Readable 流,这反过来结束了 ffmpeg 进程。

const videoStream = new stream.Readable({
    read: function (n) {
        this.push(myVideoBuffer);
        this.push(null);
    }
});

就是这样;现在我的“结束”事件正在触发,一切都很好。

关于node.js - 流利的 ffmpeg 模块 : "end" event does not fire,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34123519/

相关文章:

node.js - Readline 争论或如何捕获关键事件并在框内绘制

android - 如何将 ffmpeg gl-transition 项目集成到我现有的项目中

multithreading - 如何在保持纵横比的同时在 hls 输出上使用刻录文本构建 ffmpeg

javascript - 合并 Node.js 流

javascript - 增加nodejs管道的最大字节大小

mysql - 在node js中从mysql获取数据没有按预期工作

node.js - TravisCI 在 Node BCrypt 上失败并出现 node-gyp 错误

javascript - 如何使用 grunt 缩小一个 css 文件并将其编译成 JS

ruby - 使用 ffmpeg、ffprobe 或 rvideo 在 ruby​​ 脚本中获取视频元数据

javascript - 如何处理 Node.js 加密流中的 block 长度