Для трансляции видео сначала необходимо создать объект LiveVideo
. Объект LiveVideo
представляет трансляцию. Его свойства позволяют управлять настройками трансляции. API возвращает ID созданного объекта LiveVideo
и URL трансляции, который можно передать кодировщику и использовать для потоковой передачи данных в объект LiveVideo
.
10 июня 2024 года Meta вводит новые требования, которые необходимо соблюдать, чтобы выходить в эфир на Facebook. Новые требования:
Для трансляции в объекте User
получите маркер доступа пользователя с разрешением publish_video
и отправьте такой запрос:
POST /<USER_ID>/live_videos?status=LIVE_NOW
Список дополнительных параметров, которые можно включить в строку запроса, таких как название и описание трансляции, см. в справке по границе контекста /live_videos
.
При тестировании вызова API можно добавить параметр access_token
и задать в нем маркер доступа. Однако при выполнении безопасных вызовов из приложения следует использоваться класс маркера доступа.
В случае успеха API создаст объект LiveVideo
в профиле пользователя и вернет secure_stream_url
и id
объекта LiveVideo
. Трансляция появится в публикации в профиле пользователя, как только вы начнете отправлять данные на защищенный URL трансляции. Для отслеживания состояния трансляции и ее завершения можно отправлять запросы к объекту LiveVideo
.
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..." }
Для проведения прямого эфира в объекте Page
получите маркер доступа к Странице, принадлежащий ее администратору, и разрешения pages_read_engagement
и pages_manage_posts
, а затем отправьте такой запрос:
POST /<PAGE_ID>/live_videos?status=LIVE_NOW
Список дополнительных параметров, которые можно включить в строку запроса, таких как название и описание трансляции, см. в справке по границе контекста /live_videos
.
При тестировании вызова API можно добавить параметр access_token
и задать в нем маркер доступа. Однако при выполнении безопасных вызовов из приложения следует использоваться класс маркера доступа.
В случае успеха API создаст объект LiveVideo
на Странице и вернет secure_stream_url
и id
объекта LiveVideo
. Трансляция появится в публикации на Странице, как только вы начнете отправлять данные на защищенный URL трансляции. Для отслеживания состояния трансляции и ее завершения можно отправлять запросы к объекту LiveVideo
.
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..." }
Из объекта LiveVideo
можно получить URL предварительного просмотра трансляции и данные о ее состоянии, такие как скорость передачи и частота кадров. Данные о состоянии обновляются каждые 2 секунды, поэтому отправлять запросы чаще не следует. Если данные не будут получены в течение четырех секунд, произойдет тайм-аут.
Чтобы прочитать объект LiveVideo
, получите соответствующий маркер доступа пользователя или маркер доступа к Странице с разрешением publish_video
и отправьте такой запрос:
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
В параметре {fields}
укажите поля объекта LiveVideo, которые нужно получить. Например, получить поле ingest_streams
объекта LiveVideo
с данными о состоянии трансляции можно так:
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>" }
Свойства ответа
Имя поля | Описание |
---|---|
audio_bitrate | Скорость входящего аудиопотока в битах в секунду. |
is_master |
|
secure_stream_url | Защищенный URL трансляции в формате RTMPS для видеотрансляции с запрошенным ID. |
stream_url | URL трансляции в формате RTMP для видеотрансляции с запрошенным ID. |
video_bitrate | Скорость входящего видеопотока в битах в секунду. |
video_framerate | Частота входящего видеопотока в кадрах в секунду. |
video_gop_size | Размер группы изображений (GOP) в миллисекундах. |
video_height | Высота кадра входящего видео в пикселях. |
video_width | Ширина кадра входящего видео в пикселях. |
Чтобы завершить трансляцию, прекратите передачу данных из кодировщика на URL трансляции или отправьте такой запрос:
POST /<LIVE_VIDEO_ID>?end_live_video=true
Объект LiveVideo
перейдет в статус VOD
и сохранится как видео по запросу (VOD), так что его можно будет посмотреть позже.
В случае успеха API вернет ID объекта LiveVideo
.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Чтобы проверить, получил ли объект LiveVideo статус VOD
, выполните такой запрос GET
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Чтобы удалить заершенную трансляцию, сохраненную как видео по запросу, отправьте такой запрос:
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
Перед запуском трансляции возможна небольшая задержка, связанная с декодированием ее исходных потоковых данных и обработкой всех связанных запросов API. Это может затруднить определение точного времени начала трансляции для артистов, работающих в эфире. Чтобы избежать этой проблемы, объекты LiveVideo можно настроить так, чтобы они принимали потоковые данные, но не отображались для аудиторий до тех пор, пока в самих потоковых данных не будет обнаружено сообщение RTMP о запуске. Это позволит любому, кто может предварительно просматривать трансляцию, увидеть ее, в то же время позволяя потоковому кодировщику точно контролировать как время запуска трансляции для аудитории, так и первый кадр, который она увидит.
Чтобы включить запуск с точностью до кадра, сначала, как обычно, создайте объект LiveVideo и установите для него статус PREVIEW. После создания запросите объект LiveVideo, а затем поле secure_stream_url со следующими вложенными полями:
secure_stream_url.inband_go_live(require_inband_signal)
Это включит для объекта LiveVideo запуск с точностью до кадра. API вернет новый безопасный URL, на который можно будет выполнять трансляцию. Исходный безопасный URL трансляции, который был отправлен при создании объекта LiveVideo, можно игнорировать.
Трансляция будет запущена и станет видимой для аудитории, после того как (1) для ее статуса будет установлено значение LIVE (посредством вызова API Graph или публикации пользователя из Live Producer) и (2) кодировщик отправит сообщение RTMP о запуске.
Пакет AMF0 (типа 0x12), содержащий следующее:
onGoLive
;timestamp
;Подробнее см. в спецификациях RTMP и AMF0.
Пример запроса для включения запуска с точностью до кадра для объекта 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 трансляции для объекта LiveVideo с включенным запуском с точностью до кадра.
{ "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...", "id": "LIVE_VIDEO_ID" }
Чтобы получить информацию об ошибках, связанных с трансляцией, отправьте такой запрос:
GET /<LIVE_VIDEO_ID>?fields=errors
API вернет значения error code
, type
, message
и 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}" }
Подкод ошибки | Ошибка | Описание |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | Нарушение авторских прав в трансляции | Ваша видеотрансляция остановлена, так как она, вероятно, содержит аудио- или визуальный контент, принадлежащий другой Странице. |
VIDEO__CREATE_FAILED | Ошибка при загрузке | При загрузке произошла ошибка, видео не загружено. Повторите попытку. |
LIVE_VIDEO__DELETE_FAILED | Видеотрансляция не удалена | Произошла ошибка, ваша видеотрансляция не удалена. Повторите попытку. |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | Редактирование через Video API во время трансляции невозможно | Видеотрансляции нельзя редактировать через API Video Edit. Используйте для этого ID трансляции. |
LIVE_VIDEO__LIVE_STREAM_ERROR | Общая ошибка | При трансляции произошла ошибка. |
LIVE_VIDEO__NOT_EXIST | Видеотрансляция не существует | Трансляции, которую вы пытаетесь открыть, больше нет в системе. |
LIVE_VIDEO__PRIVACY_REQUIRED | Необходимо настроить конфиденциальность | Перед проведением трансляции необходимо задать настройки конфиденциальности. |
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 |