如要直播视频,您必须先创建一个 LiveVideo
对象。LiveVideo
对象表示直播,您可以操控该对象的属性,从而控制该直播的设置。创建 LiveVideo
对象后,API 将返回该对象的编号和直播网址,您之后可将这些返回内容传递到编码器并用于向 LiveVideo
对象流式传输数据。
2024 年 6 月 10 日,Meta 将推出一些新要求。账户必须先满足这些要求,才能在 Facebook 上开始直播。新要求如下:
如要在 User
对象上进行直播,请获取具备 publish_video
权限的用户访问口令,并发送请求至:
POST /<USER_ID>/live_videos?status=LIVE_NOW
请参阅 /live_videos
连线参考文档,了解您可以添加的用于描述该直播的其他查询字符串参数,如标题和描述。
测试 API 调用时,您可以在调用中加入 access_token
参数,并将其设为您的访问口令。但是,从您的应用发出安全调用时,应使用访问口令类。
若请求成功,API 将在“用户”界面上创建一个 LiveVideo
对象,并返回 secure_stream_url
和该 LiveVideo
对象的 id
。向安全直播网址发送数据后,直播视频将立即出现在“用户”个人主页的帖子中。您可以查询该 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
和该 LiveVideo
对象的 id
。向安全直播网址发送数据后,直播将立即出现在公共主页的一个帖子中。您可以查询该 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
对象,以获取直播视频的预览网址以及直播状态数据,如比特率和帧率。直播状态数据每 2 秒刷新一次,因此请将查询频次限制为仅每 2 秒 1 次。在未收到任何数据的 4 秒后,系统将检测到投射超时并予以报告。
如要读取 LiveVideo
对象,请获取具备 publish_video
权限的相应用户访问口令或公共主页访问口令,然后发送查询至:
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
使用 {fields}
参数指定您希望返回的 LiveVideo 对象字段。以下示例展示如何请求获取 LiveVideo
对象上的 ingest_streams
,其中包含直播状态数据:
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 | 正在查询的直播视频编号的安全 RTMPS 提取网址。 |
stream_url | 正在查询的直播视频编号的 RTMP 提取网址。 |
video_bitrate | 传入直播视频的每秒比特数。 |
video_framerate | 传入直播视频的每秒帧数。 |
video_gop_size | GOP(图片组)大小,以毫秒为单位。 |
video_height | 传入视频帧的高度,以像素为单位。 |
video_width | 传入视频帧的宽度,以像素为单位。 |
如要结束直播,请停止向直播网址流式传输编码器中的直播视频数据,或发送请求至:
POST /<LIVE_VIDEO_ID>?end_live_video=true
这会将 LiveVideo
对象的状态设置为 VOD
,并将其另存为点播视频 (VOD),以供日后观看。
若请求成功,API 将返回 LiveVideo
对象的编号。
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
您可以对 LiveVideo 编号执行 GET
操作,确认其状态已设置为 VOD
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
如要删除已结束的直播并将其另存为 VOD,请发送请求至:
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
在某个直播开始之前,当我们解码该直播的初始直播数据并处理任何相关 API 请求时,可能会稍有延迟。这会使直播人员很难准确知道直播何时开始。为避免这一问题,LiveVideo 对象可以设置为:接受直播数据,但直到在直播数据本身中检测到直播 RTMP 消息,才向观众直播。此举可让能预览直播的任何人都可以看到直播,同时让直播编码器可以精确控制向某个观众开始直播的时间和该观众看到的第一帧。
如要启用帧定位直播,首先照常创建一个 LiveVideo 对象,并将其状态设置为 PREVIEW。创建该对象后,查询该对象并请求包含以下嵌套字段的 secure_stream_url 字段:
secure_stream_url.inband_go_live(require_inband_signal)
这将在 LiveVideo 对象上启用帧定位直播功能,并且 API 返回的响应中将包含一个新安全直播网址,然后您便可将数据流式传输至此网址。您可以忽略您首次创建 LiveVideo 对象时发送给您的初始安全直播网址。
直播将在以下情况下开始并显示:(1) 直播状态设置为 LIVE(通过图谱 API 调用或通过从直播管理工具发布直播的用户)之后;以及 (2) 编码器发送直播 RTMP 消息之后。
一个 AMF0 包(类型 0x12),其中包含:
onGoLive
timestamp
在 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..."
已启用帧定位直播功能的 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}" }
error_subcode | 错误摘要 | 描述 |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | 违反直播版权 | 由于您的视频直播可能包含属于其他公共主页的音频或影视作品内容,因此已将其停止。 |
VIDEO__CREATE_FAILED | 上传问题 | 由于存在问题,因此未上传您的视频。请重试。 |
LIVE_VIDEO__DELETE_FAILED | 未删除直播视频 | 由于存在问题,因此我们未能删除您的直播视频。请重试。 |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | 不得在直播时通过视频 API 进行编辑 | 不得使用视频编辑 API 编辑直播视频。使用直播视频编号。 |
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 |