概要
P2Pの効果はバッファ時間、ビットレート、エンコード方式、通信事業者、ユーザーの地理的分布、端末デバイスの性能など、様々な要因の影響を受けます。
m3u8(またはmpd)の設定もP2P効果に大きな影響を与えます。適切な設定(各セグメントの長さや各m3u8/mpdに含まれるセグメント数など)により、P2P率を大幅に向上させることができます。マルチビットレートのm3u8/mpdは使用しないことをお勧めします。
ライブ配信モードのm3u8/mpd参考設定
- セグメント長:3〜4秒
- 各m3u8/mpdのセグメント数:10個以上
NGINXの例:
rtmp {
server {
...
application show {
...
hls_fragment 4; # 4 seconds fragments
hls_playlist_length 60; # 60 seconds playlist
}
}
}Http Rangeリクエストを許可する
Http Rangeリクエストは指定範囲のデータをダウンロードするために使用され、一部のデータをすでにP2Pでダウンロード済みの場合に、残りの部分をhttpダウンロードで補うことができます。ピアからのP2Pダウンロード速度が遅い場合、タイムアウト時間に達した時点で残りのデータをhttp rangeリクエストによるダウンロードに任せることができ、データ全体を最初からダウンロードし直す必要がなくなるため、CDNの帯域幅を節約できます。下図はHttp Rangeを使用しない場合と使用する場合の違いを示しています: 
Http Rangeリクエストを有効にするには、オリジンサーバーとCDNの両方でOPTIONSリクエストとRANGEリクエストを有効にする必要があります:(ネイティブ側ではOPTIONSを有効にする必要はありません)
OPTIONSリクエスト
OPTIONSリクエストは、クロスオリジンの場合にブラウザがRangeリクエストを発行する前に送信するプリフライトリクエストです。通常はサーバー側でHttpヘッダーに以下のレスポンスを含めるよう設定するだけで済みます:(AndroidとiOSでは設定不要です)
Access-Control-Allow-Methods: GET, OPTIONSRANGEリクエスト
RANGEリクエストを有効にするには、通常はサーバー側でHttpヘッダーに以下のレスポンスを含めるよう設定するだけで済みます:
Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Content-Length, Content-RangeNGINXの例
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Allow-Headers' 'Range';
add_header 'Access-Control-Allow-Origin' '*';
add_header Accept-Ranges bytes;
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Headers' 'Range';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}Web SDK設定の推奨事項
Android SDK設定の推奨事項
スーパーノードのデプロイ
こちらを参照してください
