速度測試

Facebook 在世界各地設有直播視像擷取伺服器,用於播放您的直播視像。使用速度測試來選擇最適合您直播的視像擷取伺服器。

在執行速度測試的過程中,系統會以接收一組目標網址的次序將二進位檔案傳送至這些網址。每次測試都會評估您與特定 Facebook 視像擷取伺服器的連接情況。伺服器的回應中會包含測量得出的連線速度詳細資料、傳送和接收操作的所需時間,以及其他重要因素。透過在每個連續的測試中包含這些結果,Facebook 便可以選擇下一組目標網址,直到確定最佳擷取伺服器為止。然後,API 的回應中會包含一個目標憑證。獲得目標憑證後,當您每次建立直播視像時都加入憑證,API 的回應中便會包含一個已為您的連接優化的串流影片網址。

您還可以使用 Facebook Live 擷取工具代替速度測試 API,為您的直播視像確定最佳擷取伺服器。

第 1 步:開始新的測試作業階段

如要開始新的測試作業階段,請傳送要求至:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

端點回應中包含一個含有測試案例清單的 JSON 物件。每個測試案例會包含一個目標網址和一個位元計數。

要求範例

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 步:測試每個目標網址

如要測試每個案例,請將 byte_count 指定大小的二進位檔案上載至其相應目標網址。

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 視為不透明字串。請勿嘗試解讀來自測試端點的回應。如果編碼器無法覆蓋目標網址,則忽略 previous_results 清單中的單一條目。

參數描述

{destination-url}

您測試的目標網址。

{opaque-string}

網址傳回的測試結果字串。

含有單個測試回應的陣列範例

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
 }
]

previous_results 陣列附加每個目標網址和測試回應。

注意事項

  • 以接收次序執行每個測試。同步執行測試會降低結果的準確度。
  • 一律使用每個測試案例中指定的位元數量。部分測試案例需要不同數量的位元。例如,早期測試案例可能使用小型上載操作來縮窄符合資格的位置組合範圍,而後期的測試案例可能使用較大的上載操作來建立信賴指數更高的預測。
  • 一律使用隨機位元來確保要求不會受壓縮。非隨機位元或許可以壓縮,而壓縮後的要求會降低速度測試的準確度。

第 3 步:要求獲得另一組目標網址

測試第一組網址後,要求獲得另一組網址並包含之前的結果。

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 將傳回已為您的連接優化的串流影片網址。

upload_bandwidth_estimate_bits_per_second

從裝置到 Facebook 的預計上游頻寬。您可以使用這個頻寬設定來配置視訊轉碼器的最大位元速率。例如,如果這個值為 10000000,您可以將編碼器配置為輸出 8 Mbps 的影片串流。

請注意:上載頻寬是一個預計值,可能會隨著網絡狀況的變化而大幅變更。例如,如果將串流影片傳送至其他位置,從而管理容量或避免輸入串流影片之間出現共同故障點,則上載頻寬可能會有變化。

第 4 步:獲取最佳串流影片網址

如常建立直播視像,然後查詢直播視像編號並加入您的目標憑證:

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

端點回應中會包含一個已為您的連接優化的安全串流影片網址。

要求範例

在這個範例中,速度測試傳回的 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}”
}

最佳操作實例

以接收次序執行每個速度測試案例(按次序執行,而非同步執行)。同時執行多個速度測試案例會得出不正確的結果。

使用目標憑證獲取串流影片網址時,為每個直播視像開始新的速度測試作業階段。不要重用舊的測試結果。測試網址、測試網址回應和目標憑證可能會有變化。

如果出現以下任何情況,我們建議重複執行速度測試:

  • 您的網絡連線發生變化。例如,從 Wi-Fi 轉到有線連線。
  • 您的應用程式已閒置一段時間。
  • 您的應用程式偵測到網絡狀況有所變化,例如正在填充傳送緩衝,或者您無法以預計的頻寬串流影片。
  • 您的連線質素發生變化,例如,兩個 ISP 之間的連結變得擁擠。

傳回新的目標憑證後,停止使用目前的串流影片網址,並開始使用新憑證傳回的新串流影片網址。

如果網絡狀況太差,難以提供可靠的串流影片,您的應用程式應警告視像發佈者,以便他們改善其網絡連線狀況。例如,確保沒有其他應用程式正在使用頻寬、從無線連線切換至有線連線、提高互聯網頻寬,或要求互聯網供應商直接連線至 Facebook