Utilisations avancées

Ciblage d’audience

Incluez et excluez des audiences spécifiques du visionnage de votre vidéo en direct.

Créer une audience cible

Nœud

Avant de commencer

Pour les vidéos en direct sur une Page, vous aurez besoin des éléments suivants :

Pour les vidéos en direct sur un Groupe, vous aurez besoin des éléments suivants :

Exemples

Envoyez une demande POST /id dans laquelle id est l’ID de la vidéo en direct, et définissez le champ targeting ainsi que ses paramètres.

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

Exemple de réponse

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

Obtenir des informations sur l’audience cible

Nœud

Avant de commencer

Pour les vidéos en direct sur une Page, vous aurez besoin des éléments suivants :

Pour les vidéos en direct sur un Groupe, vous aurez besoin des éléments suivants :

  • Un token d’accès Utilisateur demandé par un administrateur du Groupe

Exemples

Envoyez une demande GET /id dans laquelle id est l’ID de la vidéo en direct avec le champ 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"

Exemple de réponse

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

Frame-Accurate Go-Live (Diffusion en direct avec précision d’image)

Il peut se produire un léger décalage avant qu’une diffusion soit lancée en direct, le temps que nous décodions ses données de streaming initiales et traitions les requêtes d’API éventuellement associées. Il peut alors être difficile pour les artistes connectés de savoir exactement à quel moment a débuté une diffusion. Pour éviter ce problème, il est possible de définir les objets LiveVideo de manière qu’ils acceptent les données en streaming, mais lancent la diffusion en direct uniquement une fois qu’un message RTMP de lancement en direct a été détecté dans les données de streaming mêmes. Cette méthode permet à toutes les personnes autorisées à prévisualiser une diffusion de la voir, tout en permettant à l’encodeur de contrôler avec précision l’heure du lancement en direct de la diffusion et la première image diffusée.

Pour activer cette diffusion en direct avec précision d’image, commencez par créer un objet LiveVideo comme vous le feriez habituellement, puis définissez son statut sur PREVIEW. Une fois l’objet créé, interrogez-le en demandant le champ secure_stream_url avec les champs imbriqués suivants :

secure_stream_url.inband_go_live(require_inband_signal)

La diffusion en direct avec précision d’image sera alors activée sur l’objet LiveVideo, et l’API retournera une nouvelle URL de diffusion sécurisée vers laquelle effectuer la diffusion. Vous pouvez ignorer l’URL de diffusion sécurisée initiale que vous avez reçue lorsque vous avez créé l’objet LiveVideo pour la première fois.

La diffusion sera lancée en direct et visionnable par l’audience après (1) que le statut de diffusion aura été défini sur LIVE (par le biais d’un appel à l’API Graph ou d’une publication utilisateur depuis Live Producer) et (2) que l’encodeur aura envoyé le message RTMP de lancement en direct.

Structure du message RTMP de lancement en direct

Un paquet AMF0 (type 0x12) contenant :

  • la chaîne onGoLive
  • une grille ECMA (type 0x08) contenant une seule paire clé-valeur :
    • Clé : chaîne (type 0x02) timestamp
    • Valeur : nombre (type 0x00) : horodatage de la première image vidéo visible par les internautes

Pour plus d’informations, consultez les spécifications concernant RTMP et AMF0.

Exemple de requête

Exemple de requête permettant d’activer la diffusion en direct avec précision d’image sur un objet 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..."

Exemple de réponse

URL de diffusion sécurisée pour un objet LiveVideo avec diffusion en direct avec précision d’image activée.

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

Boîte de dialogue Diffuser en direct

La boîte de dialogue Diffuser en direct ne sera plus disponible à compter du 25 mai 2021. Consultez notre publication de blog pour plus d’informations.

Nous avons créé un plugin pour faciliter le plus possible le processus d’intégration avec l’API Live en vous permettant de vous identifier avec Facebook, puis de visualiser et de décrire votre stream en direct dans une fenêtre pop-up avant de diffuser en direct. Cette boîte de dialogue est plus adaptée aux streamings du côté client. Les intégrations backend doivent continuer à utiliser l’API directement.

Conditions requises

Pour initialiser une fenêtre contextuelle permettant de choisir où envoyer votre demande POST, insérez le code suivant.

<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>
Paramètres Valeur Description

display

popup, iframe

Comment la boîte de dialogue s’ouvre dans votre page web.

phase

create, publish

La boîte de dialogue de la phase de création vous permet d’obtenir l’URL du streaming afin d’importer la vidéo. La boîte de dialogue de la phase de publication offre un aperçu et un bouton Diffuser en direct. required

broadcast_data

L’object de réponse est renvoyé par l’API ou la phase create.

Ce paramètre est required pour la phase publish.

Dans la fenêtre contextuelle de la phase Créer, choisissez la destination de la diffusion en direct qui peut se trouver sur n’importe quelle page ou groupe que vous gérez. La réponse POST comprendra les champs stream_url et secure_stream_url. Ils sont tous les deux constitués de l’URL du serveur et de la clé de streaming.

L’URL du serveur constitue la première partie de la stream_url : rtmp://rtmp-api.facebook.com:80/rtmp/

La clé de diffusion forme la dernière partie de la stream_url : 10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

Champ de réponsePhaseDescription

id

create, publish

Identifiant de la vidéo diffusée.

stream_url

create

URL RTMP contenant le serveur de streaming et la clé de streaming utilisée pour télécharger la diffusion en direct.

secure_stream_url

create

URL RTMPS de streaming avec un protocole sécurisé.

status

publish

Valeur chaîne indiquant le statut d’une diffusion.

Dans l’extrait de code, nous présentons un appel alert avec la stream_url. Votre client va commencer le streaming à l’aide de la stream_url. Lorsque le streaming commence, un aperçu de la diffusion s’affiche dans la fenêtre contextuelle de la phase de publication. La boîte de dialogue permet aux utilisateurs de choisir les paramètres de confidentialité sans régler le paramètre de confidentialité de la demande et permet de configurer les tags de description, de titre et de sujet de la vidéo en direct.

Remarque : si la fenêtre contextuelle de publication est hors ligne, assurez-vous que votre pare-feu ne bloque pas le protocole RTMP et que les logiciels de blocage de publicités de votre navigateur sont désactivés.

Lorsque vous cliquez sur Diffuser en direct, la boîte de dialogue se ferme, et en quelques secondes, le stream en direct commence sur la page ou le groupe, selon la destination choisie.

Des métadonnées sont injectées dans la première image des vidéos en direct pour indiquer l’image de point de départ précise. Les encodeurs peuvent implémenter un compte à rebours indiquant au diffuseur le début exact de la vidéo. Vous pouvez également démarrer et arrêter la vidéo depuis l’interface Facebook.