[英]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.