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 ファイルが作成されますが、2 回目以降は、既存の 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 のものに渡します。multipartStream をサポートするモジュールのようなものを使用できます。ところで、ファイルのアップロードの詳細など、省略した他のコード、およびffmpegがどのモジュールから来ているか/どのように開始されたかが重要でした。

于 2016-10-14T06:28:01.617 に答える