進階用途

受眾目標指定

包含和排除直播視像的特定受眾。

建立目標廣告受眾

節點

準備工作

對於專頁上的直播視像,您將需要:

對於群組中的直播視像,您將需要:

範例

傳送 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" } 

獲取目標廣告受眾資訊

節點

準備工作

對於專頁上的直播視像,您將需要:

對於群組上的直播視像,您將需要:

  • 群組管理員要求的用戶存取憑證

範例

傳送 GET /id 要求(其中 id 為 LiveVideo 編號),且要求含有 targeting 欄位。

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」(經 Graph API 調用或用戶從直播管理工具發佈),以及 (2) 編碼器傳送開始直播 RTMP 訊息後。

即時 RTMP 訊息結構

AMF0 封包(類型 0x12),內含:

  • 字串 onGoLive
  • 包含單個鍵值組合的 ECMA 陣列(類型 0x08):
    • 鍵:字串(類型 0x02)timestamp
    • 值:數位(類型 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

createpublish

直播影片的編號。

stream_url

create

用於上載直播串流影片的 RTMP 網址,其中包含串流影片伺服器和串流影片密鑰。

secure_stream_url

create

為 rtmps 網址,該串流網址擁有安全通訊協定。

status

publish

指明直播內容狀態的字串值。

在我們的代碼片段中,存在著含有 stream_urlalert 調用。用戶端應會使用 stream_url 開始直播。串流開始不久後,您就會在發佈階段的彈出式視窗中看到直播的預覽畫面。用戶可透過對話框選擇私隱設定,而無需調整要求的私隱參數,並設定直播視像描述、標題和主題標籤。

請注意:發佈彈出式視窗顯示為離線,請檢查您的防火牆是否封鎖了 RTMP,並確認瀏覽器的 Adblocker 軟件都處於關閉狀態。

點擊開始直播後,對話框便將關閉,而且系統會在幾秒鐘後根據所選目標位置,在專頁或群組中播放直播串流影片。

中繼資料會以準確地控制開始時間的畫格,插入直播視像的第一個畫格。編碼器可執行倒數計時,提醒發佈商影片的準確開始時間。您亦可從 Facebook 介面開始或停止影片播放。