代理 HLS (.m3u8) 视频流服务器

问题描述 投票:0回答:1

我对代理没有太多了解,但我确实了解一点,我有一个 CDN,以 hls 格式提供我的视频文件,我们称之为

mycdn.com
,我还有一个代理服务器
myproxy.com
,用于安全原因
mycdn
拒绝所有不是来自
myproxy
的请求,我拥有此代理的唯一原因是在每个请求中附加自定义标头,因此对于每个 .m3u8 和 .ts 我想发送一些自定义数据,问题是使用此设置,我消耗 2 倍的网络带宽,假设我的客户端请求 1GB 视频,我首先从代理请求,代理从 CDN 请求,CDN 将其提供给代理,代理将其提供给客户端,至少这是这样的我觉得正在发生,每 GB 视频流实际上消耗 2 GB 数据,我有一些用 NodeJS 编写的代码,我可以遵循什么方法来在代理上几乎不产生带宽成本,我对添加这些数据所需的任何数据都很好额外的标头。

router.use(
  '/:resolution/:videoId',
  (req, res, next) => {
    // @ts-ignore
    req.customParams = {
      resolution: req.params.resolution,
      videoId: req.params.videoId,
    };
    next();
  },
  createProxyMiddleware({
    target: `https://mycdn.com/somevideoid`,
    changeOrigin: true,
    preserveHeaderKeyCase: true,
    selfHandleResponse: true,
    pathRewrite: (path, req) => {
      // @ts-ignore
      return `/${req.customParams.resolution}/${req.customParams.videoId}`;
    },
    on: {
      proxyRes: (proxyRes, req, res) => {
        res.writeHead(proxyRes.statusCode || 400, proxyRes.headers);
        proxyRes.pipe(res);
      },
    },
  }),
);
node.js security networking proxy video-streaming
1个回答
0
投票

我还有一个代理服务器myproxy.com,出于安全原因mycdn拒绝所有不是来自myproxy的请求

有点违背了 CDN 的全部目的,不是吗? 您应该重新考虑应用程序的体系结构,以便它根本不需要此代理。 客户应该能够直接从您的 CDN 获取。

我拥有此代理的唯一原因是在每个请求中附加自定义标头,因此对于每个 .m3u8 和 .ts 我想发送一些自定义数据

您的代码中没有添加自定义标头...

此设置的问题是,我消耗了 2 倍的网络带宽

嗯,是的,这对您的用户来说也不是那么好,毫无疑问,他们现在通过 Node.js 应用程序插入另一层而产生了毫无意义的开销,而 Node.js 应用程序并不像您的 CDN 那样托管在世界各地。

我有一些用nodejs编写的代码,我可以遵循什么方法来在代理上几乎不产生带宽成本

不要代理。就是这样。

看,您几乎已经击败了使用 CDN 的全部原因,不仅如此,还有 HLS 的主要原因。 在任何情况下,如果您要从 Node.js 提供视频服务,则可以直接通过 HTTP 提供视频流,然后就可以跳过 HLS 的所有开销和增加的延迟。 你基本上已经在这里做出了世界上最糟糕的权衡。

再说一遍,您的代码中没有添加标头。 您正在重写 URL,仅此而已,不需要代理。 您可以在客户端添加这些参数。 最坏的情况是,如果它们必须来自服务器端,您可以在响应中使用带有

307
标头的
Location:
重定向,但即使这样也只会增加额外的开销。 而且,让客户告诉您这些玩家统计数据,每个、单个、分段,确实完全是浪费时间和资源。

分离您的担忧。 让 CDN 为您的 HLS 流提供文件服务。 无论您使用这些其他数据进行日志记录或其他操作,都应在视频流的带外进行。

© www.soinside.com 2019 - 2024. All rights reserved.