Streams de backup

Você pode fazer um streaming dos dados de backup para uma transmissão de vídeo ao vivo. Caso ocorram falhas no seu stream primário, alternaremos automaticamente para o stream de backup. Dessa forma, a transmissão do vídeo ao vivo pode continuar sem interrupções. O stream de backup continuará sendo usado na transmissão, a menos que você retorne manualmente para o stream primário. O stream primário também poderá ser retomado caso o stream de backup apresente erros.

Para usar um stream de backup com uma transmissão de vídeo ao vivo, você deve ativar o streaming de backup ao criar o objeto LiveVideo da transmissão ou ativar o recurso no objeto LiveVideo antes de receber os dados do streaming.

Ativar o streaming de backup na criação do LiveVideo

Para ativar o streaming de backup ao criar seu objeto LiveVideo da transmissão, inclua o parâmetro de cadeia de caracteres de consulta enable_backup_ingest=true na sua consulta.

Por exemplo, para criar um LiveVideo com um streaming de backup ativado em um usuário, use este comando:

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

Isso retornará duas URLs, uma para o stream primário e outra para o de backup (secundário):

{ "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}" ] }

Use secure_stream_url para o stream de ingestão primário e secure_stream_secondary_urls para o stream de ingestão de backup. É possível fazer o streaming dos dados de backup para seu objeto LiveVideo a qualquer momento durante a transmissão.

Exemplo de solicitação de cURL

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

Exemplo de resposta

{ "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" ] }

Ativar o streaming de backup em um LiveVideo existente

Você pode ativar o streaming de backup em um LiveVideo, desde que o objeto não tenha recebido dados do streaming de vídeo ao vivo, enviando uma solicitação POST para a borda /input_streams do LiveVideo. Por exemplo:

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

Isso retornará o ID do LiveVideo:

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

Após a ativação, você pode [obter as URLs dos streams primário e de backup] a partir do objeto LiveVideo.

Exemplo de solicitação de cURL

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

Exemplo de resposta

{ "id": "10215840463339953" }

Alternar streams manualmente

Se você quiser alternar manualmente entre um stream primário e um de backup do LiveVideo, envie uma solicitação para:

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

O valor {master-ingest-stream-id} é booliano. 0 representa o stream de ingestão primário, e 1 representa o stream de ingestão de backup.

Exemplo de solicitação de cURL

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

Obter URLS dos streams primário e de backup

Você pode ler um campo ingest_streams do LiveVideo para obter as URLs dos streams primário e de backup.

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

Isso retornará a integridade do stream de ingestão e as URLs dos streams primário e de backup (se houver) no 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" }

Exemplo de solicitação de cURL

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

Exemplo de resposta

{ "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" }