Teste de velocidade

O Facebook tem servidores de ingestão no mundo todo para transmitir seus vídeos ao vivo. Use testes de velocidade para escolher o servidor de ingestão de vídeo mais adequado à transmissão.

Para executar um teste de velocidade, envie um arquivo binário a um conjunto de URLs de destino na ordem em que elas foram recebidas. Cada teste avalia a conectividade de um servidor específico de ingestão de vídeo do Facebook. O servidor responde com detalhes sobre a velocidade de conexão detectada, o tempo de envio e de resposta, entre outros fatores importantes. A inclusão desses resultados em cada teste sucessivo permite ao Facebook escolher o próximo conjunto de URLs de destino até que o melhor servidor de ingestão seja determinado. A seguir, a API responde com um token de destino. Depois de obter um token de destino, inclua-o sempre que criar uma transmissão de vídeo ao vivo para que a API responda com a URL de stream ideal para a conexão.

Também é possível usar a ferramenta Facebook Live Ingests em vez da API de Teste de Velocidade para determinar os servidores de ingestão ideais para a transmissão de vídeo ao vivo.

Etapa 1: iniciar uma nova sessão de teste

Para fazer isso, envie uma solicitação para:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

O ponto de extremidade responderá com um objeto JSON contendo uma lista de casos de teste. Cada caso de teste contém uma URL de destino e uma contagem de bytes.

Exemplo de solicitação

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

Exemplo de resposta

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

Etapa 2: teste cada URL de destino

Para testar todos os casos, carregue um arquivo binário do tamanho designado por byte_count na URL de destino correspondente.

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

Exemplo de solicitação

Neste exemplo, {binary-file} é um arquivo com 3.145.728 bytes aleatórios, o que corresponde à contagem de bytes da resposta.

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

Exemplo de resposta

Uma string opaca é retornada.

eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO...   //Truncated for brevity

Crie uma matriz chamada previous_results contendo um objeto JSON com as seguintes propriedades e valores:

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

Observação: considere result_string uma string opaca. Não tente interpretar a resposta do ponto de extremidade do teste. Se o codificador não conseguir acessar a URL de destino, omita essa entrada da lista previous_results.

ParâmetroDescrição

{destination-url}

A URL de destino que você testou.

{opaque-string}

A string do resultado de teste retornado pela URL.

Exemplo de matriz com resposta única de teste

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

Anexe cada URL de destino e resposta de teste à matriz previous_results.

Avisos

  • Execute cada teste na ordem em que eles foram recebidos. A execução paralela de testes pode reduzir a precisão dos resultados.
  • Use sempre o número de bytes indicado em cada caso de teste. Alguns casos exigem números diferentes. Por exemplo, um caso de teste inicial pode usar um carregamento pequeno para restringir o conjunto de localizações qualificadas. Por outro lado, casos posteriores podem usar carregamentos maiores para definir estimativas mais confiáveis.
  • Use sempre bytes aleatórios para garantir que a solicitação não seja comprimida. Os bytes não aleatórios podem passar por compressão, e solicitações comprimidas diminuem a precisão dos testes de velocidade.

Etapa 3: solicite outro conjunto de URLs de destino

Após testar o primeiro conjunto de URLs, solicite outro e inclua os resultados anteriores.

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

Substitua {previous-results} pela matriz dos resultados de teste que você armazenou.

Exemplo de solicitação

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

O ponto de extremidade retorna uma nova lista de casos de teste ou um token de destino. Se mais casos forem retornados, teste cada um deles e solicite outro conjunto. Continue fazendo isso até receber um token. Um token será retornado quando a sessão de teste for concluída.

Exemplo de resposta com token

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
PropriedadeDescrição

target_token

Uma string para inclusão ao usar APIs de Vídeo ao vivo. Quando um token de destino é incluído, a API de Vídeo ao vivo retorna URLs de stream otimizadas para sua conexão.

upload_bandwidth_estimate_bits_per_second

A largura de banda upstream estimada do dispositivo ao Facebook. Você pode usar isso para configurar a taxa de bits máxima do codificador de vídeo. Por exemplo, se esse valor for 10.000.000, você poderá configurar o codificador para uma saída de stream de vídeo de 8 Mbps.

Observação: a largura de banda de carregamento é uma estimativa e pode mudar drasticamente conforme houver alterações nas condições da rede. Por exemplo, a largura de banda de carregamento poderá mudar se o stream for enviado a uma localização diferente para gerenciar a capacidade ou evitar pontos de falha em comum entre streams de entrada.

Etapa 4: obtenha uma URL de stream ideal

Crie uma transmissão de vídeo ao vivo normalmente. Em seguida, consulte a identificação do vídeo ao vivo e inclua o token de destino:

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

O ponto de extremidade retorna uma URL de stream protegida e otimizada para sua conexão.

Exemplo de solicitação

Neste exemplo, "atl" é o target_token retornado pelo teste de velocidade.

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

Exemplo de resposta

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

Melhores práticas

Execute cada caso de teste de velocidade na mesma ordem em que recebê-los e em sequência, não em paralelo. A execução de diversos casos de teste de velocidade ao mesmo tempo levará a resultados imprecisos.

Quando usar tokens de destino para obter URLs de stream, inicie uma nova sessão de teste de velocidade para cada transmissão de vídeo ao vivo. Não reutilize resultados de testes antigos. Pode haver alterações nas URLs de teste, nas respostas das URLs de teste e nos tokens de destino.

Recomendamos refazer o teste de velocidade quando uma ou mais das seguintes situações acontecerem:

  • A conectividade da rede mudou. Por exemplo, houve uma mudança de Wi-Fi para uma conexão com fio.
  • O aplicativo ficou inativo por algum tempo.
  • O aplicativo detectou uma mudança nas condições da rede. Por exemplo, buffers de envio estão em preenchimento ou não é possível transmitir na largura de banda estimada.
  • A qualidade da conexão mudou. Por exemplo, um link entre dois provedores de serviços de internet (ISPs, pelas iniciais em inglês) congestionou.

Quando um novo token de destino for retornado, pare de usar a URL de stream atual e comece a usar a URL nova retornada pelo token.

Se as condições da rede forem precárias demais para oferecer um stream confiável, o aplicativo deverá solicitar que o editor do vídeo melhore a conectividade de rede. Por exemplo, verifique se nenhum outro aplicativo está usando a largura de banda, troque a conexão sem fio por uma com fio, aumente a largura de banda da internet ou solicite ao seu provedor de internet uma conexão direta com o Facebook.