簡體   English   中英

傳輸到中間 stream 時,視頻沒有流式傳輸

[英]video is not streaming when piped to a middle stream

我想使用node.js創建一個具有使用情況統計的基本視頻流服務器,視頻源是本地文件。 流媒體按預期工作:

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

但是我想得到一些使用統計,所以我添加了一個passThrough stream,

const stats = new PassThrough();

對於統計數據,我將向stats stream 數據事件添加一些代碼,如下所示//stats.on('data',(chunk)=> { });

但是現在當我將 pipe 發送到統計數據 stream 時,視頻不再流式傳輸

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

你能告訴我我在這里缺少什么嗎?

仍然無法弄清楚如何將 stats 放在中間 stream 並在 res 上接收視頻 stream,但是,一種可能的解決方案是將 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);
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM