Usos avanzados

Segmentación del público

Incluye y excluye públicos específicos para que puedan ver o no tu video en vivo.

Crea un público objetivo

Nodo

Antes de empezar

Para transmitir videos en vivo en una página, necesitarás lo siguiente:

Para transmitir videos en vivo en un grupo, necesitarás lo siguiente:

Ejemplos

Envía una solicitud POST /id, donde id es el identificador del video en vivo, y configura 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"   
}

Obtén información del público objetivo

Nodo

Antes de empezar

Para transmitir videos en vivo en una página, necesitarás lo siguiente:

Para transmitir videos en vivo en un grupo, necesitarás lo siguiente:

  • Un token de acceso del usuario solicitado por un administrador del grupo

Ejemplos

Envía una solicitud GET /id, donde id es el identificador del video en vivo, 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 vivo con precisión de fotograma

Existe la posibilidad de que haya una leve demora antes de realizar la transmisión en vivo mientras se decodifican los datos iniciales del stream y se procesan las solicitudes de la API vinculadas. Esta situación puede dificultar que las personas al aire sepan exactamente cuándo comenzó la transmisión. Para evitar este problema, los objetos del video en vivo pueden configurarse para que acepten datos del stream, pero que no se transmitan en vivo al público hasta detectarse un mensaje RTMP de comenzar la transmisión dentro de los propios datos del stream. Esta opción permite que todas las personas que pueden obtener una vista previa de la transmisión la vean. A su vez, permite que el codificador del stream controle con precisión tanto el momento en que comienza la transmisión en vivo al público, como el primer cuadro que alcanza a ver dicho público.

Para habilitar la transmisión en vivo con precisión de fotograma, primero crea un objeto de video en vivo de forma normal y configura su estado como "PREVIEW". Una vez que lo hayas creado, consulta el objeto de video en vivo y solicita el campo "secure_stream_url" con los siguientes campos anidados:

secure_stream_url.inband_go_live(require_inband_signal)

De esta manera, se habilitará la transmisión en vivo con precisión de fotograma en el objeto de video en vivo. A su vez, la API responderá con una nueva URL de stream seguro donde podrás realizar la transmisión. Puedes omitir la URL de stream seguro inicial que recibiste cuando creaste por primera vez el objeto de video en vivo.

La transmisión comenzará en vivo y estará visible al público una vez que (1) el estado de la transmisión se configure en "LIVE" (mediante una llamada a la API Graph o una publicación de usuario desde Live Producer) y (2) el codificador envíe el mensaje RTMP para comenzar la transmisión.

Estructura del mensaje RTMP para comenzar la transmisión

Un paquete AMF0 (tipo 0x12) que contenga lo siguiente:

  • La cadena onGoLive
  • Una matriz ECMA (tipo 0x08) que contenga un solo par clave-valor:
    • Clave: cadena (tipo 0x02) timestamp
    • Valor: número (tipo 0x00): la marca de tiempo del primer fotograma de video que estará visible públicamente

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

Ejemplo de solicitud

Un ejemplo de solicitud para habilitar una transmisión en vivo con precisión de fotograma en un video en vivo.

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 stream seguro para un objeto de video en vivo con la función de transmisión en vivo con precisión de fotograma habilitada.

{
  "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 de transmisión en vivo

A partir del 25 de mayo de 2021, el cuadro de diálogo de transmisión en vivo quedará obsoleto. Visita nuestra publicación de blog para obtener más información.

Creamos un plugin para hacer que la integración de la API de video en vivo resulte lo más sencilla posible de modo tal que te permita autenticarte con Facebook, obtener una vista previa del stream en vivo y describir el stream en vivo a través de una ventana emergente antes de transmitir en vivo. Este cuadro de diálogo es la opción ideal cuando se transmite en vivo desde el lado del cliente. Las integraciones del sistema interno deben seguir usando la API directamente.

Requisitos

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

<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

Cómo se abre el cuadro de diálogo en tu página web

phase

create, publish

En la etapa de creación, el cuadro de diálogo te permite obtener la URL del stream para subir el video. En la etapa de publicación, muestra una vista previa y el botón "Transmitir". required

broadcast_data

El object de respuesta devuelto de la API o la etapa create.

Este parámetro es required en la etapa publish.

En la ventana emergente de la etapa Crear, elige el destino del stream en vivo, el cual puede ser cualquier página o grupo que administres. La respuesta POST incluirá los campos stream_url y secure_stream_url. Cualquiera de estos se puede desglosar en una URL de servidor y una clave de stream.

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 la respuestaEtapaDescripción

id

create, publish

Identificador del video de la transmisión

stream_url

create

Una URL de RTMP que contiene el servidor de stream y la clave de stream que se utilizaron para subir el stream en vivo.

secure_stream_url

create

URL de RTMPS, URL de la transmisión con protocolo seguro

status

publish

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

En nuestro fragmento de código, incluimos una llamada alert con stream_url. Tu cliente debería comenzar el streaming utilizando stream_url. Poco después de iniciada la transmisión, verás que aparece una vista previa de la transmisión en la ventana emergente de la etapa de publicación. El cuadro de diálogo les permite a los usuarios elegir la configuración de privacidad sin ajustar el parámetro de privacidad de la solicitud y configurar la descripción, el título y las etiquetas de tema del video en vivo.

Nota: Si la ventana emergente de publicar está Sin conexión, asegúrate de que tu firewall no esté bloqueando la conexión RTMP y que esté desactivado cualquier software bloqueador de anuncios.

Cuando hagas clic en Transmitir, el cuadro de diálogo se cerrará y en pocos segundos, el stream en vivo se reproducirá en la página o el grupo, en función del destino elegido.

Los metadatos se insertan en el primer fotograma de un video en vivo con horas de inicio con precisión de fotograma. Los codificadores pueden implementar una cuenta regresiva para alertar a los editores sobre el inicio exacto del video. También puedes empezar y detener el video desde la interfaz de Facebook.