Тест скорости

Для передачи ваших видеотрансляций используются видеосерверы Facebook по всему миру. Вы можете протестировать скорость загрузки, чтобы выбрать наиболее подходящий сервер.

Для тестирования скорости на ряд целевых URL в порядке их получения поочередно отправляется двоичный файл. При этом оценивается подключение к каждому видеосерверу Facebook. Сервер возвращает измеренное значение скорости подключения, время, затраченное на отправку и получение данных, и другие важные показатели. Используя результаты текущего теста, система Facebook выбирает следующий набор целевых URL, пока не будет определен наилучший видеосервер. После этого API возвращает целевой маркер. Если указать его при создании видеотрансляции, API вернет URL трансляции, оптимизированный для вашего подключения.

Чтобы выбрать оптимальные серверы, вместо API Speed Test можно также использовать инструмент 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.

Чтобы протестировать каждый вариант, загрузите на соответствующий URL двоичный файл такого размера, который указан в параметре byte_count.

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

Пример запроса

В этом примере {binary-file} — это файл, содержащий 3 145 728 случайных байт, т. е. именно то количество, которое указано в ответе.

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.

ПараметрОписание

{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.

Оговорки

  • URL следует тестировать в порядке получения. Выполняя тесты параллельно, можно получить неточные результаты.
  • Используйте именно то количество байтов, которое указано в каждом тестовом варианте. Эти числа могут отличаться. Например, для первых тестов может быть достаточно загрузить небольшой файл, чтобы сузить набор подходящих серверов, а для дальнейших тестов размер файла увеличивается, что позволяет получить более достоверные результаты.
  • Всегда используйте в запросе случайный набор байтов, чтобы его нельзя было сжать. Сжатие снижает точность тестирования скорости.

Шаг 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
 ]'

Конечная точка вернет либо новый список тестовых вариантов, либо целевой маркер. В первом случае протестируйте каждый URL, а затем запросите ещё один набор. Повторяйте эту процедуру, пока не получите маркер. Если конечная точка возвращает маркер, это означает, что сеанс тестирования завершен.

Пример ответа с маркером

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
СвойствоОписание

target_token

Строка, включаемая в вызовы API Live Video. При использовании целевого маркера API Live Video возвращает URL трансляции, оптимизированные для вашего подключения.

upload_bandwidth_estimate_bits_per_second

Прогнозируемая пропускная способность при передаче данных с устройства на Facebook. Это значение можно использовать для настройки скорости потока в кодировщике видео. Например, если оно равно 10 000 000, видеотрансляция может иметь скорость потока 8 Мбит/с.

Примечание. Указывается приблизительная пропускная способность загрузки. Реальное значение может существенно изменяться при изменении состояния сети. Причиной может быть, например, перенаправление трансляции на другой сервер в связи с управлением трафиком или предотвращение появления единой точки отказа.

Шаг 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, ответы от них и целевые маркеры могут меняться.

Мы рекомендуем повторно тестировать скорость в любом из следующих случаев:

  • изменилось ваше сетевое подключение (например, вы перешли с Wi-Fi на проводное подключение);
  • приложение некоторое время бездействовало;
  • приложение обнаружило изменения в состоянии сети (например, переполняются буферы отправки или пропускная способность ниже прогнозируемой);
  • изменилось качество подключения (например, перегружен канал между двумя поставщиками услуг Интернета).

При получении нового целевого маркера следует прекратить использовать текущий URL трансляции и перейти на новый.

Если из-за проблем с сетью надежная трансляция невозможна, приложение должно предупреждать того, кто публикует видео, о том, что качество подключения можно улучшить. Для этого можно, например, запретить другим приложениям передавать трафик, перейти с беспроводного подключения на проводное, увеличить пропускную способность подключения к Интернету или попросить поставщика услуг Интернета установить прямое подключение к Facebook.