LOG IN SIGN UP
Documentation

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

  Last updated March 26, 2019

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

Shielding の有効化

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

ビデオのマニフェストファイルとセグメントファイルの TTL設定

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

以下は、ビデオマニフェストとセグメントに異なる TTL を設定する VCL コードのサンプルです。このコードは VCL スニペットに追加して利用することが可能です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sub vcl_fetch {
#FASTLY fetch

  # Set 1s ttls for video manifest and 3600s ttls for segments of HTTP Streaming formats.
  # Microsoft Smooth Streaming format manifest and segments do not have file extensions.
  # Look for the keywords "Manifest" and "QualityLevel" to identify manifest and segment requests.
  if (req.url.ext ~ "m3u8|mpd" || req.url.path ~ "Manifest") {
    set beresp.ttl = 1s;
    return (deliver);
  }
  else {
    if (req.url.ext ~ "aac|dash|m4s|mp4|ts" || req.url.path ~ "QualityLevel") {
      set beresp.ttl = 3600s;
      return (deliver);
    }
  }

  return (deliver);
}

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

エラー に短時間の TTL を設定

デフォルトの挙動では、Fastly はキャッシュ可能なオブジェクトの TTL を設定するのにオリジンサーバー側で設定され Fastly サーバーに送られた Cache-Control ヘッダーを利用します。 ただし、オリジンサーバーは200, や206以外のレスポンスに対して Cache-Control ヘッダーを送らない送らないかもしれません。 その場合、 Fastly はオリジンへ大量のリクエストを送信することを防ぐために、キャッシュ対象のステータスコードをデフォルト TTL(通常は3600秒)でキャッシュします。デフォルトでキャッシュ対象外のステータスコードは、 beresp.cacheabletrue を設定することでキャッシュさせることが出来ます。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
sub vcl_fetch {
#FASTLY fetch

  # Set 1s ttl if origin response HTTP status code is anything other than 200 and 206
  if (!http_status_matches(beresp.status, "200,206")) {
    set beresp.ttl = 1s;
    set beresp.cacheable = true;
    return (deliver);
  }

  return (deliver);
}

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
sub vcl_fetch {
#FASTLY fetch

  # Enable Streaming Miss only for video or audio objects.
  # Below conditions checks for video or audio file extensions commonly used in
  # HTTP Streaming formats.
  if (req.url.ext ~ "aac|dash|m4s|mp4|ts") {
    set beresp.do_stream = true;
  }

  return (deliver);
}

自動 Gzip 圧縮の設定

以下の表を参考にして、拡張子、または content-type を条件にマニフェストファイルを 自動 Gzip 圧縮することが出来ます。

HTTP ストリーミングフォーマット ファイル拡張子 content-type
Apple HLS m3u8 application/x-mpegurl, application/vnd.apple.mpegurl
MPEG-DASH mpd application/dash+xml
Adobe HDS f4m, bootstrap application/f4m (for manifest), application/octet-stream (for bootstrap)
Microsoft HSS N/A application/vnd.ms-sstr+xml

CORS ヘッダーの設定

別ドメインでビデオやオーディオの再生を行う場合は、CORS ヘッダーを設定します。

高度な TCP の最適化

キャッシュサーバーとクライアント間のレスポンスタイムを最適化し、ビデオの再生開始までの時間("time-to-first-frame")や再バッファ率を下げるために TCP 通信の最適化を行うことが出来ます。以下の TCP に関連する設定の最適化をご検討下さい。

上記の高度な TCP の最適化は、以下のコードを VCL スニペットに追加することで実装が可能です。

1
2
3
4
5
6
7
8
9
10
11
sub vcl_deliver {
#FASTLY deliver

  # increase init cwnd for only client requests
  if (!req.http.Fastly-FF && client.requests == 1) {
    set client.socket.cwnd = 45;
    set client.socket.congestion_algorithm = "bbr";
  }

  return(deliver);
}

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

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

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

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

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

ライブストリーム配信に関するトラブルシュートやデバッグに備えて、リアルタイムログストリーミング を設定し、以下のようなTCP コネクション、キャッシュ、その他の処理時間に関する指標vcl_log で記録することをお勧めします。

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

Surrogate キーによるパージの活用

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

ライブから VOD への変換

多くののエンコーダーはライブ用のエンコード実施時に VOD で利用可能なマニフェストファイルも生成します。VOD 用のマニフェストファイルがライブ用のマニフェストファイルと同じ URL に存在する場合、ライブ用のマニフェストファイルをパージ(削除)するか、キャッシュが無効化する(通常短い TTL が設定されています)まで待つ必要があります。 保管したライブビデオを mp4 で保管する場合、 Fastly の OTFP サービスを利用して配信することをご検討下さい。


Additional resources:


Back to Top