上級者向けの用途

オーディエンスのターゲット設定

ライブ動画を視聴できる対象に特定のオーディエンスを含めたり除外したりします。

ターゲットオーディエンスを作成する

ノード

開始する前に

ページのライブ動画の場合、以下が必要です。

グループのライブ動画の場合、以下が必要です。

targetingフィールドとそのパラメーターを設定したPOST /idリクエスト(idはLiveVideo ID)を送信します。

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 IDです。

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はストリーミング先として使用できる新しいセキュアストリームURLを応答として返します。LiveVideoオブジェクトを最初に作成したときに送信された、最初のセキュアストリームURLは無視してかまいません。

(1)配信ステータスが(グラフAPI呼び出しまたはLive Producerから公開するユーザーを通して) LIVEに設定され、かつ、(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オブジェクトのセキュアストリームURLの例を次に示します。

{ "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日以降、[ライブ配信を開始]ダイアログは廃止されます。詳しくは、ブログ投稿をご覧ください。

Facebookは、Live API統合のプロセスをできる限り簡素化するプラグインを作成しました。これにより、ライブ配信の開始前に、ポップアップウィンドウでFacebookへの認証、ライブストリーミングのプレビュー、ライブストリーミングの説明の記述などを行うことができます。このダイアログは、クライアントサイドからのストリーミングに最適です。バックエンド統合は、引き続きAPIを直接使用する必要があります。

要件

  • JavaScript用Facebook SDKがブラウザー(ウェブサイト)またはウェブビュー(デスクトップアプリ)に実装されている必要があります。

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

createフェーズのダイアログでは、ストリーミングURLに動画をアップロードできます。publishフェーズのダイアログには、プレビューと[ライブ配信を開始]ボタンが表示されます。required

broadcast_data

APIまたはcreateフェーズのいずれかから返される応答object

publishフェーズでは、このパラメーターは、requiredになります。

[Create]フェーズポップアップウィンドウで、自分が管理する任意のページまたはグループからライブストリーミングの投稿先を選択します。POST応答には、stream_urlフィールドとsecure_stream_urlフィールドが含まれます。どちらのフィールドも、サーバーURLとストリーミングキーに分けることができます。

サーバーURLは、stream_urlの前半のrtmp://rtmp-api.facebook.com:80/rtmp/

ストリーミングキーは、stream_urlの後半の10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

応答フィールドフェーズ説明

id

createpublish

配信動画のID。

stream_url

create

ライブストリーミングのアップロードに使用する、ストリーミングサーバーとストリーミングキーを含むRTMP URL。

secure_stream_url

create

RTMPS URL(セキュアプロトコルで保護されたストリーミングURL)。

status

publish

配信のステータスを示す文字列値。

Facebookのコードスニペットには、stream_urlを使用するalert呼び出しが用意されています。クライアントはstream_urlを使用してストリーミングを開始します。ストリーミングが開始されるとすぐに、[publish]フェーズポップアップウィンドウに配信のプレビューが表示されます。このダイアログでは、リクエストのプライバシーパラメーターを調整せずに利用者がプライバシー設定を選択できます。またライブ動画の説明、タイトル、トピックタグも設定できます。

注:[publish]ポップアップウィンドウが[オフライン]の場合は、ファイアウォールがRTMPをブロックしていないことと、ブラウザーのAdblockerソフトウェアがすべてオフになっていることを確認してください。

[ライブ配信を開始]をクリックすると、ダイアログは閉じ、数秒後にライブストリーミングが、設定した投稿先に応じてページまたはグループで再生されます。

ライブ動画の最初のフレームにフレームの正確な開始時間を設定したメタデータが挿入されます。エンコーダーでカウントダウンを実装すると、パブリッシャーに動画の正確な開始時間を知らせることができます。Facebookのインターフェイスから動画を開始、停止することもできます。