ngx_http_mp4_module モジュール

設定例
ディレクティブ
     mp4
     mp4_buffer_size
     mp4_max_buffer_size
     mp4_limit_rate
     mp4_limit_rate_after
     mp4_start_key_frame

ngx_http_mp4_module モジュールはMP4ファイルの擬似的なストリーミングのサーバサイドサポートを提供します。そのようなファイルは主に.mp4, .m4v または .m4a ファイル拡張子を持ちます。

擬似的なストリームは互換性のあるmediaプレイヤーと連携して動作します。プレイヤーはクエリ文字列の引数(単純にstartという名前の秒数で指定)で指定された開始時間のHTTPリクエストをサーバに送信し、サーバはリクエストされた時間に対応する場所から開始するストリームを応答します。例えば:

http://example.com/elephants_dream.mp4?start=238.88

これにより、いつでもランダムシーキング、あるいは時間割りの中での再生の開始を実施することができます。

シーキングをサポートするために、H.264ベースのフォーマットはメタデータをいわゆる"moov atom"に保存します。それはファイル全体のインデックス情報を保持するファイルの一部です。 file.

再生を開始するには、プレイヤーはまずメタデータを読む必要があります。これはstart=0 引数と一緒に特別なリクエストを送ることで行われます。たくさんのエンコーディングソフトウェアがファイルの最後にメタデータを挿入します。プレイヤーは再生を開始する前にファイル全体をダウンロードする必要があるため、これは擬似ストリーミングにとって部分的に最適です。メタデータがファイルの先頭に配置された場合、nginxにとっては単純にファイルの内容を送り返し始めるだけで十分です。メタデータがファイルの最後に配置された場合、nginxはファイル全体を読み込み、メディアデータの前にメタデータが来るように新しいストリームを準備する必要があります。これはいくらかのCPU、メモリ、disk I/Oのオーバーヘッドを必要とします。そのため、そのようなリクエストのたびにnginxがこれをするよりは、前もって<c1>擬似ストリーミングのための元のファイルを準備するのは良い考えです。

このモジュールは再生の終了場所を設定するHTTPリクエストのend 引数 (1.5.13) もサポートします。end 引数はstart引数と一緒に、あるいは別々に指定することができます:

http://example.com/elephants_dream.mp4?start=238.88&end=555.55

0では無い または end引数のリクエストのマッチングのために、nginxはファイルからメタデータを読み込み、リクエストされた範囲のストリームを準備し、クライアントにそれを送信するでしょう。これは上で述べたのと同じオーバーヘッドがあります。

start引数がnon-keyビデオフレームを指している場合、そのようなビデオの先頭は壊れます。この問題を解決するには、ビデオのstartポイントの前にキーフレームを追加し、その間に全ての中間フレームを追加します。これらのフレームは編集リストを使って再生からは隠されます(1.21.4)。

startend 引数が無いリクエストのマッチングの場合は、オーバーヘッドは無く、静的なリソースのように単純にファイルが送信されるでしょう。いくつかのプレイヤーはバイト範囲のリクエストをサポートしており、従ってこのモジュールを必要としません。

このモジュールはデフォルトではビルドされず、--with-http_mp4_module configureパラメータを有効にする必要があります。

サードパーティのmp4モジュールが前もって使われている場合は、無効にする必要があります。

FLVファイルの同じような擬似ストリーミングサポートがngx_http_flv_moduleモジュールで提供されています。

設定例

location /video/ {
    mp4;
    mp4_buffer_size       1m;
    mp4_max_buffer_size   5m;
    mp4_limit_rate        on;
    mp4_limit_rate_after  30s;
}

ディレクティブ

構文: mp4;
デフォルト: -
コンテキスト: 場所

取り囲んでいるlocation内で、モジュールの処理を作動させます。

構文: mp4_buffer_size size;
デフォルト:
mp4_buffer_size 512K;
コンテキスト: http, server, location

MP4ファイルを処理するために使われるバッファの size の初期値を設定します。

構文: mp4_max_buffer_size size;
デフォルト:
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 mp4_max_buffer_size

構文: mp4_limit_rate on | off | factor;
デフォルト:
mp4_limit_rate off;
コンテキスト: http, server, location

クライアントへの応答転送のレートを制限します。レートはMP4ファイルが提供する平均のビットレートに基づいて制限されます。レートを計算するために、ビットレートは指定された factorを掛け算します。特別な値"on"は1.1のfactorに対応します。特別な値"off"はレートの制限を無効にします。制限はリクエストごとに設定されます。もしクライアントが同時に二つの接続を開いた場合は、全体のレートは指定された制限の二倍になるでしょう。

このディレクティブは商用許可の一部として利用可能です。

構文: mp4_limit_rate_after time;
デフォルト:
mp4_limit_rate_after 60s;
コンテキスト: http, server, location

クライアントへの初期設定量以上の応答を制限するメディアデータ量(再生時間で計測されます)を設定します。

このディレクティブは商用許可の一部として利用可能です。

構文: mp4_start_key_frame on | off;
デフォルト:
mp4_start_key_frame off;
コンテキスト: http, server, location

このディレクティブはバージョン1.21.4から導入されました。

ビデオ出力を常にキービデオフレームで開始するように強制します。start 引数がキーフレームを指していない場合は、最初のフレームはmp4編集リストを使って非表示になります。編集リストは、Chrome, Safari, QuickTime, ffmpegなどの主要なプレーヤーとブラウザでサポートされており、Firefoxで部分的にサポートされています。

TOP
inserted by FC2 system