【问题标题】:fs.createWriteStream to fs.createReadStreamfs.createWriteStream 到 fs.createReadStream
【发布时间】:2018-01-05 18:44:54
【问题描述】:

我正在使用 node.js 模块 sox-audio 修剪 mp3 音频以进行流式传输。 从这个example -

var SoxCommand = require('sox-audio');

var trimFileAndPipeExample = function(inputFile, startTimeSeconds, endTimeSeconds, outputPipe) {
    var startTimeFormatted = TimeFormat.formatTimeAbsolute(startTimeSeconds);
    var endTimeFormatted = TimeFormat.formatTimeAbsolute(endTimeSeconds);

    var command = SoxCommand()
        .input(inputFile)
        .output(outputPipe)
        .outputFileType('wav')
        .trim(startTimeFormatted, endTimeFormatted)
        .run();
    return command;
}

为了分配输出,您使用 - fs.createWriteStream('./output.mp3');

所以

var outputPipe = fs.createWriteStream('./output.mp3');

trimFileAndPipeExample(inputFile, startTime, endTime, outputPipe);

创建输出文件。

我想做的是从我收到的请求中获取输出并将其定向到fs.createReadStream -

var outputPipe = fs.createWriteStream('./test.mp3');

trim(path, startTime, endTime, outputPipe);

outputPipe.on('finish', () => {
    var readStream = fs.createReadStream('./test.mp3');
    readStream.pipe(res);
});

但我不一定要每次都创建文件,而是将数据定向到fs.createReadStream

有没有办法重写fs.createWriteStream,这样它就不需要输出路径,只需将.pipe 直接直接写入fs.createReadStream 吗?

谢谢

【问题讨论】:

    标签: node.js stream sox


    【解决方案1】:

    由于 Express res 已经是 Writable Stream,您可以直接将其传递给 trimFileAndPipeExample

    router.get('/cut', function (req, res, next) {
      var inputFile = './assets/utterance_0.wav';
      var startTime = 1;
      var endTime = 5;
      res.set('Content-Type', 'audio/mpeg');
      trimFileAndPipeExample(inputFile, startTime, endTime, res);
    });
    

    【讨论】:

    • 谢谢!如果您不介意回答,最后一个问题。 sox 或处理能够同时处理一百万个请求吗?
    • 这不是sox的问题,谷歌搜索scale node js application有解决办法。
    猜你喜欢
    • 2016-01-11
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2019-07-30
    • 2019-10-10
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多