0

問題

次の構成を使用して、.mp4 ファイルをストリーミングするために Nginx Plus で HLS モジュールを使用しています。

    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 が m3u8 プレイリストではなく、mp4 ファイルをクライアントに直接返すことです。

nginxでmp4ファイルを取得して保存し、HLSモジュールを使用してm3u8プレイリストファイルを生成することは可能ですか? または別の言い方をすれば、mp4 ファイルの存在を確認し、見つからない場合は取得して保存し、HLS モジュールを使用してファイルをストリーミングする /hls の場所にアクセスできますか?

これはNginx Plusなので、モジュールを書くことができません。含まれているモジュールのみを使用できます。こちらを参照してください https://www.nginx.com/products/technical-specs/

4

1 に答える 1

0

Nginx Plus にはサードパーティのLua モジュールが含まれており、/hls の場所に移動する前に、Lua を使用してバックエンド サーバーから mp4 ファイルを取得できました。

于 2016-01-12T20:51:40.043 に答える