Transmisiones alternativas

Puedes realizar una transmisión alternativa y simultánea de los datos de vídeo en directo a una difusión de vídeo en directo. Si se produce un error en la transmisión principal, cambiaremos automáticamente a la alternativa para que la difusión de vídeo en directo continúe sin interrupciones. La difusión seguirá usando la transmisión alternativa a menos que vuelvas manualmente a la transmisión principal o que se reanude la transmisión principal y se produzca un error en la alternativa.

Para utilizar una transmisión alternativa con una difusión de vídeo en directo, debes activar la transmisión alternativa al crear el objeto LiveVideo de la difusión o activarla en el objeto LiveVideo antes de que reciba datos de transmisión.

Activar la transmisión alternativa al crear el objeto LiveVideo

Para activar la transmisión alternativa al crear el objeto LiveVideo de la difusión, incluye el parámetro de cadena de consulta enable_backup_ingest=true en la consulta.

Por ejemplo, para crear un objeto LiveVideo con la transmisión alternativa activada en un usuario:

POST /{user-id}/live_videos ?status=LIVE_NOW &enable_backup_ingest=true &access_token={access-token}

Esto devolverá dos URL (una para la transmisión principal y otra para la alternativa o secundaria):

{ "id": "{live-video-id}", "stream_url": "{stream-url}", "secure_stream_url": "{secure-stream-url}", "stream_secondary_urls": [ "{stream-secondary-urls}" ], "secure_stream_secondary_urls": [ "{secure-stream-secondary-urls}" ] }

Utiliza secure_stream_url para la transmisión de ingesta principal y secure_stream_secondary_urls para la alternativa. Puedes transmitir datos alternativos al objeto LiveVideo en cualquier momento durante la difusión.

Solicitud cURL de ejemplo

curl -i -X POST \ "https://graph.facebook.com/362629830945302/live_videos ?enable_backup_ingest=true &access_token=EAAI4b..."

Ejemplo de respuesta

{ "id": "10215840463339953", "stream_url": "rtmps://rtmp.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbxMhT-cq73GTdpuPLo", "secure_stream_url": "rtmps://rtmp.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbxMhT-cq73GTdpuPLo", "stream_secondary_urls": [ "rtmp://rtmps.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api&a=AbzhD2fKJw1Uw7JQjFc" ], "secure_stream_secondary_urls": [ "rtmps://rtmps.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api&a=AbzhD2fKJw1Uw7JQF80" ] }

Activar la transmisión alternativa en un objeto LiveVideo existente

Puedes activar la transmisión alternativa en un objeto LiveVideo existente que no haya recibido datos de transmisión de vídeo en directo mediante una solicitud POST al perímetro /input_streams del objeto LiveVideo. Por ejemplo:

POST /{live-video-id}/input_streams &access_token={access-token}

Esto devolverá el identificador del objeto LiveVideo:

{ "id": "{live-video-id}" }

Cuando esté activada, podrás [obtener las URL de transmisión principal y alternativa] del objeto LiveVideo.

Solicitud cURL de ejemplo

curl -i -X POST \ "https://graph.facebook.com/10215840463339953/input_streams &access_token=EAAI4b..."

Ejemplo de respuesta

{ "id": "10215840463339953" }

Cambiar de transmisión manualmente

Para cambiar manualmente entre la transmisión principal y alternativa de un objeto LiveVideo, envía una solicitud a:

POST /{live-video-id} ?master_ingest_stream_id={master-ingest-stream-id} &access_token={access-token}

El valor {master-ingest-stream-id} es un booleano; 0 representa la transmisión de ingesta principal y 1, la alternativa.

Solicitud cURL de ejemplo

curl -i -X POST \ "https://graph.facebook.com/10215840463339953 ?master_ingest_stream_id=1 &access_token=EAAI4b..."

Obtener las URL de la transmisión principal y la alternativa

Puedes leer el campo ingest_streams de un objeto LiveVideo para obtener las URL de la transmisión principal y la alternativa:

GET /{live-video-id} ?fields=ingest_streams &acess_token={access-token}

Esto devolverá el estado de la transmisión de ingesta y las URL de transmisión de la transmisión principal y las alternativas (si las hay) del objeto LiveVideo:

{ "ingest_streams": [ { "stream_id": "{stream-id}", "stream_url": "{stream-url}", "secure_stream_url": "{secure-stream-url}", "is_master": {is-master}, "stream_health": {stream-health}, "id": "{id}" }, { "stream_id": "{stream-id}", "stream_url": "{stream-url}", "secure_stream_url": "{secure-stream-url}", "is_master": {is-master}, "stream_health": {stream-health}, "id": "{id}" } ], "id": "10215840874550233" }

Solicitud cURL de ejemplo

curl -i -X GET \ "https://graph.facebook.com/10215840463339953 ?fields=ingest_streams &access_token=EAAI4b..."

Ejemplo de respuesta

{ "ingest_streams": [ { "stream_id": "0", "stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbyvsHKGRrur_sZOeuo", "secure_stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbyvsHKGRrur_sZOF08", "is_master": true, "stream_health": { "video_bitrate": 2304481.75, "video_framerate": 27.586206436157, "video_gop_size": 2000, "video_height": 700, "video_width": 1120, "audio_bitrate": 118149.8828125 }, "id": "10215840874630235" }, { "stream_id": "1", "stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api_dev&a=AbySai39Wr08FKpUYw0", "secure_stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api_dev&a=AbySai39Wr08FKpUv3M", "is_master": false, "stream_health": { "video_bitrate": 1866942.625, "video_framerate": 22.338048934937, "video_gop_size": 2000, "video_height": 700, "video_width": 1120, "audio_bitrate": 95675.3515625 }, "id": "10215840874670236" } ], "id": "10215840874550233" }