2

什么?

将附加的写入流 ,fs.createWriteStream(filePath, { flags: 'a' })作为输出传递似乎不起作用。

我试图运行的代码

const stream = require('stream');
let bufferReadStream = new stream.PassThrough();
bufferReadStream.end(Buffer.concat(largeChunk));

ffmpeg(bufferReadStream)
.format('mp3')
.output(fs.createWriteStream(filePath, { flags: 'a' }))
.on('end', () => {
  console.log('formatting finished!');
})
.on('error', err => {
  console.log('format buffer error: ', err);
})
.run();

我期望发生的事情和实际发生的事情

我正在将音频流(.webm)上传到节点,该节点被接受为缓冲区数组。由于大型音频文件的等待时间,我试图避免将非常大的音频文件保存到磁盘然后将其格式化为 .mp3 文件。

我尝试获取音频文件的块并将它们直接转换为 mp3 并将它们附加到 mp3 文件中。该代码第一次成功运行,创建了一个 mp3 文件,但在第二次之后,它抛出了一个错误,而不是将其附加到现有的 mp3 文件中。

format buffer error:  
Error: ffmpeg exited with code 1: pipe:0: Invalid data found when processing input

at ChildProcess.<anonymous> (/Users/inspiredtolive/Desktop/HackReactor/Picky-Notes/node_modules/fluent-ffmpeg/lib/processor.js:177:22)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
4

1 回答 1

0

不要制作/使用截断的文件。而是将请求上传流本身传递给您拥有的 ffmpeg 东西。您可以使用类似multipart具有 Stream 支持的模块。顺便说一句,您遗漏的其他代码,例如文件上传详细信息,以及 ffmpeg 来自哪个模块/它是如何启动的,都很重要。

于 2016-10-14T06:28:01.617 回答