节点 - 管道远程 http 大型视频文件流比直接提供远程文件 url 慢

Node - Piping remote http large video file stream is slower than serving remote file url directly

提问人:Billy Bishop 提问时间:1/23/2023 最后编辑:Billy Bishop 更新时间:1/23/2023 访问量:64

问:

我有一个简单的节点服务器,我想用它来充当代理,从外部服务器(例如谷歌驱动器、Dropbox 等)流式传输大型视频文件,其设置如下:

var http = require("http");
var request = require("request");

var hostname = "localhost";
var port = 3000;

var decode = (encodedString) =>
  Buffer.from(encodedString, "base64").toString("ascii");

var server = http.createServer((req, res) => {
  var rid = parseInt(Math.random() * 10000);

  var url = new URL(`http://${hostname}:${port}${req.url}`);

  if (url.pathname == "/download" && url.searchParams.get("file")) {
    var remoteFileUrl = decode(url.searchParams.get("file"));

    var headers = {};
    if (req.headers.range) headers.range = req.headers.range;

    var fileReq = request(remoteFileUrl, { headers });
    fileReq.pipe(res).on("close", () => {
      fileReq.destroy();
    });
  } else {
    res.statusCode = 200;
    res.setHeader("Content-Type", "text/plain");
    res.end(":)\n");
  }
});

server.listen(port, "0.0.0.0", () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

现在,我在自己的私有VPS上运行了这个节点应用程序,该VPS具有约5000 mbits / s的高网络速度和3GB RAM,但是当我尝试在VLC等媒体播放器上通过url(http://my-vps-ip/download?file=remoteFileUrlEncodedInBase64)播放此视频文件时,与直接从源服务器播放远程文件相比,它滞后了。

我还测试了节点服务器是否能够通过从另一个单独的 VPS(不同的云)下载文件来提供文件的全部带宽,并且它能够以最快的速度从我的服务器下载文件。

对于我尝试流式传输低于 40GB 的任何文件,似乎没有延迟,但对于大于 60GB 的文件,缓冲是存在的,而直接从远程源服务器播放文件时则没有缓冲

我能做些什么来提高这里的性能吗?或者为什么我通过服务器提供流可能没有响应?

节点.js 视频流 nodejs-stream http-streaming

评论


答: 暂无答案