Usos avançados

Direcionamento a um público

Incluir e excluir públicos específicos na visualização do seu vídeo ao vivo.

Criar um público-alvo

Antes de começar

Para vídeos ao vivo em uma Página, você precisará do seguinte:

Para vídeos ao vivo em um grupo, você precisará do seguinte:

Exemplos

Envie uma solicitação POST /id em que id é o ID do LiveVideo e defina o campo targeting e os parâmetros relacionados a ele.

curl -i -X POST \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?targeting={age_min:17, geo_locations:{countries:["US","CA","MX"]}}
    &access_token=ACCESS_TOKEN"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/LIVE_VIDEO_ID/",
  new JSONObject("{}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID/"
           parameters:@{ @"targeting": @"{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID/',
  'POST',
  {"targeting":"{age_min:17, geo_locations:{countries:[\"US\",\"CA\",\"MX\"]}, excluded_zipcodes:{\"key\":\"US:10001\"}}"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/LIVE_VIDEO_ID/',
    array (
      'targeting' => '{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}'
    ),
    'ACCESS_TOKEN'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

Exemplo de resposta

{ "targeting": { "age_max": 65, "age_min": 17, "geo_locations": { "countries": [ "US", "CA", "MX" ] } }, "id": "LIVE_VIDEO_ID" } 

Obter informações de público-alvo

Antes de começar

Para vídeos ao vivo em uma Página, você precisará do seguinte:

Para vídeos ao vivo em um grupo, você precisará do seguinte:

  • Um token de acesso do usuário solicitado por um administrador do grupo

Exemplos

Envie uma solicitação GET /id em que id é o ID do LiveVideo com o campo targeting.

GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/LIVE_VIDEO_ID",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "targeting");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID"
           parameters:@{ @"fields": @"targeting",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID',
  'GET',
  {"fields":"targeting"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/LIVE_VIDEO_ID',
    'ACCESS_TOKEN'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();
curl -i -X GET \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?fields=targeting&access_token=ACCESS_TOKEN"

Exemplo de resposta

{ "targeting": { "age_max": 65, "age_min": 17, "geo_locations": { "countries": [ "US" "CA", "MX" ] } }, "id": "LIVE_VIDEO_ID" } 

Transmissão ao vivo com precisão de quadro

Pode haver um pequeno atraso antes da transmissão ir ao vivo. Isso acontece por conta da decodificação dos dados de streaming iniciais, além do processamento das solicitações de API relacionadas. Por isso, determinar o momento exato do início da transmissão pode ser difícil para o apresentador. Para evitar esse problema, é possível definir objetos LiveVideo para aceitar dados de streaming sem que a transmissão vá ao vivo. Nesse caso, ela só será compartilhada com o público quando uma mensagem RTMP de transmissão ao vivo for detectada nos próprios dados de streaming. Dessa forma, qualquer pessoa com acesso às prévias poderá ver a transmissão. Ao mesmo tempo, o codificador do streaming poderá controlar o momento exato em que a transmissão irá ao vivo, além do primeiro quadro a ser visto pelo público.

Para ativar a transmissão ao vivo com precisão de quadro, crie um objeto LiveVideo normalmente e defina o status como PRÉVIA. Após a criação, consulte o objeto LiveVideo e solicite secure_stream_url com os seguintes campos aninhados:

secure_stream_url.inband_go_live(require_inband_signal)

Isso ativará a transmissão ao vivo com precisão de quadro no objeto LiveVideo. A API responderá com uma nova URL segura para o streaming. Você pode ignorar a URL enviada depois da criação do objeto LiveVideo.

A transmissão ficará visível ao público depois que (2) o status for definido como AO VIVO (via chamada da Graph API ou publicação do Live Producer) e (2) o codificador enviar a mensagem RTMP de transmissão ao vivo.

Estrutura da mensagem RTMP de transmissão ao vivo

É um pacote AMF0 (tipo 0x12) com os seguintes elementos:

  • A cadeia de caracteres onGoLive.
  • Uma matriz ECMA (tipo 0x08) com somente um par chave-valor.
    • Chave: cadeia de caracteres (tipo 0x02) timestamp
    • Valor: número (tipo 0x00). O registro de data e hora do primeiro frame de vídeo que ficará visível.

Para saber mais, consulte as especificações para RTMP e AMF0.

Exemplo de solicitação

Veja como solicitar a ativação da transmissão ao vivo com precisão de quadro em um LiveVideo.

curl -i -X GET \ "https://graph.facebook.com/v19.0/LIVE_VIDEO_ID?fields=secure_stream_url.inband_go_live(require_inband_signal)&access_token=12345..."

Exemplo de resposta

A URL de stream segura de um objeto LiveVideo com a transmissão ao vivo com precisão de quadro ativada.

{ "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...", "id": "LIVE_VIDEO_ID" }

Diálogo Transmitir ao vivo

A partir de 25 de maio de 2021, o diálogo Transmitir ao vivo será descontinuado. Consulte nossa publicação de blog para saber mais.

Criamos um plugin para facilitar ao máximo o processo de integração da Live API. Isso permite fazer a autenticação com o Facebook, a prévia de stream ao vivo e a descrição desse stream por meio de uma janela pop-up antes de iniciar a transmissão. Esse diálogo é mais adequado para quem faz streaming no lado do cliente. As integrações de back-end devem continuar usando a API diretamente.

Requisitos

Para inicializar uma janela pop-up com controles que determinem onde direcionar a resposta POST, insira o código a seguir.

<button id="liveButton">Create Live Stream To Facebook</button>
<script>
document.getElementById('liveButton').onclick = function() {
  FB.ui({
    display: 'popup',
    method: 'live_broadcast',
    phase: 'create',
}, function(response) {
    if (!response.id) {
      alert('dialog canceled');
      return;
    }
    alert('{your-stream-url}:' + response.secure_stream_url);
    FB.ui({
      display: 'popup',
      method: 'live_broadcast',
      phase: 'publish',
      broadcast_data: response,
    }, function(response) {
    alert("video status: \n" + response.status);
    });
  });
};
</script>
Parâmetros Valor Descrição

display

popup, iframe

Como o diálogo abre na sua página da web.

phase

create, publish

O diálogo na fase “create” permite que você obtenha uma URL de stream para carregar o vídeo. Já o diálogo na fase “publish” apresentará a visualização e o botão Iniciar transmisão ao vivo. required

broadcast_data

O object de resposta retornado da API ou da fase create.

Esse parâmetro é required para a fase publish.

Na janela pop-up da fase Create, escolha o destino do stream ao vivo, que pode ser em quaisquer páginas ou grupos gerenciados por você. A resposta POST incluirá os campos stream_url e secure_stream_url. Qualquer um deles pode ser desmembrado em uma URL de servidor e uma chave de stream.

A URL do servidor será a primeira parte de stream_url: rtmp://rtmp-api.facebook.com:80/rtmp/

A chave de stream será a segunda parte de stream_url: 10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

Campo de respostaFaseDescrição

id

create, publish

O ID do vídeo transmitido.

stream_url

create

Uma URL RTMPS que contém o servidor e a chave do stream usados para carregar o stream ao vivo.

secure_stream_url

create

Uma URL RTMPS, a URL de stream com protocolo seguro.

status

publish

Valor da cadeia de caracteres que indica o status da transmissão.

No nosso trecho de código, temos uma chamada alert com a stream_url. O cliente deve iniciar o streaming usando stream_url. Assim que o stream começar, você verá uma prévia da transmissão na janela pop-up da fase publish. O diálogo permite que os usuários escolham configurações de privacidade sem ajustar o parâmetro de privacidade da solicitação e definam a descrição, o título e as tags de tópico do vídeo ao vivo.

Nota: Se a janela pop-up publish estiver Offline, certifique-se de que o firewall não esteja bloqueando o RTMP e que todos os softwares bloqueadores de anúncios no navegador estejam desativados.

Ao clicar em Transmitir ao vivo, o diálogo será fechado e em alguns segundos o stream ao vivo será reproduzido na página ou no grupo, de acordo com o destino escolhido.

Os metadados são injetados no primeiro quadro de um vídeo ao vivo com horas de início de quadro precisas. Os codificadores agora podem implementar uma contagem regressiva para alertar os publishers sobre o início exato do vídeo. Também é possível iniciar e interromper o vídeo pela interface do Facebook.