Во время трансляции в прямом эфире в нее можно одновременно передавать данные резервной трансляции. Если в основной трансляции возникнет сбой, мы автоматически переключимся на резервную трансляцию, чтобы прямой эфир продолжался без прерываний. После переключения резервная трансляция будет использоваться до тех пор, пока вы не вернетесь к основной трансляции вручную или в резервной трансляции не произойдет сбой, а основная трансляция снова будет доступна.
Чтобы можно было использовать резервные трансляции в прямом эфире, их необходимо включить при создании объекта LiveVideo или включить для существующего объекта LiveVideo до того, как к нему начнут поступать данные трансляции.
Чтобы включить резервные трансляции при создании объекта LiveVideo, включите в запрос параметр строки enable_backup_ingest=true
.
Пример: создание LiveVideo с включенной резервной трансляцией для пользователя:
POST /{user-id}/live_videos ?status=LIVE_NOW &enable_backup_ingest=true &access_token={access-token}
При этом будут возвращены два URL: один для основной трансляции, второй для резервной:
{ "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}" ] }
Используйте secure_stream_url
для основной трансляции, а secure_stream_secondary_urls
— для резервной. Отправлять данные резервной трансляции на объект LiveVideo можно в любой момент в ходе прямого эфира.
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" ] }
Включить резервную трансляцию для существующего объекта LiveVideo можно в любой момент, если объект ещё не получил данные видеотрансляции. Для этого нужно отправить запрос POST
к границе контекста /input_streams
LiveVideo. Пример:
POST /{live-video-id}/input_streams &access_token={access-token}
При этом будет возвращен ID объекта LiveVideo:
{ "id": "{live-video-id}" }
После включения резервной трансляции можно получить ее URL и URL основной трансляции из объекта LiveVideo.
curl -i -X POST \ "https://graph.facebook.com/10215840463339953/input_streams &access_token=EAAI4b..."
{ "id": "10215840463339953" }
Переключиться между основной и резервной трансляциями LiveVideo можно, отправив такой запрос:
POST /{live-video-id} ?master_ingest_stream_id={master-ingest-stream-id} &access_token={access-token}
Здесь {master-ingest-stream-id}
— логическое значение, 0
соответствует основной трансляции, а 1
— резервной.
curl -i -X POST \ "https://graph.facebook.com/10215840463339953 ?master_ingest_stream_id=1 &access_token=EAAI4b..."
Чтобы получить URL обеих трансляций, прочитайте поле ingest_streams
объекта LiveVideo:
GET /{live-video-id} ?fields=ingest_streams &acess_token={access-token}
В результате будут возвращены сведения о работоспособности получаемой трансляции и URL основной и резервной (при ее наличии) трансляций:
{ "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" }