速度テスト

Facebookでは、ライブ動画を一斉配信するためのライブ動画取り込みサーバーを世界中に配置しています。速度テストを利用して、自身の一斉配信に最適な動画取り込みサーバーを選択してください。

速度テストを行うには、バイナリーファイルを宛先URLのセットに送信します。その際に、宛先URLを受け取った順に送ります。それぞれのテストは、特定のFacebook動画取り込みサーバーへの接続性を評価します。サーバーの応答には、測定された接続速度、送信してから受信するまでにかかった時間、その他の重要な要素が含まれています。これらの結果を後続の各テストに含めていくと、次の宛先URLのセットが選択され、最適な取り込みサーバーが決定します。そうすると、APIはターゲットトークンを含めた応答を返します。ターゲットトークンが得られたら、ライブ動画一斉配信を作成するときに常にそのトークンを含めます。そうするとAPIは、あなたの接続に最適なストリーミングURLを含めた応答を返します。

速度テストAPIの代わりにFacebook Live Ingestsツールを使用して、自身のライブ動画一斉配信に最適な取り込みサーバーを判断することもできます。

ステップ1: 新規テストセッションの開始

新規テストセッションを開始するには、次にリクエストを送信します:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

エンドポイントの応答には、テストケースのリストを含んだJSONオブジェクトが含まれます。それぞれのテストケースには、宛先URLとバイトカウントが含まれます。

リクエストの例

curl -i -X GET "https://graph.facebook.com/v3.3/traffic_speedtest \
 ?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second \
 &access_token={access-token}"

応答の例

{                        //Formatted for clarity
 "next_tests": [
   {
     "byte_count": 3145728,
     "url": "https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api"
   },
   {
     "byte_count": 3145728,
     "url": "https://edge-star-mad.xx.fbcdn.net/upload-speed-test-api"
   },
   {
     "byte_count": 3145728,
     "url": "https://edge-star-ort.xx.fbcdn.net/upload-speed-test-api"
   },
   {
     "byte_count": 3145728,
     "url": "https://edge-star-eze.xx.fbcdn.net/upload-speed-test-api"
   }
 ]
}

ステップ2: 各宛先URLのテスト

それぞれのケースをテストするには、byte_countで指定されたサイズのバイナリーファイルを対応する宛先URLにアップロードします。

POST /{destination-url}/upload-speed-test

リクエストの例

この例では、{binary-file}は3145728個のランダムなバイトを含むファイルで、応答のバイトカウントと一致します。

curl --data-binary @{binary-file} https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api

応答の例

意味がない不定の文字列が返されます。

eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO...   //Truncated for brevity

previous_resultsという名前の配列を作成し、次のプロパティと値から成るJSONオブジェクトを含めます:

previous_results=[
 {
   "test_url": "{destination-url}",
   "result_string": "{opaque-string}"
 }
]

: result_stringを、意味がない不定の文字列として扱います。テストエンドポイントからの応答を解釈しようとしないでください。エンコーダーがリンク先URLに到達しない場合、previous_resultsリストのその1つのエントリは省かれます。

パラメーター説明

{destination-url}

テストした宛先URL。

{opaque-string}

URLから返されたテスト結果文字列。

単一のテスト応答の配列の例

previous_results=[           // JSON formatted for clarity
 {
   "test_url": "https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api",
   "result_string": "eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO..."   //Truncated for brevity
 }
]

各宛先URLとテストの応答をprevious_results配列に追加します。

警告

  • 各テストは、受信した順番で実行してください。テストを並行して行うと、結果の精度が悪くなります。
  • それぞれのテストケースで指定されているバイト数を必ず使用してください。テストケースによっては、異なるバイト数が必要です。たとえば、テストケースは初めのうちはアップロードするバイトを少なくして候補になるロケーションを絞り込み、後になってアップロードするバイト数を増やして信頼性が高い推定を確立することができます。
  • 常にランダムなバイトを使用して、リクエストが圧縮されないようにしてください。ランダムになっていないバイトではリクエストが圧縮される可能性があり、速度テストの精度の悪化につながります。

ステップ3: 別の宛先URLセットのリクエスト

最初のURLセットのテスト後、別のセットをリクエストし、以前の結果を含めます。

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second&previous_results={previous-results}

{previous-results}を、保存したテスト結果の配列に置き換えます。

リクエストの例

curl -i -X GET 'https://graph.facebook.com/v3.3/traffic_speedtest \
 ?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second \
 &access_token={access-token} \
 &previous_results=[   // JSON formatted for clarity
   { 
     "test_url":"https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api",
     "result_string":
       {
          "eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO..."   //Truncated for brevity
       }
   },
   {
     "test_url":"https://edge-star-bru.xx.fbcdn.net/upload-speed-test-api",
     "result_string":
       {
          "eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO..."   //Truncated for brevity
       }
   },
   ...  //Truncated for brevity
 ]'

エンドポイントはテストケースの新しいリストかターゲットトークンを返します。新しいケースが返された場合は、それぞれのケースをテストし、その後別のセットをリクエストします。トークンが返されるまで、これを繰り返します。トークンが返されたら、テストセッションの完了です。

トークンを含む応答の例

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
プロパティ説明

target_token

ライブ動画APIを使用するときに含める文字列。ターゲットトークンが含まれていると、ライブ動画APIはあなたの接続に最適なストリーミングURLを返します。

upload_bandwidth_estimate_bits_per_second

デバイスからFacebookへの推定アップストリーム帯域幅。この値を使用して、使用する動画エンコーダーの最大ビットレートを構成できます。たとえば、この値が10000000の場合、エンコーダーが8Mbps動画ストリームを出力するように構成できます。

: アップロード帯域幅は推定であり、ネットワークの状況の変化によって劇的に変化する可能性があります。たとえば、容量を管理するため、または入力ストリーミング間で障害点を共有しないようにするために、ストリーミングが異なるロケーションに送信されている場合、アップロード帯域幅は変化する可能性があります。

ステップ4: 最適なストリーミングURLの取得

ライブ動画一斉配信を通常通りの手順で作成してから、ライブ動画IDをクエリしてターゲットトークンを含めます:

GET /{broadcast-id}?fields=secure_stream_url&target_token={target-token}

エンドポイントの応答には、あなたの接続に最適な、安全なストリーミングURLが含まれます。

リクエストの例

この例では、速度テストで返されたtarget_tokenはatlです。

curl -i -X GET \
"https://graph.facebook.com/v3.3/{broadcast-id} \
  ?fields=secure_stream_url&target_token=atl \
  &access_token={access-token}"

応答の例

{
 “secure_stream_url”: “rtmps://...”,  //Optimized stream URL
 “id”: “{broadcast-id}”
}

ベストプラクティス

速度テストの各ケースは、受信した順番通りに(並行ではなく)実行します。複数の速度テストケースを同時に行うと、結果が不正確になります。

ターゲットトークンを使用してストリーミングURLを取得する際には、ライブ動画一斉配信ごとに新しい速度テストセッションを開始してください。古いテスト結果を再利用しないでください。テストURL、テストURLの応答、ターゲットトークンは変化する可能性があります。

次のいずれかの条件が発生した場合は、速度テストを再実行することをおすすめします:

  • ネットワーク接続が変化した。たとえば、wifiから有線接続に変えた、など。
  • アプリが一定の時間アイドル状態になっている。
  • アプリがネットワーク状況の変化を検出した。たとえば、送信バッファーが一杯になる、推定された帯域幅でストリーミングができないなど。
  • 接続の質が変化した。たとえば、2つのISPの間のリンクが混雑状態になったなど。

新しいターゲットトークンが返されたら、現在のストリーミングURLの使用を中止し、新しいトークンによって返された新しいストリーミングURLの使用を開始してください。

安定したストリーミングが提供できないほどネットワークの状況が悪い場合、アプリから動画パブリッシャーに警告を出し、ネットワーク接続を改善できるようにしてください。たとえば、他のアプリが帯域幅を使用していないことを確認する、無線接続から有線接続に切り替える、アプリのインターネット帯域幅を増やす、またはFacebookに直接接続するようインターネットプロバイダーに依頼するなどの方法で改善できます。