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.
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.
curl -i -X POST \ "https://graph.facebook.com/362629830945302/live_videos ?enable_backup_ingest=true &access_token=EAAI4b..."
{ "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" ] }
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.
curl -i -X POST \ "https://graph.facebook.com/10215840463339953/input_streams &access_token=EAAI4b..."
{ "id": "10215840463339953" }
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.
curl -i -X POST \ "https://graph.facebook.com/10215840463339953 ?master_ingest_stream_id=1 &access_token=EAAI4b..."
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" }
curl -i -X GET \ "https://graph.facebook.com/10215840463339953 ?fields=ingest_streams &access_token=EAAI4b..."
{ "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" }