속도 테스트

Facebook에는 세계 각지에 라이브 방송을 내보내는 데 사용하는 라이브 방송 수집 서버가 있습니다. 속도 테스트를 통해 방송에 가장 적합한 방송 수집 서버를 선택합니다.

속도 테스트를 수행할 때는 랜딩 페이지 URL 세트에 바이너리 파일을 전송합니다(수신한 순서대로). 각 테스트에서는 특정 Facebook 방송 수집 서버의 연결성을 평가합니다. 서버는 측정된 연결 속도에 대한 상세 정보, 송수신에 걸리는 시간 및 다른 중요한 요소를 포함하여 응답합니다. 각 연속 테스트에 이러한 결과를 포함하면 Facebook은 최적의 수집 서버가 결정될 때까지 다음 랜딩 페이지 URL 세트를 선택할 수 있습니다. 그러면 API가 타겟 토큰을 포함하여 응답합니다. 타겟 토큰을 받고 나서 라이브 방송을 생성할 때마다 해당 토큰을 포함하면 API는 연결에 최적화된 스트리밍 URL로 응답합니다.

또한 속도 테스트 API 대신 Facebook Live 수집 도구를 사용하여 라이브 방송에 최적인 수집 서버를 결정할 수 있습니다.

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 테스트

각 사례를 테스트하려면 byte_count에서 지정된 용량의 바이너리 파일을 해당 랜딩 페이지 URL에 업로드합니다.

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

다음의 속성과 값으로 구성된 JSON 개체를 포함한 previous_results 배열을 생성합니다.

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 배열에 추가합니다.

주의 사항

  • 수신한 순서대로 각 테스트를 실행합니다. 테스트를 동시에 실행하면 결과의 정확도가 떨어질 수 있습니다.
  • 항상 각 테스트 사례에서 지정된 바이트 수를 사용합니다. 일부 테스트 사례의 경우 다른 바이트 수가 필요합니다. 예를 들어 초기의 테스트 사례는 적은 용량을 업로드하여 적격 위치 세트의 범위를 좁힐 수 있지만, 이후의 테스트 사례는 더 큰 용량을 업로드하여 신뢰도가 높은 추산치를 설정할 수 있습니다.
  • 항상 무작위 바이트를 사용하여 요청이 압축되지 않도록 합니다. 비무작위 바이트는 압축될 수 있으며, 요청이 압축되면 속도 테스트의 정확도가 떨어집니다.

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

엔드포인트는 새로운 테스트 사례 리스트 또는 타겟 토큰을 반환합니다. 더 많은 사례를 포함하여 응답하는 경우 각 사례를 테스트한 다음, 다른 세트를 요청합니다. 토큰을 포함하여 응답할 때까지 이 작업을 계속 진행합니다. 토큰을 포함하여 응답할 경우 테스트 세션이 완료되었다는 것을 의미합니다.

토큰을 포함한 응답 샘플

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
속성설명

target_token

라이브 방송 API를 사용할 때 포함할 문자열. 타겟 토큰을 포함하면 라이브 방송 API는 연결에 최적화된 스트리밍 URL을 반환합니다.

upload_bandwidth_estimate_bits_per_second

기기에서 Facebook으로의 예상 업스트림 대역폭. 이를 사용하여 동영상 인코더의 최대 비트 전송률을 구성할 수 있습니다. 예를 들어 이 값이 10,000,000일 경우 8Mbps 동영상 스트리밍을 출력하도록 인코더를 구성할 수 있습니다.

참고: 업로드 대역폭은 추산치이며 네트워크 상태가 바뀌면 크게 변동될 수 있습니다. 예를 들어 용량을 관리하거나 입력 스트리밍 간의 장애 지점이 공유되는 것을 방지하기 위해 스트리밍을 다른 위치로 보내면 업로드 대역폭이 변동될 수 있습니다.

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을 가져올 때 각 라이브 방송에 새 속도 테스트 세션을 시작합니다. 이전의 테스트 결과를 다시 사용하지 마세요. 테스트 URL, 테스트 URL 응답, 타겟 토큰은 변경될 수 있습니다.

다음과 같은 상황이 하나라도 발생하면 속도 테스트를 다시 진행하는 것이 좋습니다.

  • 네트워크 연결이 변경되는 경우 (예: Wi-Fi에서 유선 연결로 이동)
  • 앱을 한동안 사용하지 않은 경우
  • 앱에서 네트워크 상태가 변경된 것을 감지한 경우 (예: 전송 버퍼가 채워지고 있거나 예상 대역폭에서 스트리밍할 수 없음)
  • 연결 품질이 변경되는 경우 (예: 두 ISP 간의 링크가 혼잡해짐)

새 타겟 토큰이 반환되면 기존 스트리밍 URL을 사용 중단하고 새 토큰에서 반환된 새 스트리밍 URL을 사용하세요.

네트워크 상태가 매우 불량하여 안정적인 스트리밍을 제공하지 못할 경우 앱에서 동영상 퍼블리셔에게 네트워크 연결을 개선하도록 경고해야 합니다. 예를 들어 대역폭을 사용하는 다른 앱이 없도록 하거나, 무선 연결에서 유선 연결로 전환하거나, 인터넷 대역폭을 높이거나, 인터넷 제공업체에 Facebook에 바로 연결하도록 요청합니다.