Prueba de velocidad

Facebook tiene servidores de ingesta de datos de videos en vivo en todo el mundo para transmitir este tipo de videos. La prueba de velocidad te ayuda a elegir el mejor servidor de ingesta de datos de video para tu transmisión.

Para realizar la prueba de velocidad, tienes que enviar un archivo binario a un conjunto de URL de destino en el orden en que las recibes. En cada prueba, se evalúa tu conectividad con un determinado servidor de ingesta de datos de video de Facebook. El servidor responde con información detallada sobre la velocidad de conexión detectada, el tiempo que tarda el proceso de envío y recepción, y otros factores importantes. Gracias a que estos resultados se incluyen en cada una de las pruebas, Facebook puede elegir el siguiente conjunto de URL de destino hasta determinar cuál es el mejor servidor de ingesta de datos. Luego, la API responde con un token de destino. Una vez que tengas un token de destino, inclúyelo siempre que crees una transmisión de video en vivo y la API responderá con una URL de stream optimizada para tu conexión.

También puedes usar la herramienta Facebook Live Ingests en lugar de la API de prueba de velocidad para determinar cuáles son los mejores servidores de ingesta de datos para tu transmisión de video en vivo.

Paso 1: Inicia una nueva sesión de prueba

Para iniciar una nueva sesión de prueba, envía una solicitud a:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

El punto de conexión responderá con un objeto JSON que incluirá una lista de casos de prueba. Cada caso de prueba contiene una URL de destino y una cantidad de bytes.

Ejemplo de solicitud

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

Ejemplo de respuesta

{                        //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"
   }
 ]
}

Paso 2: Prueba cada URL de destino

Para probar cada caso, sube un archivo binario con el tamaño que indique el parámetro byte_count a la URL de destino que corresponda.

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

Ejemplo de solicitud

En este ejemplo, {binary-file} es un archivo con 3.145.728 bytes aleatorios, lo cual coincide con la cantidad de bytes que se indica en la respuesta.

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

Ejemplo de respuesta

Se devuelve una cadena opaca.

eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO...   //Truncated for brevity

Crea una matriz llamada previous_results que contenga un objeto JSON conformado por las siguientes propiedades y valores:

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

Nota: Considera result_string como una cadena opaca. No intentes interpretar la respuesta del punto de conexión de prueba. Si el codificador no puede llegar a la URL de destino, omite dicha entrada en la lista previous_results.

ParámetroDescripción

{destination-url}

La URL de destino que probaste.

{opaque-string}

La cadena de resultado de prueba que devolvió la URL.

Ejemplo de matriz con la respuesta a una prueba

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

Agrega cada URL de destino y cada respuesta de prueba a la matriz previous_results.

Advertencias

  • Ejecuta cada prueba en el orden en el que la recibas. Si ejecutas varias pruebas en paralelo, es posible que los resultados sean menos precisos.
  • Asegúrate de usar la cantidad de bytes que se indica en cada caso de prueba. En algunos casos de prueba, se requieren diferentes cantidades de bytes. Por ejemplo, es posible que, en los primeros casos de prueba, se suban cantidades pequeñas para acotar el conjunto de ubicaciones aptas y que, en los casos de prueba posteriores, se suban cantidades mayores para realizar estimaciones más certeras.
  • Asegúrate de usar bytes aleatorios para que la solicitud no se pueda comprimir. Los bytes no aleatorios quizá se puedan comprimir, y las solicitudes comprimidas reducen la precisión de las pruebas de velocidad.

Paso 3: Solicita otro conjunto de URL de destino

Después de probar el primer conjunto de URL, solicita otro conjunto e incluye los resultados anteriores.

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

Reemplaza {previous-results} con la matriz de resultados de prueba que guardaste.

Ejemplo de solicitud

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

El punto de conexión devolverá otra lista de casos de prueba o un token de destino. Si responde con más casos, prueba cada uno de ellos y, luego, solicita otro conjunto. Repite este proceso hasta que responda con un token. Si responde con un token, eso significa que la sesión de prueba ya finalizó.

Ejemplo de respuesta con un token

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
PropiedadDescripción

target_token

Una cadena que debes incluir al usar API de video en vivo. Si se incluye un token de destino, la API de video en vivo devuelve URL de stream optimizadas para tu conexión.

upload_bandwidth_estimate_bits_per_second

El ancho de banda estimado de subida desde el dispositivo hacia Facebook. Puedes usar este valor para configurar la máxima velocidad de bits en tu codificador de video. Por ejemplo, si este valor es 10000000, puedes configurar la salida del codificador para que el stream de video sea de 8 Mbps.

Nota: El ancho de banda de subida es un valor estimado y puede cambiar considerablemente si se modifican las condiciones de la red. Por ejemplo, puede cambiar si el stream se envía a otra ubicación para administrar la capacidad o para evitar que diferentes streams de entrada tengan los mismos puntos de falla.

Paso 4: Obtén una URL de stream óptima

Crea una transmisión de video en vivo como sueles hacerlo y, luego, envía una consulta con el identificador de video en vivo y el token de destino:

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

El punto de conexión responderá con una URL de stream segura y optimizada para tu conexión.

Ejemplo de solicitud

En este ejemplo, el valor de target_token que devuelve la prueba de velocidad es atl.

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

Ejemplo de respuesta

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

Prácticas recomendadas

Ejecuta cada caso de prueba de velocidad en el orden en que lo recibas y de manera secuencial, no en paralelo. Si ejecutas varios casos de prueba de velocidad a la vez, los resultados no serán precisos.

Cuando uses tokens de destino para obtener URL de stream, inicia una nueva sesión de prueba de velocidad por cada transmisión de video en vivo. No reutilices resultados de pruebas anteriores. Puede haber cambios en las URL de prueba, las respuestas a las URL de prueba y los tokens de destino.

Recomendamos volver a ejecutar la prueba de velocidad cada vez que ocurra alguna de las siguientes condiciones:

  • Hay un cambio en la conectividad de red. Por ejemplo, si cambias de una conexión wifi a una por cable.
  • Tu app estuvo inactiva por un tiempo.
  • Tu app detecta un cambio en las condiciones de red. Por ejemplo, si los búferes de envío se están llenando o si no puedes transmitir con el ancho de banda estimado.
  • Hay un cambio en la calidad de la conexión. Por ejemplo, si se congestiona un enlace entre dos ISP.

Cuando se devuelva un nuevo token de destino, deja de usar la URL de stream actual y comienza a usar la que devuelva el nuevo token.

Si las condiciones de red son muy deficientes para permitir un stream confiable, tu app debería advertirle al editor de videos que se podría mejorar la conectividad de red. Por ejemplo, puedes asegurarte de que ninguna otra app esté usando ancho de banda, cambiar de una conexión inalámbrica a una por cable, aumentar el ancho de banda de internet o pedirle al proveedor de internet que se conecte a Facebook directamente.