0

问题

我正在使用 Nginx Plus 中的 HLS 模块来流式传输 .mp4 文件,使用以下配置:

    location /hls {
        hls;
        hls_fragment 10s;
        hls_buffers 10 10m;
        hls_mp4_buffer_size 1m;
        hls_mp4_max_buffer_size 10m;
        alias /var/www/vod/cache;
    }

当 .mp4 文件存在于/var/www/vod/cache. 当客户端请求时http://example.com/hls/file.mp4.m3u8,HLS 模块会即时生成 m3u8 播放列表并将其返回。

但是,我宁愿不将所有 mp4 文件存储在流服务器上,而是将文件存储在后端存储服务器上。理想情况下,mp4 文件只会在客户端请求特定视频时从存储服务器检索并存储在本地(稍后将通过 cron 作业删除)。使用 proxy_store 我可以检索 mp4 文件并使用如下配置将它们存储在本地:

    location @fetch_content {
        internal;
        rewrite ^/hls(.*).mp4.m3u8$ $1.mp4 break;
        proxy_pass         http://example-storage.com;
        proxy_store        on;
        proxy_store_access user:rw group:rw all:r;
        proxy_temp_path    /tmp;
        root /var/www/vod/cache;
    }

使用proxy_pass的问题是nginx直接返回mp4文件给客户端,而不是m3u8播放列表。

是否可以让 nginx 检索并存储 mp4 文件,然后使用 HLS 模块生成 m3u8 播放列表文件?或者另一种说法,我可以检查 mp4 文件是否存在,如果找不到,则检索并存储它,然后点击将使用 HLS 模块流式传输文件的 /hls 位置?

由于这是 Nginx Plus,我无法编写模块。我只能使用包含的模块,请参见此处https://www.nginx.com/products/technical-specs/

4

1 回答 1

0

Nginx Plus 包括第 3 方Lua 模块,我能够在定向到 /hls 位置之前使用 Lua 从后端服务器检索 mp4 文件。

于 2016-01-12T20:51:40.043 回答