Speed test

Facebook dispone di server di acquisizione di video in diretta in tutto il mondo utilizzati per trasmettere i tuoi video in diretta. Utilizza lo speed test per scegliere il miglior server di acquisizione video per la tua trasmissione.

L'esecuzione di uno speed test implica l'invio di un file binario a un insieme di URL di destinazione nell'ordine in cui sono stati ricevuti. Ogni test valuta la tua connettività a uno specifico server di acquisizione video di Facebook. Il server risponde con dettagli sulla velocità di connessione misurata, sul tempo necessario per l'invio e la ricezione e su altri fattori importanti. L'inclusione di questi risultati in ogni test successivo consente a Facebook di scegliere il gruppo successivo di URL di destinazione fino a quando non viene determinato il server di acquisizione migliore. L'API risponde quindi con un target token. Quando hai un target token, includilo ogni volta che crei una trasmissione video in diretta e l'API risponde con un URL di streaming ottimizzato per la tua connessione.

Puoi anche usare lo Strumento Facebook Live Ingests invece dell'API Speed Test per determinare i server di acquisizione ottimali per la trasmissione di video in diretta.

Passaggio 1: avviare una nuova sessione di test

Per avviare una nuova sessione di test, invia una richiesta a:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

L'endpoint risponde con un oggetto JSON contenente una lista di scenari di test. Ogni scenario di test contiene un URL di destinazione e un conteggio di byte.

Richiesta di esempio

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

Risposta di esempio

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

Passaggio 2: eseguire il test di ogni URL di destinazione

Per testare ogni scenario, carica un file binario della dimensione designata da byte_count nell'URL di destinazione corrispondente.

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

Richiesta di esempio

In questo esempio, {binary-file} è un file contenente 3145728 byte casuali che corrisponde al numero di byte della risposta.

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

Risposta di esempio

Viene restituita una stringa opaca.

eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO...   //Truncated for brevity

Crea un array denominato previous_results contenente un oggetto JSON composto da proprietà e valori seguenti:

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

Nota: tratta result_string come una stringa opaca. Non tentare di interpretare la risposta ottenuta dall'endpoint del test. Se il codificatore non è in grado di raggiungere l'URL di destinazione, ometti quella singola voce nella lista previous_results.

ParametroDescrizione

{destination-url}

L'URL di destinazione che hai testato.

{opaque-string}

La stringa del risultato del test restituita dall'URL.

Array di esempio con singola risposta del test

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

Aggiungi ogni URL di destinazione e verifica la risposta all'array previous_results.

Precisazioni

  • Esegui ogni test nell'ordine in cui è stato ricevuto. L'esecuzione di test in parallelo potrebbe ridurre l'accuratezza dei risultati.
  • Usa sempre il numero di byte specificato in ogni scenario di test. Alcuni scenari di test richiedono numeri di byte diversi. Ad esempio, uno scenario di test iniziale può utilizzare un caricamento ridotto per restringere l'insieme di luoghi idonei, mentre gli scenari di test successivi potrebbero utilizzare caricamenti più grandi per stabilire stime di maggiore affidabilità.
  • Usa sempre byte casuali per assicurarti che la richiesta non possa essere compressa. I byte non casuali potrebbero essere comprimibili e le richieste compresse riducono l'accuratezza dello speed test.

Passaggio 3: richiedere un altro gruppo di URL di destinazione

Dopo aver testato il primo gruppo di URL, richiedi un altro gruppo e includi i risultati precedenti.

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

Sostituisci {previous-results} con l'array dei risultati del test che hai memorizzato.

Richiesta di esempio

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

L'endpoint restituisce una nuova lista di scenari di test o un target token. Se risponde con più scenari, prova ciascuno di essi, quindi richiedi un altro gruppo. Continua finché non risponde con un token. Se la risposta è con un token, significa che la sessione di test è stata completata.

Esempio di risposta con token

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
ProprietàDescrizione

target_token

Una stringa da includere quando si utilizzano le API Live Video. Quando viene incluso un target token, l'API Live Video restituirà URL di streaming ottimizzati per la tua connessione.

upload_bandwidth_estimate_bits_per_second

La larghezza di banda upstream stimata dal dispositivo a Facebook. Puoi usarla per configurare il bitrate massimo per il tuo codificatore video. Ad esempio, se questo valore è 10000000, puoi configurare il codificatore su un output di streaming video di 8 Mbps.

Nota: la larghezza di banda in upload è una stima e potrebbe cambiare drasticamente al variare delle condizioni della rete. Ad esempio, se lo streaming viene inviato a una località diversa per gestire la capacità o per evitare punti di errore condivisi tra flussi di input, la larghezza di banda in upload potrebbe cambiare.

Passaggio 4: ottenere un URL di streaming ottimale

Crea una trasmissione video in diretta come faresti normalmente, quindi interroga l'ID video in diretta e includi il target token:

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

L'endpoint risponde con un URL di streaming sicuro ottimizzato per la tua connessione.

Richiesta di esempio

In questo esempio, il target_token restituito dallo speed test è atl.

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

Risposta di esempio

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

Best practice

Esegui gli scenari di speed test nell'ordine in cui vengono ricevuti, in sequenza, non in parallelo. L'esecuzione di più scenari di speed test contemporaneamente restituirà risultati imprecisi.

Quando utilizzi target token per ottenere gli URL di streaming, avvia una nuova sessione di speed test per ogni trasmissione video in diretta. Non riutilizzare vecchi risultati di test. Gli URL di test, le risposte degli URL di test e i target token possono cambiare.

È consigliabile ripetere lo speed test quando si verifica una delle seguenti condizioni:

  • La connettività di rete cambia. Ad esempio, passi dal Wi-Fi a una connessione cablata.
  • L'app è rimasta inattiva per un po' di tempo.
  • L'app rileva che le condizioni della rete sono cambiate. Ad esempio, i buffer di invio si stanno riempiendo o non è possibile eseguire lo streaming alla larghezza di banda stimata.
  • La qualità della connessione cambia. Ad esempio, un collegamento tra due ISP diventa congestionato.

Quando viene restituito un nuovo target token, interrompi l'utilizzo dell'URL di streaming corrente e inizia a utilizzare il nuovo URL di streaming restituito dal nuovo token.

Se le condizioni di rete sono troppo scarse per fornire uno streaming affidabile, la tua app dovrebbe richiedere all'editore del video di migliorare la connettività di rete. Ad esempio, assicurati che nessun'altra app utilizzi la larghezza di banda, passa da una connessione wireless a una cablata, aumenta la larghezza di banda Internet o chiedi al tuo provider Internet di eseguire la connessione direttamente a Facebook.