【问题标题】:Possible to delete data read from readable stream?可以删除从可读流中读取的数据吗?
【发布时间】:2018-07-28 11:37:10
【问题描述】:

我有一些 ffmpeg 进程按顺序运行,并且全部写入一个流 (fs.createWriteStream)。

是否可以从文件中删除通过fs.createReadStream读取的数据?

我想 24/7 全天候运行脚本,并希望流充当缓冲区。

提前致谢!

【问题讨论】:

  • 我不明白你想要达到什么目的。是否要将数据删除到文件中?
  • 我正在使用 fs.createWriteStream (file.mp3) 打开一个流。然后我将一些 ffmpeg 实例的输出通过管道传输到该文件中,一段时间后文件变得非常大,我想通过删除我已经从 mp3 文件中读取的内容(它是音频直播)@TGrif 来防止这种情况发生
  • 那么为什么不直接流式传输数据而不写入文件呢?
  • 因为我认为不可能将输入“附加”到正在运行的 ffmpeg 实例。这样我可以在流运行时附加音频。

标签: node.js ffmpeg stream fs fluent-ffmpeg


【解决方案1】:

您实际上可以将数据“附加”到正在运行的ffmpeg 实例 - 或任何其他可写流。为此,您需要为管道使用此选项:

myFile.pipe(ffmpegRunner, {end: false});

这将告诉管道不通知 ffmpeg 文件已结束。然后,您可以在第一个文件结束后切换文件:

myFile.on("end", () => {
    myFile.unpipe(ffmpegRunner);
    anotherFile.pipe(ffmpegRunner, {end: false});
});

我猜你甚至可以在直播结束之前这样做。

【讨论】:

  • 对于 OP,如果您使用这种方法,您提供给 ffmpeg 的文件应该是原始流(如 .mp3)或没有全局标头的容器,如 MPEG-TS。
  • 让我直截了当地说:myFile 是使用 fs.createWriteStream() 创建的流,而 ffmpegRunner 是 ffmpeg 实例?因为here 它说 ffmpegRunner.pipe(stream, options)...
  • 另外我使用 .input(stream) 来运行 24/7 的实例,我将如何切换文件这样做?
  • 我设法使用我发布的链接中的第二个示例解决了这个问题,只需要摆弄一些东西......无论如何谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2016-04-17
  • 2021-08-03
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多