Pour diffuser une vidéo en direct, vous devez avant tout créer un objet LiveVideo
. L’objet LiveVideo
représente la diffusion, et vous pouvez manipuler ses propriétés pour contrôler les paramètres de la diffusion. Lors de la création, l’API renvoie l’ID de l’objet LiveVideo
et une URL de stream, que vous pouvez transmettre à votre encodeur et utiliser pour streamer les données vers l’objet LiveVideo
.
À partir du 10 juin 2024, les comptes Facebook devront remplir de nouvelles conditions de Meta avant d’être considérés comme actifs. Les nouvelles conditions requises sont les suivantes :
Pour diffuser sur un objet User
, récupérez un token d’accès d’utilisateur·ice disposant de l’autorisation publish_video
et envoyez une requête à :
POST /<USER_ID>/live_videos?status=LIVE_NOW
Reportez-vous à la référence de l’arête /live_videos
pour savoir quels paramètres supplémentaires, tel qu’un titre ou une description, vous pouvez inclure pour décrire la diffusion.
Lorsque vous testez un appel d’API, vous pouvez inclure le paramètre access_token
, défini sur votre token d’accès. En revanche, lorsque vous effectuez des appels sécurisés depuis votre application, utilisez la classe de token d’accès.
En cas de réussite, l’API crée un objet LiveVideo
sur l’utilisateur ou l’utilisatrice et renvoie une secure_stream_url
et l’id
de l’objet LiveVideo
. La diffusion apparaît dans une publication sur le profil de l’utilisateur ou de l’utilisatrice dès que vous envoyez des données à l’URL de stream sécurisé. Vous pouvez interroger l’objet LiveVideo
pour contrôler l’état de la diffusion et mettre fin à celle-ci.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<USER_ID>/live_videos
?status=LIVE_NOW
&title=Today%27s%20Live%20Video
&description=This%20is%20the%20live%20video%20for%20today."
{ "id": "1953020644813104", //<LIVE_VIDEO_ID> "stream_url": "rtmp://rtmp-api.facebook...", "secure_stream_url":"rtmps://rtmp-api.facebook..." }
Pour diffuser une vidéo en direct sur une Page
, récupérez le token d’accès de Page d’un admin de la Page disposant des autorisations pages_read_engagement
et pages_manage_posts
, puis envoyez une requête à :
POST /<PAGE_ID>/live_videos?status=LIVE_NOW
Reportez-vous à la référence de l’arête /live_videos
pour savoir quels paramètres supplémentaires, tel qu’un titre ou une description, vous pouvez inclure pour décrire la diffusion.
Lorsque vous testez un appel d’API, vous pouvez inclure le paramètre access_token
, défini sur votre token d’accès. En revanche, lorsque vous effectuez des appels sécurisés depuis votre application, utilisez la classe de token d’accès.
En cas de réussite, l’API crée un objet LiveVideo
sur la Page et renvoie une secure_stream_url
et l’id
de l’objet LiveVideo
. La diffusion apparaît dans une publication sur la Page dès que vous envoyez des données à l’URL de stream sécurisé. Vous pouvez interroger l’objet LiveVideo
pour contrôler l’état de la diffusion et mettre fin à celle-ci.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<PAGE_ID>/live_videos
?status=LIVE_NOW
&title=Today%27s%20Page%20Live%20Video
&description=This%20is%20the%20live%20video%20for%20the%20Page%20for%20today"
{ "id": "1953020644813108", //<LIVE_VIDEO_ID> "stream_url": "rtmp://rtmp-api.facebook...", "secure_stream_url":"rtmps://rtmp-api.facebook..." }
Vous pouvez lire un objet LiveVideo
pour obtenir les URL d’aperçu du stream de la diffusion, ainsi que des données sur l’intégrité du stream, comme le débit binaire et la fréquence d’image. Les données sur l’état d’intégrité du stream étant actualisées toutes les deux secondes, limitez les requêtes à cette fréquence d’exécution. Une expiration du délai d’attente de stream sera détectée et signalée, si aucune donnée n’est reçue pendant quatre secondes.
Pour lire un objet LiveVideo
, récupérez un token d’accès de Page ou d’utilisateur·ice approprié disposant de l’autorisation publish_video
, puis envoyez une requête à :
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
Utilisez le paramètre {fields}
pour spécifier les champs d’objet LiveVideo que vous souhaitez obtenir. Par exemple, voici une requête pour obtenir le paramètre ingest_streams
de l’objet LiveVideo
, qui inclut des données sur l’intégrité du stream :
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?fields=ingest_streams"
{ "ingest_streams": [ { "stream_id": "0", "stream_url": "rtmp://rtmp-api.facebook...", "secure_stream_url": "rtmps://rtmp-api.facebook...", "is_master": true, "stream_health": { "video_bitrate": 4024116, "video_framerate": 60, "video_gop_size": 2000, "video_height": 720, "video_width": 1280, "audio_bitrate": 128745.4921875 }, "id": "1914910145231512" // <INGEST_STREAM_ID> } ], "id": "<LIVE_VIDEO_ID>" }
Propriétés de la réponse
Nom du champ | Description |
---|---|
audio_bitrate | Bits par seconde du stream audio entrant. |
is_master |
|
secure_stream_url | URL d’acquisition RTMPS sécurisée pour l’ID de LiveVideo interrogé. |
stream_url | URL d’acquisition RTMP pour l’ID de l’objet LiveVideo interrogé. |
video_bitrate | Bits par seconde du stream vidéo entrant. |
video_framerate | Images par seconde du stream vidéo entrant. |
video_gop_size | Taille du GOP (groupe d’images) en millisecondes. |
video_height | Hauteur en pixels de l’image vidéo entrante. |
video_width | Largeur en pixels de l’image vidéo entrante. |
Pour mettre fin à une diffusion, arrêtez de streamer des données vidéo en direct entre votre encodeur et l’URL de stream ou envoyez une requête à :
POST /<LIVE_VIDEO_ID>?end_live_video=true
Cette requête définit le statut de l’objet LiveVideo
sur VOD
et l’enregistre en tant que vidéo à la demande pour pouvoir l’afficher ultérieurement.
En cas de réussite, l’API renvoie l’ID de l’objet LiveVideo
.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Vous pouvez envoyer une requête GET
portant sur l’ID de l’objet LiveVideo pour confirmer que son statut a été défini sur VOD
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Pour supprimer une diffusion qui a pris fin et qui a été enregistrée en tant que VOD, envoyez une requête à :
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
Le décodage des premières données du stream et le traitement des requêtes d’API associées peuvent entraîner un léger décalage de lancement du direct. C’est pourquoi les talents qui sont en direct ont parfois du mal à savoir exactement quand une diffusion a commencé. Pour remédier à ce problème, les objets LiveVideo peuvent être configurés de manière à accepter les données streamées sans toutefois les diffuser aux audiences, tant qu’un message RTMP de lancement n’est pas détecté dans les données du stream lui-même. Ainsi, toutes les personnes en mesure de prévisualiser la diffusion peuvent la voir, et l’encodeur peut contrôler avec précision l’heure à laquelle la diffusion est lancée pour une audience et la première image que cette audience voit.
Pour activer le lancement précis du direct, commencez par créer un objet LiveVideo normal, puis définissez son statut sur PREVIEW. Une fois l’objet LiveVideo créé, interrogez-le de manière à obtenir le champ secure_stream_url avec les champs imbriqués suivants :
secure_stream_url.inband_go_live(require_inband_signal)
Ainsi, vous activez le lancement précis du direct sur l’objet LiveVideo, et l’API vous renvoie une nouvelle URL de stream sécurisé sur laquelle vous pouvez streamer votre vidéo. Vous pouvez ignorer la première URL de stream sécurisé que vous avez reçue lors de la création de l’objet LiveVideo.
La diffusion est lancée et visible pour l’audience lorsque (1) le statut de la diffusion est défini sur LIVE (via un appel à l’API Graph ou une publication d’utilisateur ou d’utilisatrice dans Live Producer) et (2) l’encodeur envoie le message RTMP de lancement du direct.
Un paquet AMF0 (type 0x12) contenant les éléments suivants :
onGoLive
timestamp
Pour plus d’informations, consultez les spécifications RTMP et AMF0.
Requête permettant d’activer le lancement précis du direct sur un objet LiveVideo.
curl -i -X GET \
"https://graph.facebook.com/v21.0
/LIVE_VIDEO_ID?fields=secure_stream_url.inband_go_live(require_inband_signal)&access_token=12345..."
URL de stream sécurisé pour un objet LiveVideo avec le lancement précis du direct activé.
{ "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...", "id": "LIVE_VIDEO_ID" }
Pour obtenir les données relatives aux codes d’erreur d’une diffusion, envoyez une requête à :
GET /<LIVE_VIDEO_ID>?fields=errors
L’API renvoie les éléments suivants : error code
, type
, message
et timestamp
.
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?fields=errors"
{ "errors": { "data": [ { "error_code": 1969004, "error_type": "stream", "error_message": "Video signal lost", "creation_time": "2018-12-05T23:58:52+0000" }, { "error_code": 1969004, "error_type": "stream", "error_message": "Video signal lost", "creation_time": "2018-12-05T23:58:52+0000" }, { "error_code": 0, "error_type": "info", "error_message": "Live Service received the video signal", "creation_time": "2018-12-05T23:58:02+0000" }, { "error_code": 0, "error_type": "info", "error_message": "Live Service received the video signal", "creation_time": "2018-12-05T23:58:02+0000" } ] }, "id": "{your-live-video-id}" }
Sous-code de l’erreur | Résumé de l’erreur | Description |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | Violation des droits d’auteur dans la vidéo en direct | Votre vidéo en direct a été suspendue, car il est possible qu’elle contienne du contenu audio ou vidéo qui appartient à une autre Page. |
VIDEO__CREATE_FAILED | Problème d’importation | Un problème s’est produit et nous n’avons pas pu importer votre vidéo. Veuillez réessayer. |
LIVE_VIDEO__DELETE_FAILED | Problème de suppression de la vidéo en direct | Un problème s’est produit et nous n’avons pas pu supprimer votre vidéo en direct. Veuillez réessayer. |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | Modification depuis l’API Video non autorisée pendant la diffusion en direct | Il n’est pas possible de modifier une vidéo en direct depuis l’API Video. Utilisez l’ID de la vidéo en direct. |
LIVE_VIDEO__LIVE_STREAM_ERROR | Problème de stream général | Une erreur s’est produite pendant le stream. |
LIVE_VIDEO__NOT_EXIST | La vidéo en direct n’existe pas | La vidéo en direct à laquelle vous tentez d’accéder n’existe plus dans le système. |
LIVE_VIDEO__PRIVACY_REQUIRED | Paramètres de confidentialité obligatoires | Vous devez définir les paramètres de confidentialité avant de lancer un direct. |
Code | Subcode | Message | Type | Mitigation messaging |
---|---|---|---|---|
200 | 1363120 | Permissions error | OAuthException | You’re not eligible to go live Your profile needs to be at least 60 days old before you can go live on Facebook. Learn more at https://www.facebook.com/business/help/167417030499767?id=1123223941353904 |
200 | 1363144 | Permissions error | OAuthException | You’re not eligible to go live You need at least 100 followers before you can go live from your profile. Learn more at https://www.facebook.com/business/help/167417030499767?id=1123223941353904 |