进阶用途

受众定位

添加和排除观看直播视频的特定受众。

创建目标受众

节点

前期准备

对于公共主页上的直播视频,您将需要:

对于群组中的直播视频,您将需要:

示例

发送 POST /id 请求(其中 id 是 LiveVideo 编号),并设置 targeting 字段及其参数。

curl -i -X POST \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?targeting={age_min:17, geo_locations:{countries:["US","CA","MX"]}}
    &access_token=ACCESS_TOKEN"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/LIVE_VIDEO_ID/",
  new JSONObject("{}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID/"
           parameters:@{ @"targeting": @"{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID/',
  'POST',
  {"targeting":"{age_min:17, geo_locations:{countries:[\"US\",\"CA\",\"MX\"]}, excluded_zipcodes:{\"key\":\"US:10001\"}}"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/LIVE_VIDEO_ID/',
    array (
      'targeting' => '{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}'
    ),
    'ACCESS_TOKEN'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

响应示例

{ "targeting": { "age_max": 65, "age_min": 17, "geo_locations": { "countries": [ "US", "CA", "MX" ] } }, "id":"LIVE_VIDEO_ID" } 

获取目标受众信息

节点

前期准备

对于公共主页上的直播视频,您将需要:

对于群组中的直播视频,您将需要:

  • 由群组管理员请求的用户访问口令

示例

发送带有 targeting 字段的 GET /id 请求,其中 id 为 LiveVideo 编号。

GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/LIVE_VIDEO_ID",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "targeting");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID"
           parameters:@{ @"fields": @"targeting",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID',
  'GET',
  {"fields":"targeting"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/LIVE_VIDEO_ID',
    'ACCESS_TOKEN'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();
curl -i -X GET \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?fields=targeting&access_token=ACCESS_TOKEN"

响应示例

{ "targeting": { "age_max": 65, "age_min": 17, "geo_locations": { "countries": [ "US" "CA", "MX" ] } }, "id":"LIVE_VIDEO_ID" } 

精确到帧的直播

在解码直播的初始直播数据并处理任何关联的 API 请求时,直播可能会稍有延迟。这可能会使主播难以准确知道直播何时已经开始。为避免此问题,可以将 LiveVideo 对象设置为接受直播数据,但在直播数据中检测到开始直播 RTMP 消息之前,不向受众直播。因此,任何能够预览直播的用户都可以观看直播,同时,直播编码器能够精确控制向受众直播的时间及受众看到的第一帧。

要启用精确到帧的直播,首先需要像往常一样创建 LiveVideo 对象,并将其状态设置为“PREVIEW”。创建完成后,查询 LiveVideo 对象并请求带有以下嵌套字段的 secure_stream_url 字段:

secure_stream_url.inband_go_live(require_inband_signal)

这将为 LiveVideo 对象启用精确到帧的直播,并且 API 将响应新的安全直播网址,以便您随后通过该网址进行直播。您可以忽略最初创建 LiveVideo 对象时系统发送给您的初始安全直播网址。

在 (1) 将直播状态设置为“LIVE”(通过图谱 API 调用或用户从 Live Producer 发布)同时 (2) 编码器发送开始直播 RTMP 消息后,直播将上线并对受众可见。

开始直播 RTMP 消息结构

一个 AMF0 数据包(类型 0x12),其中包含:

  • onGoLive 字符串
  • 一个包含单个键值对的 ECMA 数组(类型 0x08):
    • 键:timestamp 字符串(类型 0x02)
    • 值:数字(类型 0x00),第一个视频帧公开可见时的时间戳

详情请查看 RTMPAMF0 技术规范。

请求示例

在 LiveVideo 上启用精确到帧的直播的请求示例。

curl -i -X GET \ "https://graph.facebook.com/v19.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" }

“开始直播”对话框

从 2021 年 5 月 25 日开始,“开始直播”对话框将停用。详情请访问我们的博文

为尽可能简化 Live API 集成流程,我们创建了一个插件,让您能够在开始直播前通过 Facebook 验证身份、预览直播视频,以及通过弹出窗口介绍直播视频。此对话框最适合通过客户端直播的场景。后端集成仍应直接使用 API。

条件

如要初始化弹出窗口(其中提供能够确定 POST 响应定向位置的控件),请插入以下代码。

<button id="liveButton">Create Live Stream To Facebook</button>
<script>
document.getElementById('liveButton').onclick = function() {
  FB.ui({
    display: 'popup',
    method: 'live_broadcast',
    phase: 'create',
}, function(response) {
    if (!response.id) {
      alert('dialog canceled');
      return;
    }
    alert('{your-stream-url}:' + response.secure_stream_url);
    FB.ui({
      display: 'popup',
      method: 'live_broadcast',
      phase: 'publish',
      broadcast_data: response,
    }, function(response) {
    alert("video status: \n" + response.status);
    });
  });
};
</script>
参数 描述

display

popupiframe

对话框在网页中打开的方式。

phase

createpublish

处于创建阶段的对话框允许您获取用于上传视频的直播网址;处于发布阶段的对话框提供“预览”和“开始直播”按钮。required

broadcast_data

从 API 或 create 阶段返回的响应 object

对于 publish 阶段来说,此参数为 required

创建阶段的弹出窗口中,选择直播视频目标位置,这可以是您管理的任何主页或小组。POST 响应将包含 stream_urlsecure_stream_url 字段。任一字段都可拆分为服务器网址和直播密钥。

服务器网址是 stream_url 的前半部分:rtmp://rtmp-api.facebook.com:80/rtmp/

直播密钥是 stream_url 的后半部分:10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

响应字段阶段描述

id

create, publish

直播视频的编号。

stream_url

create

用于上传直播视频的 RTMP 网址,包含直播服务器和直播密钥。

secure_stream_url

create

RTMPS 网址,具有安全协议的直播网址。

status

publish

指示直播状态的字符串值。

在代码片段中,我们提供具有 stream_urlalert 调用。客户端应使用 stream_url 开始直播。直播开始后,您就会发现发布阶段弹出窗口中显示直播预览。用户可通过对话框选择隐私设置,而无需调整请求的隐私参数,还可以通过对话框设置直播视频说明、标题和话题标签。

请注意:如果发布弹出窗口为脱机状态,请确保防火墙没有屏蔽 RTMP,且浏览器上的所有广告屏蔽软件均已关闭。

点击开始直播后,对话框将关闭;几秒钟后,系统即会根据所选目标位置在“主页”或“群组”中播放直播视频。

元数据会在帧精确开始时间注入至直播视频的第一帧。编码器可执行倒计时,提醒发布者视频的确切开始时间。您还可通过 Facebook 界面开始和暂停视频。