【问题标题】:video is not streaming when piped to a middle stream传输到中间流时,视频没有流式传输
【发布时间】:2021-08-07 00:57:42
【问题描述】:

我想使用node.js 创建一个具有使用情况统计信息的基本视频流服务器, 视频源是本地文件。流媒体按预期工作:

fs.createReadStream("file.mp4").pipe(res);

但我想获得一些使用情况统计信息,所以我添加了一个passThrough 流,

const stats = new PassThrough();

对于统计信息,我将向stats 流数据事件添加一些代码,如下所示 //stats.on('data',(chunk)=> { });

但现在视频不再流式传输,当我将其通过管道传输到统计数据流时

fs.createReadStream("file.mp4").pipe(stats).pipe(res);

你能告诉我这里缺少什么吗?

【问题讨论】:

    标签: javascript node.js node-streams


    【解决方案1】:

    仍然无法弄清楚如何将 stats 放在中间流并在 res 上接收视频流,但一种可能的解决方案是将 stats 事件侦听器移动到 readStream,如下所示:

    const { createReadStream, stat } = require("fs");
    const { promisify } = require("util");
    const fileInfo = promisify(stat);
    const { size } = await fileInfo(filePath);
    
    const { range } = req.headers;
          let start = 0;
          let end = size - 1;
    
          if (range) {
    
            start = range.replace(/bytes=/, "").split("-")[0];
            start = parseInt(start, 10);
            end = range.replace(/bytes=/, "").split("-")[1];
            end = end ? parseInt(end, 10) : size - 1;
    
            res.writeHead(206, {
              "Content-Range": `bytes ${start}-${end}/${size}`,
              "Accept-Ranges": "bytes",
              "Content-Length": end - start + 1,
              "Content-Type": "video/mp4",
            });
            logUpdate("range:", range);
    
          } else {
    
            res.writeHeader(200, {
              "Content-Type": "video/mp4",
              "Content-Length": size,
            });
          }
    
          createReadStream(filePath, { start, end })
            .on("data", dataEventHandler)
            .on("error", errorEventHandler)
            .on("close", closeEventHandler)
            .on("end", endEventHandler)
            .pipe(res);
    
    dataEventHandler = (chunk) => {
      total += chunk.length;
      logUpdate("bytes: ", total);
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2016-01-07
      • 2011-06-22
      相关资源
      最近更新 更多