Geschwindigkeitstest

Facebook besitzt Live-Video-Erfassungsserver auf der ganzen Welt, die zur Übertragung deiner Live-Videos verwendet werden. Mithilfe von Geschwindigkeitstests kannst du den besten Videoerfassungsserver für deine Übertragung auswählen.

Bei einem Geschwindigkeitstest sendest du eine Binärdatei an eine Gruppe von Ziel-URLs in der Reihenfolge, in der sie eingegangen sind. Jeder Test bewertet deine Verbindung mit einem bestimmten Facebook-Videoerfassungsserver. Der Server antwortet mit Details zur gemessenen Verbindungsgeschwindigkeit, der Dauer von Sende- und Empfangsvorgängen sowie anderen wichtigen Faktoren. Durch Aufnahme dieser Ergebnisse in jeden nachfolgenden Test kann Facebook die nächste Gruppe mit Ziel-URL auswählen, bis der beste Aufnahmeserver ermittelt wurde. Die API antwortet dann mit einem Zielschlüssel. Verwende diesen Zielschlüssel immer dann, wenn du eine Live-Video-Übertragung erstellst. Die API antwortet daraufhin mit einer Stream-URL, die für deine Verbindung optimiert ist.

Anstelle der API für den Geschwindigkeitstest kannst du außerdem das Facebook Live Ingests-Tool verwenden, um die optimalen Erfassungsserver für deine Live-Video-Übertragung zu ermitteln.

Schritt 1: Eine neue Testsitzung starten

Sende zum Starten einer neuen Testsitzung eine Anforderung an:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

Der Endpunkt antwortet mit einem JSON-Objekt, das eine Liste mit Testfällen enthält. Jeder Testfall umfasst eine Ziel-URL und eine Byteanzahl.

Beispielanfrage

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

Beispielantwort

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

Schritt 2: Jede Ziel-URL testen

Lade zum Testen der einzelnen Fälle eine Binärdatei in der durch den Wert „byte_count“ vorgegebenen Größe über die zugehörige Ziel-URL hoch.

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

Beispielanfrage

In diesem Beispiel ist {binary-file} eine Datei mit einer zufällig bestimmten Byteanzahl von 3.145.728, was der Byteanzahl aus der Antwort entspricht.

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

Beispielantwort

Es wird ein verdeckter String zurückgegeben.

eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO...   //Truncated for brevity

Erstelle ein Array namens previous_results, das ein aus den folgenden Eigenschaften und Werten bestehendes JSON-Objekt enthält:

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

Hinweis: Behandle result_string wie einen verdeckten String. Versuche nicht, die Antwort vom Testendpunkt zu interpretieren. Wenn der Encoder die Ziel-URL nicht erreichen kann, lässt du diesen Einzeleintrag in der previous_results-Liste aus.

ParameterBeschreibung

{destination-url}

Die getestete Ziel-URL.

{opaque-string}

Der von der URL zurückgegebene String mit dem Testergebnis.

Beispiel-Array mit einzelner Testantwort

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

Hänge jede Ziel-URL an und teste die Antwort auf das previous_results-Array.

Warnungen

  • Führe die einzelnen Tests in der Reihenfolge ihres Eingangs durch. Wenn Tests gleichzeitig durchgeführt werden, sind die Ergebnisse unter Umständen weniger genau.
  • Verwende stets die im jeweiligen Testfall angegebene Byteanzahl. Bei einigen Testfällen wird eine andere Byteanzahl verlangt. Beispiel: Bei einem früheren Testfall wird ein kleiner Upload verwendet, um die Anzahl der in Frage kommenden Standorte einzugrenzen, während bei späteren Testfällen größere Uploads verwendet werden, um Schätzungen mit höherer Zuverlässigkeit zu erhalten.
  • Verwende stets eine zufällig bestimmte Anzahl von Bytes, um zu gewährleisten, dass die Anfrage nicht komprimiert werden kann. Nicht zufällig bestimmte Byteanzahlen können komprimiert werden. Komprimierte Anfragen wiederum verringern die Genauigkeit von Geschwindigkeitstests.

Schritt 3: Weitere Gruppe von Ziel-URLs anfordern

Fordere nach dem Testen der ersten Gruppe von URLs eine weitere Gruppe an und füge die vorherigen Ergebnisse ein.

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

Ersetze {previous-results} durch das Array der Testergebnisse, das du gespeichert hast.

Beispielanfrage

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

Der Endpunkt sendet entweder eine neue Liste mit Testfällen oder einen Zielschlüssel zurück. Wenn die Antwort neue Fälle enthält, teste jeden einzelnen und fordere dann eine weitere Gruppe von URLs an. Wiederhole diesen Vorgang, bis die Antwort einen Schlüssel enthält. Der Schlüssel gibt an, dass die Testsitzung abgeschlossen ist.

Beispielantwort mit Schlüssel

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
EigenschaftBeschreibung

target_token

Ein String, der bei Verwendung der Live-Video-APIs einzufügen ist. Wenn ein Zielschlüssel verwendet wird, gibt die Live-Video-API Stream-URLs zurück, die für deine Verbindung optimiert sind.

upload_bandwidth_estimate_bits_per_second

Die geschätzte Upstream-Bandbreite vom Gerät zu Facebook. Mit diesem Wert kannst du die maximale Bitrate für deinen Video-Encoder konfigurieren. Beispiel: Wenn dieser Wert 10.000.000 beträgt, kannst du den Encoder so konfigurieren, dass er einen Video-Stream mit 8 Mbit/s ausgibt.

Hinweis: Die Upload-Bandbreite ist ein Schätzwert und kann sich bei veränderten Netzwerkbedingungen erheblich ändern. Beispielsweise kann sich die Bandbreite ändern, wenn der Stream an einen anderen Ort gesendet wird, um die Kapazität zu bewältigen oder um gemeinsame Fehlerquellen zwischen Eingabe-Streams zu vermeiden.

Schritt 4: Eine optimierte Stream-URL abrufen

Erstelle wie gewohnt eine Live-Video-Übertragung. Frage dann die Live-Video-ID ab, und füge deinen Zielschlüssel ein:

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

Der Endpunkt antwortet mit einer sicheren URL, die für deine Verbindung optimiert ist.

Beispielanfrage

In diesem Beispiel lautet der Zielschlüssel (target_token), den der Geschwindigkeitstest zurückgegeben hat, „atl“.

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

Beispielantwort

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

Best Practices

Führe alle Geschwindigkeitstestfälle in der Reihenfolge aus, in der sie eingegangen sind, und zwar nacheinander, nicht gleichzeitig. Wenn du mehrere Geschwindigkeitstestfälle gleichzeitig ausführst, erhältst du ungenaue Ergebnisse.

Wenn du zum Abrufen von Stream-URLs Zielschlüssel verwendest, beginne für jede Live-Video-Übertragung eine neue Geschwindigkeitstestsitzung. Alte Testergebnisse sollten nicht wiederverwendet werden. Test-URLs, Test-URL-Antworten und Zielschlüssel können sich ändern.

Wir empfehlen, einen Geschwindigkeitstest zu wiederholen, wenn eine der folgenden Bedingungen zutrifft:

  • Deine Netzwerkverbindung ändert sich. Beispiel: Du stellst von einer WLAN- auf eine kabelgebundene Verbindung um.
  • Deine App war eine Zeit lang inaktiv.
  • Deine App hat erkannt, dass sich deine Netzwerkbedingungen geändert haben. Beispiel: Sendepuffer sind nahezu ausgeschöpft, oder du kannst nicht mit der geschätzten Bandbreite streamen.
  • Die Qualität deiner Verbindung ändert sich. Beispiel: Ein Link zwischen zwei ISPs ist überlastet.

Wenn ein neuer Zielschlüssel zurückgesendet wird, solltest du nicht mehr die aktuelle Stream-URL, sondern die neue Stream-URL verwenden, die vom neuen Schlüssel zurückgesendet wurde.

Wenn die Netzwerkbedingungen für einen zuverlässigen Stream zu schlecht sind, sollte deine App den Video-Herausgeber warnen, damit dieser die Netzwerkverbindung optimieren kann. Beispiel: Vergewissere dich, dass keine andere App Bandbreite nutzt, stelle von einer WLAN- auf eine kabelgebundene Verbindung um oder bitte deinen Internet-Anbieter, direkt mit Facebook in Kontakt zu treten.