速度测试

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,则您可对编码器作出配置,以输出 8Mbps 的直播视频。

请注意:上传带宽是一个预估值,可能会随着网络情况的变化出现大幅波动。例如,如果将直播视频发送到其他位置以管理容量或避免输入流之间出现共有故障点,则上传带宽可能会发生改变。

第 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}”
}

最佳实践

按照接收顺序运行每个速度测试用例(请按顺序运行,而不要并行运行)。同时运行多个速度测试用例会导致结果不准确。

使用目标口令获取直播网址时,为每个视频直播发起新的速度测试会话。不要重用旧测试结果。测试网址、测试网址响应和目标口令可能会发生变化。

建议在出现以下任一情况时重新运行速度测试:

  • 您的网络连接发生变化。例如,从 wifi 改为有线连接。
  • 您的应用已空闲一段时间。
  • 您的应用检测到网络状况已发生变化。例如,发送缓冲区已满,或者您无法以预估带宽进行直播。
  • 您的连接质量发生变化。例如,两个 ISP 之间的链路变得拥塞。

返回新的目标口令后,停止使用当前直播网址,然后开始使用新口令返回的新直播网址。

如果网络状况过差,难以进行质量稳定的直播,您的应用应提醒视频发布者改善其网络连接状况。例如,确保没有其他应用正在使用带宽、从无线连接切换到有线连接、提高互联网带宽,或要求互联网供应商直接连接到 Facebook