Prueba de velocidad

Facebook cuenta con servidores de ingesta de vídeos en directo en todo el mundo que se usan para transmitir tus vídeos en directo. Usa las pruebas de velocidad a fin de elegir el servidor de ingesta de vídeo más adecuado para tu transmisión.

Realizar una prueba de velocidad implica enviar un archivo binario a un conjunto de URL de destino según el orden en el que se hayan recibido. En cada prueba se evalúa la conectividad con un servidor de ingesta de vídeo de Facebook específico. El servidor responde con detalles sobre la velocidad de la conexión medida y el tiempo que tarda en completar el envío y la recepción, además de otros factores importantes. La inclusión de estos resultados en cada prueba sucesiva permite a Facebook elegir el siguiente conjunto de URL de destino hasta que se determina el mejor servidor para la ingesta. A continuación, la API responde con un identificador de destino. Una vez que tengas un identificador de destino, inclúyelo cuando crees una transmisión de vídeo en directo y la API responda con una URL de transmisión optimizada para tu conexión.

En lugar de la API de prueba de velocidad, también puedes usar la herramienta Ingestas de Facebook Live a fin de determinar los servidores de ingesta óptimos para tu transmisión de vídeo en directo.

Paso 1: iniciar 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 extremo responde con un objeto JSON que contiene una lista de casos de prueba. Cada caso de prueba contiene una URL de destino y un recuento 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: probar cada URL de destino

Para probar cada caso, sube un archivo binario del tamaño que designe el elemento byte_count a su URL de destino correspondiente.

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

Ejemplo de solicitud

En este ejemplo, {binary-file} es un archivo que contiene 3 145 728 bytes aleatorios, lo que coincide con el recuento de bytes de 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 denominada previous_results que contenga un objeto JSON compuesto por las propiedades y los valores siguientes:

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

Nota: Trata result_string como una cadena opaca. No intentes interpretar la respuesta desde el extremo de prueba. Si el codificador no puede acceder a la URL de destino, omite esa entrada única en la lista previous_results.

ParámetroDescripción

{destination-url}

URL de destino que probaste.

{opaque-string}

Cadena del resultado de prueba que devolvió la URL.

Ejemplo de matriz con la respuesta de una sola 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
 }
]

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

Advertencias

  • Ejecuta cada prueba según el orden en que se recibió. Si ejecutas pruebas en paralelo, es posible que disminuya la precisión de los resultados.
  • Usa siempre el número de bytes especificado en cada caso de prueba. Algunos casos de prueba requieren distintos números de bytes. Por ejemplo, puede que un caso de prueba inicial use una subida pequeña para restringir el conjunto de ubicaciones válidas, mientras que es posible que los casos de prueba posteriores usen subidas de mayor tamaño a fin de establecer estimaciones con una confianza más alta.
  • Usa siempre bytes aleatorios a fin de asegurarte de que la solicitud no se pueda comprimir. Es posible que los bytes que no sean aleatorios se puedan comprimir. Sin embargo, las solicitudes comprimidas disminuyen la precisión de las pruebas de velocidad.

Paso 3: solicitar otro conjunto de URL de destino

Después de probar el primer conjunto de URL, solicita otro 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} por la matriz de resultados de prueba que almacenaste.

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 extremo devuelve una nueva lista de casos de prueba o un identificador de destino. Si responde con más casos, prueba cada uno de ellos y, a continuación, solicita otro conjunto. Repite este proceso hasta que responda con un identificador. Si responde con un identificador, significa que la sesión de prueba se completó.

Ejemplo de respuesta con el identificador

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

target_token

Cadena que se debe incluir al usar las API de vídeo en directo. Cuando se incluya un identificador de destino, la API de vídeo en directo devolverá las URL de transmisión optimizadas para tu conexión.

upload_bandwidth_estimate_bits_per_second

Ancho de banda de subida estimado del dispositivo a Facebook. Puedes usarlo para configurar la velocidad de bits máxima de tu codificador de vídeo. Por ejemplo, si este valor es 10000000, puedes configurar el codificador para que obtenga una transmisión de vídeo de 8 Mbps.

Nota: El ancho de banda de subida es un valor estimado y puede cambiar de forma drástica a medida que cambian las condiciones de la red. Por ejemplo, si la transmisión se envía a otra ubicación a fin de administrar la capacidad o evitar puntos de error compartidos entre las transmisiones de entrada, puede que el ancho de banda de subida cambie.

Paso 4: obtener una URL de transmisión óptima

Crea una transmisión de vídeo en directo tal y como lo harías habitualmente y, a continuación, consulta el identificador de vídeo en directo e incluye el identificador de destino:

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

El extremo responde con una URL de transmisión segura optimizada para tu conexión.

Ejemplo de solicitud

En este ejemplo, el elemento target_token que devolvió 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 según el orden en que se reciba y de forma secuencial, en lugar de en paralelo. Si ejecutas varios casos de prueba de velocidad a la vez, obtendrás resultados poco precisos.

Cuando uses los identificadores de destino para obtener URL de transmisión, inicia una nueva sesión de prueba de velocidad para cada transmisión de vídeo en directo. No vuelvas a usar los resultados de pruebas anteriores. Es posible que las URL de prueba, las respuestas de las URL de prueba y los identificadores de destino cambien.

Recomendamos volver a ejecutar una prueba de velocidad en caso de que se cumpla alguna de las condiciones siguientes:

  • Si cambia la conectividad de red. Por ejemplo, la conexión pasa de ser de Wi-Fi a por cable.
  • Si tu aplicación ha quedado inactiva cierto tiempo.
  • Si tu aplicación detecta que las condiciones de la red han cambiado. Por ejemplo, si se están llenando los búferes de envío o no puedes realizar una transmisión con el ancho de banda estimado.
  • Si cambia la calidad de la conexión. Por ejemplo, se satura un enlace entre dos ISP.

Cuando se devuelva el nuevo identificador de destino, deja de usar la URL de la transmisión actual y empieza a usar la nueva que devolvió el nuevo identificador.

Si las condiciones de la red son demasiado deficientes para proporcionar una transmisión fiable, tu aplicación debería mostrar una advertencia al editor del vídeo para que este pueda mejorar su conectividad de red. Por ejemplo, asegúrate de que no haya ninguna otra aplicación que use ancho de banda, pasa a usar una conexión por cable si usas una inalámbrica, aumenta el ancho de banda de internet o pide a tu proveedor de internet que se conecte directamente a Facebook.