ngx_http_hls_module モジュール
設定例 ディレクティブ hls hls_buffers hls_forward_args hls_fragment hls_mp4_buffer_size hls_mp4_max_buffer_size |
ngx_http_hls_module
モジュールはMP4およびMOVメディアファイルのHTTPライブストリーミング(HLS)のサーバサイドサポートを提供します。そのようなファイルは主に.mp4
, .m4v
, .m4a
, .mov
または .qt
ファイル名の拡張子を持ちます。モジュールは H.264ビデオコーディック、AAC および MP3 オーディオコーディックをサポートします。
各メディアファイルについて、2つのURIがサポートされます:
-
"
.m3u8
" ファイル名拡張子を使ったプレイリストURI。URIは任意の引数を受け付けることができます:-
"
start
"および"end
"は秒単位のプレイリストの境界を定義します(1.9.0)。 -
"
offset
"は秒単位で初期プレイバックの時間オフセットをずらします(1.9.0)。正の値はプレイリストの最初からの時間オフセットを設定します。負の値はプレイリストの最後のフラグメントからの時間オフセットを設定します。 -
"
len
"は秒単位でフラグメントの長さを定義します。
-
"
-
"
.ts
"ファイル名拡張子を使ったフラグメントURI。URIは任意の引数を受け付けることができます:-
"
start
"および"end
"は秒単位のフラグメントの境界を定義します。
-
"
このモジュールは商用許可の一部として利用可能です。
設定例
location / { hls; hls_fragment 5s; hls_buffers 10 10m; hls_mp4_buffer_size 1m; hls_mp4_max_buffer_size 5m; root /var/video/; }
この設定により、"/var/video/test.mp4
"のための次のURIがサポートされます:
http://hls.example.com/test.mp4.m3u8?offset=1.000&start=1.000&end=2.200 http://hls.example.com/test.mp4.m3u8?len=8.000 http://hls.example.com/test.mp4.ts?start=1.000&end=2.200
ディレクティブ
構文: |
hls; |
---|---|
デフォルト: | - |
コンテキスト: |
場所 |
取り囲んでいるlocation内でHLSストリーミングを作動させます。
構文: |
hls_buffers |
---|---|
デフォルト: |
hls_buffers 8 2m; |
コンテキスト: |
http , server , location |
データフレームの読み込みと書き込みに使われるバッファの number
と size
の最大値を設定します。
構文: |
hls_forward_args |
---|---|
デフォルト: |
hls_forward_args off; |
コンテキスト: |
http , server , location |
このディレクティブはバージョン1.5.12から導入されました。
プレイリストリクエストから断片のURIの引数を追加します。これは、断片のリクエスト時のクライアント認証を実施する場合やngx_http_secure_link_moduleモジュールでHLSストリームを保護する時に役立つかも知れません。
例えば、クライアントがプレイリストhttp://example.com/hls/test.mp4.m3u8?a=1&b=2
をリクエストすると、start
とend
引数の後に引数 a=1
と b=2
が追加されるでしょう:
EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:15 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.333, test.mp4.ts?start=0.000&end=9.333&a=1&b=2 #EXTINF:7.167, test.mp4.ts?start=9.333&end=16.500&a=1&b=2 #EXTINF:5.416, test.mp4.ts?start=16.500&end=21.916&a=1&b=2 #EXTINF:5.500, test.mp4.ts?start=21.916&end=27.416&a=1&b=2 #EXTINF:15.167, test.mp4.ts?start=27.416&end=42.583&a=1&b=2 #EXTINF:9.626, test.mp4.ts?start=42.583&end=52.209&a=1&b=2 #EXT-X-ENDLIST
HLSストリームがngx_http_secure_link_module モジュールで保護されると、断片をリクエストする時にエラーを起こすため、secure_link_md5表現の中で$uri
は使われるべきではありません。$uri
(例では$hls_uri
)の代わりにBase URI が使われるべきです。
http { ... map $uri $hls_uri { ~^(?<base_uri>.*).m3u8$ $base_uri; ~^(?<base_uri>.*).ts$ $base_uri; default $uri; } server { ... location /hls/ { hls; hls_forward_args on; alias /var/videos/; secure_link $arg_md5,$arg_expires; secure_link_md5 "$secure_link_expires$hls_uri$remote_addr secret"; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; } } } }
構文: |
hls_fragment |
---|---|
デフォルト: |
hls_fragment 5s; |
コンテキスト: |
http , server , location |
"len
"引数無しでリクエストされたプリイリストURIのデフォルトの断片の長さを定義します。
構文: |
hls_mp4_buffer_size |
---|---|
デフォルト: |
hls_mp4_buffer_size 512k; |
コンテキスト: |
http , server , location |
MP4およびMOVファイルを処理するために使われるバッファの初期 サイズ
を設定します。
構文: |
hls_mp4_max_buffer_size |
---|---|
デフォルト: |
hls_mp4_max_buffer_size 10m; |
コンテキスト: |
http , server , location |
metadataの処理中は、もっと大きなバッファが必要になるかも知れません。そのサイズは指定されたsize
を超えることはできません。そうでなければサーバエラー500 (Internal Server Error)が返され、以下のメッセージが記録されるでしょう:
"/some/movie/file.mp4" mp4 moov atom is too large: 12583268, you may want to increase hls_mp4_max_buffer_size