Usos avanzados

Segmentación del público

Incluye y excluye públicos específicos de la visualización del vídeo en directo.

Crear una audiencia objetivo

Nodo

Antes de empezar

Para los vídeos en directo de una página, necesitarás lo siguiente:

Para los vídeos en directo de un grupo, necesitarás lo siguiente:

  • un identificador de acceso de usuario solicitado por un administrador del grupo;

Ejemplos

Envía una solicitud POST /id, donde id es el identificador de LiveVideo, y define el campo targeting y sus parámetros.

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();

Ejemplo de respuesta

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

Obtener información de la audiencia objetivo

Nodo

Antes de empezar

Para los vídeos en directo de una página, necesitarás lo siguiente:

Para los vídeos en directo de un grupo, necesitarás lo siguiente:

  • Un identificador de acceso de usuario solicitado por un administrador del grupo.

Ejemplos

Envía una solicitud GET /id, donde id es el identificador de LiveVideo, con el 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"

Ejemplo de respuesta

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

Transmisión en directo con precisión de fotograma

Puede que se produzca un pequeño retraso antes de que se inicie la transmisión en directo mientras se descodifican los datos de transmisión iniciales y se procesan las solicitudes de la API asociadas. Por este motivo, es posible que para los presentadores resulte complicado saber el momento exacto en el que empieza una transmisión. Para evitar que esto ocurra, los objetos LiveVideo se pueden configurar para que acepten los datos de transmisión, pero que no transmitan nada para la audiencia hasta que se detecte en dichos datos un mensaje RTMP de transmisión en directo. De esta forma, cualquier persona que obtenga la vista previa de una transmisión podrá verla, al mismo tiempo que el codificador de la transmisión controla de forma precisa tanto el momento en el que empieza la transmisión en directo para la audiencia como el primer fotograma que se ve.

Para activar la transmisión en directo con precisión a nivel de fotograma, primero crea un objeto LiveVideo tal y como lo harías habitualmente y define su estado como VISTA PREVIA. Una vez lo hayas creado, consulta el objeto LiveVideo y solicita el campo secure_stream_url con los siguientes campos anidados:

secure_stream_url.inband_go_live(require_inband_signal)

Así, se activará la transmisión en directo con precisión a nivel de fotograma en el objeto LiveVideo, y la API responderá con una nueva URL de transmisión segura en la que podrás realizar la transmisión. Por lo tanto, podrás descartar la URL inicial de transmisión segura que habías recibido al crear el objeto LiveVideo por primera vez.

La transmisión en directo se iniciará y estará visible para la audiencia tras (1) definir el estado como EN DIRECTO (mediante una llamada a la API Graph o una publicación de usuario desde Live Producer) y (2) el envío del mensaje RTMP de transmisión en directo por parte del codificador.

Estructura del mensaje RTMP de transmisión en directo

Un paquete AMF0 (tipo 0x12) con los siguientes elementos:

  • La cadena onGoLive
  • Una matriz ECMA (tipo 0x08) con un único par clave-valor:
    • Clave: cadena (tipo 0x02) timestamp;
    • Valor: número (tipo 0x00); marca de tiempo del primer fotograma de vídeo que será visible públicamente.

Para obtener más información, consulta las especificaciones de RTMP y AMF0.

Ejemplo de solicitud

Ejemplo de solicitud para activar la transmisión en directo con precisión a nivel de fotograma en un objeto 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..."

Ejemplo de respuesta

URL de transmisión segura de un objeto LiveVideo con la transmisión en directo con precisión de fotograma activada.

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

Cuadro de diálogo "Transmitir"

A partir del 25 de mayo de 2021, se retirará el cuadro de diálogo "Transmitir". Para obtener más información, consulta nuestra publicación en el blog.

Hemos creado un plugin que simplifica lo máximo posible el proceso de integración con Live API y permite la autenticación con Facebook, obtener la vista previa de la transmisión en directo y describirla mediante una ventana emergente antes de empezar. Este cuadro de diálogo está optimizado para las transmisiones que se realizan desde el lado del cliente. Las integraciones de back-end deben seguir usando la API directamente.

Requisitos

Para inicializar una ventana emergente con controles que determinen a dónde dirigir tu respuesta POST, inserta el código siguiente.

<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 Descripción

display

popup, iframe

Modo en el que se abre el cuadro de diálogo en tu página web.

phase

create, publish

El cuadro de diálogo de la fase "create" permite obtener "stream_url" para subir el vídeo. El cuadro de diálogo de la fase "publish" ofrecerá una vista previa y el botón "Transmitir". required

broadcast_data

Elemento object de respuesta devuelto desde la API o la fase create.

Este parámetro es required para la fase publish.

En la ventana emergente de la fase create, elige el destino de la transmisión en directo, que puede ser cualquier página o grupo que administres. La respuesta POST incluirá los campos stream_url y secure_stream_url. Cualquiera de ellos se puede dividir en una URL de servidor y una clave de transmisión.

La URL del servidor es la primera mitad de "stream_url": rtmp://rtmp-api.facebook.com:80/rtmp/.

La clave de transmisión es la segunda mitad de "stream_url": 10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk.

Campo de respuestaFaseDescripción

id

create, publish

Identificador del vídeo transmitido.

stream_url

create

URL RTMP que contiene un servidor y una clave de transmisión que se utilizan para subir la transmisión en directo.

secure_stream_url

create

URL RTMPS (la URL de transmisión con protocolo seguro).

status

publish

Valor de cadena que indica el estado de la transmisión.

En nuestro fragmento de código, tenemos una llamada alert con el objeto stream_url. El cliente debería comenzar la transmisión mediante stream_url. Poco después de que comience la transmisión, observarás que aparece la vista previa correspondiente en la ventana emergente de la fase publish. El cuadro de diálogo permite a los usuarios elegir la configuración de privacidad sin ajustar el parámetro de privacidad de la solicitud, así como establecer las etiquetas de descripción, título y tema del vídeo en directo.

Nota: Si la ventana emergente de la fase publish está sin conexión, comprueba que tu firewall no esté bloqueando el RTMP y que tienes desactivado cualquier software de bloqueo de anuncios que esté instalado en tu navegador.

Al hacer clic en Transmitir, el cuadro de diálogo se cerrará y, en cuestión de segundos, la transmisión en directo se reproducirá en la página o el grupo, según el destino elegido.

Los metadatos se insertan en el primer fotograma de un vídeo en directo con horas de inicio con precisión de fotograma. Esto permite a los codificadores implementar una cuenta atrás para indicar a los editores el momento exacto del inicio del vídeo. Asimismo, también puedes iniciar y detener el vídeo desde la interfaz de Facebook.