使用 nginx 反向代理 HLS 流

使用 nginx 反向代理 HLS 流

我有一个上游 HLS 流,需要代理到外部世界。提供商不希望我一次拥有多个连接。他们基本上不想处理基础设施问题。

我已成功将 proxy_pass 用于 .ts、chunklist 和 playlist 文件,并且成功缓存了媒体文件,这样上游服务器的流量就处于与 1/2 个用户相同的水平。

问题是,当我尝试缓存块列表文件(仅 1 秒)时,流有时会滞后/挂起。如果我不这样做,那么上游服务器会受到严重打击(我猜)?

我肯定忽略了某些简单的东西。

顺便说一句,延迟其实并不重要。延迟可能会非常大。

我当前的配置:

server {
 listen  80;
 listen [::]:80;
 server_name localhost;
 root /usr/share/nginx/html;

 location ~ ^/(.*pla.*) {
  proxy_pass https://upstream-provider.com/$1;
  proxy_ignore_headers Cache-Control;
  proxy_cache_valid any 5s;
  proxy_hide_header Cache-Control;
  add_header Cache-Control "public, max-age=5";
  proxy_cache edge-cache;
 }

 location ~ ^/(.*chunklist.*) {
  proxy_pass https://upstream-provider.com/$1;
  proxy_ignore_headers Cache-Control;
  proxy_cache_valid any 1s;
  proxy_hide_header Cache-Control;
  add_header Cache-Control "public, max-age=1";
  proxy_cache edge-cache;
 }

 location ~ ^/(.*media.*) {
  proxy_ignore_headers Cache-Control;
  proxy_cache_valid any 2m;
  proxy_hide_header Cache-Control;
  add_header Cache-Control "public, max-age=20";
  proxy_cache edge-cache;
 }

有什么方法可以让我的 nginx 下载 ts/m3u8 文件并延迟几秒钟提供它们,以便缓存可以被填满?

我当时想写一个小型服务来处理这个逻辑,并将其放入文件系统,然后让 nginx 从文件系统提供文件。然后我还必须处理提供延迟的块列表,这似乎很麻烦。

欢迎任何建议。

相关内容