Para transmitir um vídeo ao vivo, você deve primeiro criar um objeto LiveVideo
. O objeto LiveVideo
representa a transmissão. É possível gerenciar as propriedades do objeto para controlar as configurações da transmissão. Após a criação, a API retornará o ID do objeto LiveVideo
e uma URL de stream, que pode ser enviada ao codificador e usada para transmitir dados ao objeto LiveVideo
.
Em 10 de junho de 2024, a Meta lançará novos requisitos que precisarão ser atendidos antes que uma conta possa iniciar uma live no Facebook. Estes são os novos requisitos:
Para fazer uma transmissão em um objeto User
, obtenha um token de acesso do usuário com a permissão publish_video
e envie uma solicitação para:
POST /<USER_ID>/live_videos?status=LIVE_NOW
Consulte a referência da borda /live_videos
e veja parâmetros adicionais da string de consulta que você pode incluir para descrever a transmissão, como um título e uma descrição.
Ao testar uma chamada de API, você pode incluir o parâmetro access_token
definido como seu token de acesso. No entanto, quando fizer chamadas seguras do seu app, use as classes de token de acesso.
Em caso de sucesso, a API criará um objeto LiveVideo
no usuário e retornará uma secure_stream_url
, além do id
do objeto LiveVideo
. A transmissão será exibida em uma publicação no perfil do usuário assim que você enviar dados para a URL de stream segura. É possível consultar o objeto LiveVideo
para monitorar a integridade da transmissão e encerrá-la.
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 um vídeo ao vivo em uma Page
, obtenha um token de acesso à Página de um administrador com as permissões pages_read_engagement
e pages_manage_posts
. Depois, envie uma solicitação para:
POST /<PAGE_ID>/live_videos?status=LIVE_NOW
Consulte a referência da borda /live_videos
e veja parâmetros adicionais da string de consulta que você pode incluir para descrever a transmissão, como um título e uma descrição.
Ao testar uma chamada de API, você pode incluir o parâmetro access_token
definido como seu token de acesso. No entanto, quando fizer chamadas seguras do seu app, use as classes de token de acesso.
Em caso de sucesso, a API criará um objeto LiveVideo
na Página e retornará uma secure_stream_url
, além do id
do objeto LiveVideo
. A transmissão será exibida em uma publicação na Página assim que você enviar dados para a URL de stream segura. É possível consultar o objeto LiveVideo
para monitorar a integridade da transmissão e encerrá-la.
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..." }
É possível ler um objeto LiveVideo
para obter as URLs de prévia do stream da transmissão e dados sobre a integridade do streaming, como taxas de bits e de quadros. Os dados de integridade do stream são atualizados a cada 2 segundos. Por isso, não exceda essa frequência ao fazer consultas. Um tempo-limite de stream será detectado e registrado após 4 segundos sem recebimento de dados.
Para ler um objeto LiveVideo
, obtenha um token de acesso adequado de usuário ou Página com a permissão publish_video
. Depois, envie uma consulta para:
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
Use o parâmetro {fields}
para especificar os campos do objeto LiveVideo que você quer retornar. Por exemplo, veja uma solicitação para receber o ingest_streams
no objeto LiveVideo
, que inclui dados sobre a integridade do 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>" }
Propriedades da resposta
Nome do campo | Descrição |
---|---|
audio_bitrate | Bits por segundo do stream de áudio recebido. |
is_master |
|
secure_stream_url | A URL de ingestão RTMPS segura para o ID do vídeo ao vivo consultado. |
stream_url | A URL de ingestão RTMP para o ID do vídeo ao vivo consultado. |
video_bitrate | Bits por segundo do stream de vídeo recebido. |
video_framerate | Quadros por segundo do stream de vídeo recebido. |
video_gop_size | Tamanho do grupo de fotos (GOP, pelas iniciais em inglês) em milissegundos. |
video_height | Altura em pixels do quadro de vídeo recebido. |
video_width | Largura em pixels do quadro de vídeo recebido. |
Para encerrar uma transmissão, interrompa o streaming dos dados do vídeo ao vivo do seu codificador para a URL de stream ou envie uma solicitação para:
POST /<LIVE_VIDEO_ID>?end_live_video=true
Isso definirá o status do objeto LiveVideo
como VOD
e o salvará como um vídeo sob demanda (VOD, pelas iniciais em inglês) para que ele possa ser assistido mais tarde.
Em caso de sucesso, a API retornará o ID do objeto LiveVideo
.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
É possível realizar uma operação GET
no ID do LiveVideo para confirmar que o status dele foi definido como VOD
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Para excluir uma transmissão que foi encerrada e salva como VOD, envie uma solicitação para:
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
Pode haver um pequeno atraso antes que uma transmissão ao vivo seja iniciada enquanto decodificamos os dados de streaming iniciais e processamos as solicitações de API associadas. Por isso, pode ser difícil que os apresentadores no ar saibam exatamente quando a transmissão foi iniciada. Para evitar esse problema, os objetos LiveVideo poderão ser configurados para aceitar dados de streaming, mas não serem transmitidos ao vivo para o público até que uma mensagem RTMP de transmissão seja detectada nos dados. Isso possibilita que qualquer pessoa capaz de obter uma prévia veja a transmissão, ao mesmo tempo em que permite que o codificador de streaming controle com precisão o horário em que a transmissão vai ao ar para o público e o primeiro quadro que o público vê.
Para habilitar a transmissão ao vivo com precisão de quadro, primeiro crie um objeto LiveVideo como você faria normalmente e defina o status como PREVIEW. Depois de criado, consulte o objeto LiveVideo e solicite o campo secure_stream_url com os seguintes campos aninhados:
secure_stream_url.inband_go_live(require_inband_signal)
Isso habilitará a transmissão ao vivo com precisão de quadro no objeto LiveVideo. Além disso, a API responderá com uma nova URL de stream segura que poderá ser usada para transmissão. Você pode desconsiderar a URL de stream segura inicial que foi enviada na criação do objeto LiveVideo.
A transmissão entrará no ar e ficará visível para o público após (1) o status dela ser definido como LIVE (por meio de uma chamada da Graph API ou de uma publicação do usuário no Live Producer) e (2) o codificador enviar a mensagem RTMP ao vivo.
Um pacote AMF0 (tipo 0x12) que inclui o seguinte:
onGoLive
timestamp
Para saber mais, consulte as especificações de RTMP e AMF0.
Exemplo de solicitação para habilitar a transmissão ao vivo com precisão de quadro em um LiveVideo.
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 segura para um objeto LiveVideo com a transmissão ao vivo com precisão de quadro 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 obter dados de código de erro associados a uma transmissão, envie uma solicitação para:
GET /<LIVE_VIDEO_ID>?fields=errors
A API responderá com o error code
, o type
, a message
e um 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}" }
error_subcode | Resumo do erro | Descrição |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | Violação de direitos autorais em vídeo ao vivo | O vídeo ao vivo foi interrompido porque pode ter conteúdo visual ou de áudio pertencente a outra Página. |
VIDEO__CREATE_FAILED | Problema ao carregar | Ocorreu um problema e o vídeo não foi carregado. Tente novamente. |
LIVE_VIDEO__DELETE_FAILED | Vídeo ao vivo não excluído | Ocorreu um problema e não foi possível excluir o vídeo ao vivo. Tente novamente. |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | Edição por API de Vídeo não permitida para vídeos ao vivo | Não é permitida a edição de um vídeo ao vivo usando a API de edição de vídeo. Use a identificação de vídeo ao vivo. |
LIVE_VIDEO__LIVE_STREAM_ERROR | Stream genérico | Houve um erro durante o stream. |
LIVE_VIDEO__NOT_EXIST | O vídeo ao vivo não existe | O vídeo ao vivo que você está tentando acessar não existe mais no sistema. |
LIVE_VIDEO__PRIVACY_REQUIRED | Configuração de privacidade exigida | Você precisa definir a privacidade antes de transmitir ao 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 |