Para transmitir un video en vivo, debes crear primero un objeto LiveVideo
. El objeto LiveVideo
representa la transmisión, y puedes manipular las propiedades del objeto a fin de controlar la configuración de la transmisión. Una vez creado, la API devolverá el identificador del objeto LiveVideo
y una URL del stream, que puedes pasar a tu codificador y utilizar para hacer stream de datos al objeto LiveVideo
.
El 10 de junio de 2024, Meta lanzará nuevos requisitos que se deben cumplir para activar una cuenta en Facebook. Los nuevos requisitos son los siguientes:
Para transmitir en un objeto User
, obtén un token de acceso de usuario con el permiso publish_video
y envía una solicitud a:
POST /<USER_ID>/live_videos?status=LIVE_NOW
Consulta la referencia del perímetro /live_videos
para ver los parámetros de cadena de consulta adicionales que puedes incluir para describir la transmisión, como un título y una descripción.
Al probar una llamada a la API, puedes incluir el parámetro access_token
configurado en tu token de acceso. Sin embargo, para hacer llamadas seguras desde tu app, usa la clase de token de acceso.
Si la operación se realiza correctamente, la API creará un objeto LiveVideo
en el usuario y devolverá una secure_stream_url
y el id
del objeto LiveVideo
. La transmisión aparecerá en una publicación en el perfil del usuario apenas envíes datos a la URL segura del stream. Puedes consultar el objeto LiveVideo
a fin de supervisar el estado de la transmisión y finalizarla.
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..." }
Para transmitir un video en vivo en una Page
, obtén un token de acceso a la página del administrador de la página con los permisos pages_read_engagement
y pages_manage_posts
; luego, envía una solicitud a:
POST /<PAGE_ID>/live_videos?status=LIVE_NOW
Consulta la referencia del perímetro /live_videos
para ver los parámetros de cadena de consulta adicionales que puedes incluir para describir la transmisión, como un título y una descripción.
Al probar una llamada a la API, puedes incluir el parámetro access_token
configurado en tu token de acceso. Sin embargo, para hacer llamadas seguras desde tu app, usa la clase de token de acceso.
Si la operación se realiza correctamente, la API creará un objeto LiveVideo
en la página y devolverá una secure_stream_url
y el id
del objeto LiveVideo
. La transmisión aparecerá en una publicación en la página apenas envíes datos a la URL segura del stream. Puedes consultar el objeto LiveVideo
a fin de supervisar el estado de la transmisión y finalizarla.
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..." }
Puedes leer un objeto LiveVideo
a fin de obtener las URL de la vista previa del stream de transmisión y los datos sobre el estado del stream, como la velocidad de los bits y la velocidad de los fotogramas. Los datos del estado del stream se actualizan cada dos segundos, de modo que no realices más de una consulta cada dos segundos. Se detectará e informará un tiempo de espera del stream después de cuatro segundos en que no se reciban datos.
Para leer un objeto LiveVideo
, obtén un token de acceso de usuario o página adecuado con el permiso publish_video
, y, luego, envía una consulta a:
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
Utiliza el parámetro {fields}
para especificar los campos del objeto LiveVideo que quieres que se devuelvan. Por ejemplo, esta es una solicitud para obtener ingest_streams
del objeto LiveVideo
, que incluye datos sobre el estado del 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>" }
Propiedades de la respuesta
Nombre del campo | Descripción |
---|---|
audio_bitrate | Bits por segundo del stream de audio entrante. |
is_master |
|
secure_stream_url | La URL RTMPS de ingesta segura del identificador del video en vivo que se consulta. |
stream_url | La URL RTMP de ingesta del identificador del video en vivo que se consulta. |
video_bitrate | Bits por segundo del stream de video entrante. |
video_framerate | Fotogramas por segundo del stream de video entrante. |
video_gop_size | Tamaño GOP (grupo de imágenes) en milisegundos. |
video_height | Altura en píxeles del fotograma del video entrante. |
video_width | Ancho en píxeles del fotograma del video entrante. |
Para finalizar una transmisión, detén el streaming de datos de video en vivo del codificador a la URL del stream o envía una solicitud a:
POST /<LIVE_VIDEO_ID>?end_live_video=true
Esto configura el estado del objeto LiveVideo
en VOD
y lo guarda como un video a petición (VOD) para que se pueda ver más tarde.
Si la operación se realiza correctamente, devolverá el identificador del objeto LiveVideo
.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Puedes realizar una operación GET
en el identificador del video en vivo a fin de confirmar que su estado se configuró en VOD
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Para eliminar una transmisión que terminó y se guardó como un VOD, envía una solicitud a:
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
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.
Un paquete AMF0 (tipo 0x12) que contenga lo siguiente:
onGoLive
timestamp
Para obtener más información, consulta las especificaciones de RTMP y AMF0.
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/v21.0
/LIVE_VIDEO_ID?fields=secure_stream_url.inband_go_live(require_inband_signal)&access_token=12345..."
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" }
Para obtener datos de un código de error asociados con una transmisión, envía una solicitud a:
GET /<LIVE_VIDEO_ID>?fields=errors
La API responderá con error code
, type
, message
y 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}" }
Subcódigo de error | Resumen de errores | Descripción |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | Infracción de derechos de autor en el video en vivo | Tu video en vivo se detuvo porque es posible que incluya contenido de audio o video que pertenece a otra página. |
VIDEO__CREATE_FAILED | Problema con la subida | Se produjo un problema y tu video no se subió. Vuelve a intentarlo. |
LIVE_VIDEO__DELETE_FAILED | El video en vivo no se eliminó | Se produjo un problema y no pudimos eliminar tu video en vivo. Vuelve a intentarlo. |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | No se puede editar con la API de video en vivo mientras se transmite en vivo | No se puede editar un video en vivo utilizando la API de edición de video. Usa el identificador del video en vivo. |
LIVE_VIDEO__LIVE_STREAM_ERROR | Error genérico de stream | Se produjo un error durante el stream |
LIVE_VIDEO__NOT_EXIST | El video en vivo no existe | El video en vivo al que intentas acceder ya no existe en el sistema. |
LIVE_VIDEO__PRIVACY_REQUIRED | Se requiere configuración de privacidad | Debes configurar parámetros de privacidad antes de transmitir en vivo. |
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 |