問題
次の構成を使用して、.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/