Programmation de diffusions

La programmation des vidéos en direct a été abandonnée dans la version 12.0 et sera abandonnée dans toutes les versions le 14 décembre 2021. Tous les appels envoyés au point de terminaison POST /ID/live-video et contenant le paramètre planned_start_time renverront une erreur.

Vous pouvez utiliser l’API Live Video pour créer des diffusions vidéo en direct qui seront diffusées en direct à une heure prédéterminée, jusqu’à sept jours après leur date de création.

Planification d'une diffusion

Pour créer une diffusion vidéo en direct avec une date de début à venir sur un utilisateur, une page, un groupe ou un événement, envoyez une demande à :

POST /{node-id}/live_videos?status=SCHEDULED_UNPUBLISHED&planned_start_time={start-time}

Utilisez le paramètre planned_start_time et un horodatage UNIX pour indiquer l’heure de début souhaitée.

Cela crée un objet LiveVideo sur le nœud ciblé et retourne l’secure_stream_url et l’id de la vidéo en direct. Utilisez l’URL de streaming sécurisée avec votre encodeur pour streamer des données vidéo en direct vers l’objet LiveVideo au plus tard à l’heure de début prévue. La diffusion apparaîtra sur le journal ou le flux du nœud à l’heure de début prévue tant que celui-ci reçoit des données de streaming.

Les diffusions programmées peuvent recevoir des données de streaming à tout moment avant leur date de démarrage à des fins d’aperçu.

Exemple de requête

curl -i -X POST \ 
  "https://graph.facebook.com/{page-id}/live_videos?status=SCHEDULED_UNPUBLISHED&planned_start_time=1541539800&access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{page-id}/live_videos",
  new JSONObject("{\"status\":\"SCHEDULED_UNPUBLISHED\",\"planned_start_time\":\"1541539800\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{page-id}/live_videos"
           parameters:@{ @"status": @"SCHEDULED_UNPUBLISHED",@"planned_start_time": @"1541539800",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{page-id}/live_videos',
  'POST',
  {"status":"SCHEDULED_UNPUBLISHED","planned_start_time":"1541539800"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{page-id}/live_videos',
    array (
      'status' => 'SCHEDULED_UNPUBLISHED',
      'planned_start_time' => '1541539800'
    ),
    '{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

{
  "id": "10214937378883406",  //LiveVideo object ID
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url": "rtmps://rtmp-api.facebook..."  //Stream URL
}

Pour obtenir la liste des diffusions programmées, consultez Obtention de diffusions programmées.

Aperçu d’une diffusion

Vous pouvez utiliser l’API Live Video pour prévisualiser une diffusion vidéo en direct non publiée ; un objet LiveVideo créé avec status défini sur SCHEDULED_UNPUBLISHED ou UNPUBLISHED.

Pour prévisualiser une diffusion vidéo en direct non publiée, envoyez une demande à :

GET /{live_video_id}?fields={fields}

Utilisez le paramètre {fields} pour obtenir le dash_preview_url de l’objet LiveVideo.

Exemple de requête

curl -i -X GET \
 "https://graph.facebook.com/{live-video-id}
    ?fields=dash_preview_url
     &access_token={access-token}"
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", "dash_preview_url");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{live-video-id}"
           parameters:@{ @"fields": @"dash_preview_url",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}',
  'GET',
  {"fields":"dash_preview_url"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/{live-video-id}',
    '{fields:dash_preview_url}',    
    '{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

{
  'dash_preview_url': 'https://video.xx.fbcdn.net/...',
  'id': '{live-video-id}'
}

Cela retourne le dash_preview_url et l’id de la vidéo en direct. Copiez et collez l’URL dans un lecteur de type Dash Player pour prévisualiser la diffusion.

Bien que l’aperçu de votre diffusion avec un lecteur test tiers soit un bon moyen de vérifier le contenu de votre diffusion, nous vous recommandons de la diffuser sur une page de test. Pour pouvoir diffuser la page, vous devez être admin de page. De plus, vous pouvez configurer le paramètre de confidentialité pour créer des streamings visibles uniquement pour vous.

Obtention de diffusions programmées

Pour obtenir une liste de diffusions programmées pour un utilisateur, une page, un groupe ou un événement, obtenez un token d’accès approprié avec l’autorisation publish_video et envoyez une demande à :

GET /{node-id}/live_videos?broadcast_status=["SCHEDULED_UNPUBLISHED"]

Veuillez noter que la valeur de broadcast_status doit être un tableau. Pour obtenir la liste complète des valeurs supplémentaires, consultez le guide de référence de LiveVideo.

Exemple de liste de diffusion pour une page

curl -i -X GET \ 
  "https://graph.facebook.com/{page-id}/live_videos?broadcast_status=["SCHEDULED_UNPUBLISHED"]&access_token={access-token}"
GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/{page-id}/live_videos",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("broadcast_status", "["SCHEDULED_UNPUBLISHED"]");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{your-page-id}/live_videos"
           parameters:@{ @"broadcast_status": @"["SCHEDULED_UNPUBLISHED"]",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{page-id}/live_videos',
  'GET',
  {"broadcast_status":"[\"SCHEDULED_UNPUBLISHED\"]"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/{your-page-id}/live_videos',
    '{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

{
  "data": [
    {
      "status": "SCHEDULED_UNPUBLISHED",
      "stream_url": "rtmp://rtmp-api-dev.facebook.com:80/rtmp/...",
      "secure_stream_url": "rtmps://rtmp-api-dev.facebook.com:443/rtmp/...",
      "embed_html": "<iframe src=\"https://www.facebook.com/plugins/video.php?...",
      "id": "10214937378883406 "  //LiveVideo object ID
    }
  ]
}

Reprogrammation d’une diffusion

Vous pouvez modifier l’heure de début d’une diffusion programmée en envoyant une demande à :

POST /{live-video-id}?planned_start_time={new-start-time}

La valeur {new-start-time} doit être un horodatage UNIX indiquant la nouvelle heure de démarrage. En cas de réussite, l’API répond avec l’ID de l’objet LiveVideo.

Exemple de vidéo en direct pour une page

curl -i -X POST \
  "https://graph.facebook.com/{live-video-id}?planned_start_time=1541540800&access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{live-video-id}",   
  new JSONObject("{\"planned_start_time\":\"1541540800\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{live-video-id}"    
           parameters:@{ @"planned_start_time": @"1541540800",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}', 
  'POST',
  {"planned_start_time":"1541540800"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{live-video-id}', 
    array (
      'planned_start_time' => '1541540800'
    ),
    '{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

{
  "id": "10214937378883406"
}

Démarrage immédiat d’une diffusion

Vous pouvez démarrer une diffusion immédiatement en envoyant une demande à :

POST /{live-video-id}?status=LIVE_NOW

La diffusion sera lancée en direct si l’URL du streaming associée à l’objet LiveVideo, qui représente la diffusion, reçoit des données de streaming. En cas de réussite, l’API répond avec l’ID de l’objet LiveVideo.

Exemple de requête

curl -i -X POST \
 "https://graph.facebook.com/{live-video-id}?status=LIVE_NOW&access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{live-video-id}",
  new JSONObject("{\"status\":\"LIVE_NOW\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{live-video-id}"
           parameters:@{ @"status": @"LIVE_NOW",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}',
  'POST',
  {"status":"LIVE_NOW"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{live-video-id}',
    array (
      'status' => 'LIVE_NOW'
    ),
    '{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 JSON

{
  "id": "10214937378883406"
}