【问题标题】:How do you determine the end of the file in a stream containing multiple streams? (nodejs)如何确定包含多个流的流中文件的结尾? (节点)
【发布时间】:2019-12-26 13:47:22
【问题描述】:

我想在 AWS Lambda (NodeJS) 函数中使用 ffmpeg 将音频文件拆分为多个片段。

由于 lambda 环境的限制(和优化),我想将音频流式传输到 ffmpeg,对流中的音频文件执行拆分,然后将现在多个较小的文件流式传输到 s3。

经过一些研究,我发现 AWS S3 SDK 不支持在一个流中上传多个文件。我可以通过查找每个新段的结尾(输出流中的文件)并创建一个单独的上传到 s3 来解决这个问题。

有没有办法确定流中文件的结尾(包含多个文件)?

(不保存到文件系统或加载到内存中)。

我四处寻找,似乎找不到答案。

【问题讨论】:

  • 显示您的代码以更好地理解
  • 问题不在于修复代码,而在于我对底层流和缓冲区的了解非常有限。
  • 从这里开始link
  • 感谢您的链接。我认为事件是在整个流的末尾而不是在流期间发出的,因为没有进行保存。您是否暗示要读取流以确定文件的状态?如果是这样,您知道如何指示文件的结尾吗?
  • 我假设您的意思是使用分段复用器。如果是这样,输出将被写入什么协议?

标签: node.js amazon-s3 ffmpeg aws-lambda stream


【解决方案1】:

来自 Node.js docs,close 事件表示文件结束。

rd.on('line', function(line) {
//reads line by line
console.log(line);
})
.on('close',() => {
 // EOF
 console.log('End of file!');
 process.exit(0);
});

【讨论】:

  • 那么close事件可以多次发出吗?例如,当一个流由多个文件组成时?
  • 没有ffmpeg会以流的形式取1个文件,输出1个包含多个文件的流。
  • 我不知道ffmpeg 是如何工作的,请尝试告诉我
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 2015-11-14
  • 2021-05-13
  • 2019-07-21
相关资源
最近更新 更多