ストリーミング設定ガイドライン

Fastly はパブリックまたはプライベートクラウドのストレージなどにアーカイブまたは録画された HTTP ストリーミング用コンテンツをライブで配信することができます。ライブストリーミングの配信を行う場合、以下のガイドラインに沿った VCL の設定をおすすめしています。不明な点についてはカスタマーサポートまでお問い合わせ下さい。

シールドの有効化

オリジンサーバーに対し特定のシールド POP を指定し Shielding を有効化することで、Fastly ネットワーク内でのライブストリーミングの可用性をより高める事ができます。注目度の高いイベントなどのためにプライマリ、セカンダリのオリジンを設定している場合は、地理的に近いシールド POP をそれぞれのオリジンに設定して下さい。

動画マニフェストファイルとセグメントキャッシュの TTL 設定

HLS などでは、新しいセグメントが使用可能になるとビデオのマニフェストファイルが定期的に更新されます。マニフェストファイルの TTL は、ビデオセグメントの長さの半分以下 (例えば 5 秒のビデオセグメントの場合は通常 1 - 2 秒) に設定することをお勧めします。長時間の DVR やライブストリームから VOD へ変換する場合は、セグメントの TTL をシールド POP で長く、エッジ POP ではメモリから確実に配信されるよう短く (3600 秒以下) に設定します。

以下のVCL コードのサンプルを、動画マニフェストとセグメントに異なる TTL を設定する際の参考にしてください。このコードはVCL スニペットに追加して利用することが可能です。

1sub vcl_fetch {
2#FASTLY fetch
3 # Set 1s ttls for video manifest and 3600s ttls for segments of HTTP Streaming formats.
4 # Microsoft Smooth Streaming format manifest and segments do not have file extensions.
5 # Look for the keywords "Manifest" and "QualityLevel" to identify manifest and segment requests.
6 if (req.url.ext ~ "m3u8|mpd" || req.url.path ~ "Manifest") {
7 set beresp.ttl = 1s;
8 return (deliver);
9 }
10 else {
11 if (req.url.ext ~ "aac|dash|m4s|mp4|ts" || req.url.path ~ "QualityLevel") {
12 set beresp.ttl = 3600s;
13 return (deliver);
14 }
15 }
16 return (deliver);
17}

MIME タイプに応じてビデオマニフェストとセグメントを識別することも可能です。

エラーに対する TTL は短く設定

Fastly は、オリジンからのCache-Controlヘッダーに基づきキャッシュ可能なオブジェクトの TTL を設定するようにデフォルト設定されています。しかし、200や206以外の HTTP ステータスコードレスポンスに対しては、オリジンサーバーから Cache-Controlヘッダーは送信されるとは限りません。その場合、Fastly はオリジンへ大量のリクエストを送信することを防ぐために、キャッシュ対象のステータスコードをデフォルト TTL (通常は 3600 秒) でキャッシュします。キャッシュ対象外のステータスコードは、 beresp.cacheableフラグを true設定することでキャッシュさせることができます。

ライブストリームの場合は、ビデオセグメントが数秒ごとに追加されます。ライブストリームトランスコーダーの一般的な設定では、5秒毎にビデオセグメントを生成し、ビデオセグメントが使用可能になり次第マニフェストファイルが更新されるようになっています。ただし、ビデオプレイヤーがまだ使用可能でないセグメントへアクセスを行い、500や503といったエラーレスポンスが返却されることがしばしば発生します。このような場合は、ステータスコードレスポンスをキャッシュ可能にし、短い TTL を設定することで、オリジンに回復する時間 (1秒程度) を与えることができます。

以下は、ステータスコードが 200、206 以外の場合のエラーレスポンスを1秒間キャッシュする VCL コードのサンプルです。このコードは VCL スニペットに追加して利用することが可能です。

1sub vcl_fetch {
2#FASTLY fetch
3 # Set 1s ttl if origin response HTTP status code is anything other than 200 and 206
4 if (!http_status_matches(beresp.status, "200,206")) {
5 set beresp.ttl = 1s;
6 set beresp.cacheable = true;
7 return (deliver);
8 }
9 return (deliver);
10}

ストリーミングミスの設定

ストリーミングミスを設定することで、Fastly サーバーがオリジンからコンテンツを取得する必要がある場合のクライアント (ビデオプレイヤー) でのストリームのダウンロード待ち時間を減らすことが出来ます。ストリーミングミスはチャンクセグメントと呼ばれるビデオとオーディオオブジェクトにのみ有効化すべきです。

ストリーミングミスを設定に以下の VCL コードのサンプルをご活用ください。このコードはVCL スニペットに追加して利用することが可能です。

1sub vcl_fetch {
2#FASTLY fetch
3 # Enable Streaming Miss only for video or audio objects.
4 # Below conditions checks for video or audio file extensions commonly used in
5 # HTTP Streaming formats.
6 if (req.url.ext ~ "aac|dash|m4s|mp4|ts") {
7 set beresp.do_stream = true;
8 }
9 return (deliver);
10}

自動圧縮の設定

ファイル拡張子またはコンテンツタイプに基づいてマニフェストファイルの自動圧縮をガイドとして、以下の表を使用して設定します。

HTTP ストリーミング形式ファイル拡張子content-type
Apple HLSm3u8application/x-mpegurl、application/vnd.apple.mpegurl
MPEG-DASHmpdapplication/dash+xml
Adobe HDSf4m, bootstrapapplication/f4m (マニフェスト用)、application/octet-stream (bootstrap 用)
Microsoft HSS該当なしapplication/vnd.ms-sstr+xml

CORS の設定

別ドメインでビデオやオーディオの再生を行う場合は、サービスで CORS ヘッダーを設定します。クライアントは、CORS プリフライトリクエストを送信し、メインリクエストが送信しても良いかどうかを判断することができます。

デフォルトでは、オプションリクエストはオリジンに送信されます。これに代わり、CDN からのシンセティックレスポンスでレスポンスを返すことができます。また、シンセティックで特別にオプションを処理する例もあります。オプションリクエストがオリジンを通過できる場合、オプションリクエストのキャッシュを推奨します。

メソッドの設定

メディアオリジンでは、リクエストは通常、GET と HEAD メソッドのみに使用されるため、オリジンでは期待されていない他のリクエストをブロックするに値します。デフォルトでは、Fastly は GET、HEAD、FASTLYPURGE メソッドに送ります。カスタム VCL を使用して、405エラーをクライアントに送信することで、他のすべてのリクエストをブロックすることができます。

1sub vcl_recv {
2#FASTLY recv
3 if (req.method != "HEAD" && req.method != "GET" && req.method != "FASTLYPURGE") {
4 error 405; # This is a `return(pass);` by default
5 }
6return(lookup);
7}
注意

ここではロジックを慎重に考慮してください。PUT/PATCH と DELETE メソッドは、クライアントに使用されるドメインと直接オリジンのホスト名を扱う場合にのみ必要になる可能性があります。オプションリクエストは、オリジンに送信されることをブロックする場合は、シンセティックに処理する必要があります。これが失敗すると、失敗シナリオが発生する可能性があります。

試験的な BBR TCP 輻輳制御アルゴリズムの有効化

BBR TCP の輻輳制御アルゴリズムは、ユーザーエクスペリエンスを改善できる追加 TCP 設定です。デフォルトで使用されている、レイテンシベースではなくパケットロスに基づくCUBIC TCP 輻輳制御アルゴリズムとは異なり、BBR は一時的なパケットロス時にも遅延をコントロールしながら帯域を最大化できるように設計されています。

警告

BBR は一時的なパケットロス発生時などでは CUBIC よりも優れたパフォーマンスが期待できますが、BBR は現在 開発途中 であることにご注意下さい。利用することで一部のユーザーにおいてパフォーマンスの低下が発生する可能性があります。

BBR を適用するには、VCL スニペットを利用して以下のコードを追加して下さい。

1sub vcl_deliver {
2#FASTLY deliver
3 # set congestion algorithm for client requests
4 if (!req.http.Fastly-FF && client.requests == 1) {
5 set client.socket.congestion_algorithm = "bbr";
6 }
7 return(deliver);
8}
ヒント

TCP 最適化はクライアント全体ではなく特定の条件に応じて適用することができます。例えば、特定のモバイルや無線ネットワークの ASN や ISP ネットワークにのみ BBR を有効化することなどをご検討下さい。

オリジンタイムアウトの設定

オリジンからライブストリームのセグメントが遅延なくダウンロードされるように、最適なオリジンタイムアウトの設定を行います。例えば、ライブストリームのセグメントファイルが5秒の場合は、Origin Connect 値は1秒、First byte と Between bytes timeout は2秒に設定します。通常、これらの値は Fastly がクライアントのリクエストに適切なレスポンスを返却する前に、別のオリジン (設定されている場合) に対してリトライが行えるように設定します。

フェイルオーバー (フォールバック) オリジンの設定

エンコーダーやリソースの高負荷などの問題による配信障害に備えて、フェイルオーバーオリジンの設定をご検討下さい。

リアルタイムログ配信の設定

ライブストリーム配信に関するトラブルシュートやデバッグに備えて、リアルタイム・ログ・ストリーミングを設定し、vcl_log に TCP 接続やキャッシュ、その他の処理時間に関するメトリクスを含めることをお勧めします。例えば、以下を含めることをご検討ください。

これらの指標を分析することにより、スループット上の問題や、ABR プレイバック を利用している場合にビデオプレイヤーが別の品質のストリームに切り替えた原因の調査に役に立つ可能性があります。

サロゲートキーによるパージの活用

Fastly の Surrogate キーを利用することで、特定のライブストリームに関するすべてのセグメントファイル、マニフェストファイルを一度の API コールで Fastly ネットワーク上からパージ (削除) することができます。

ライブから VOD へのスムーズな変換

エンコーダーは通常、ライブストリームしたビデオを VOD 用に変換する際、別の動画マニフェストを生成します。VOD 用のマニフェストファイルがライブ用のマニフェストファイルと同じ URL を利用する場合、ライブ用のマニフェストファイルをパージするか、キャッシュが無効化される (通常短い TTL が設定されているため) まで待つ必要があります。ライブビデオが mp4 でアーカイブに保管される場合は、Fastly の OTFP サービス を利用して配信することをご検討下さい。

注意

Wowza 統合。 Wowza をオリジンサーバーとして利用する場合は、アプリケーションの種類として Liv[e HTTP Origin を選択して下さい。Live Edge を選択すると、Wowza はマニフェストへのリクエストに対して常に異なる URL を返却するため極端にキャッシュヒット率が低くなります。


翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。