このドキュメントが更新されました。
日本語への翻訳がまだ完了していません。
英語の最終更新: 2020/10/05

ライブ配信

ライブ動画を配信するには、まずLiveVideoオブジェクトを作成する必要があります。LiveVideoオブジェクトはライブ配信を表し、このオブジェクトのプロパティを操作して配信の設定をコントロールすることができます。LiveVideoオブジェクトを作成する際、APIはオブジェクトのIDとストリーミングURLを返します。これをエンコーダーに渡して使用することで、LiveVideoオブジェクトにデータをストリーミングできます。

ユーザーにライブ配信する

ユーザーのプロフィールにライブ動画を配信するには、publish_videoアクセス許可を持つユーザーアクセストークンを取得して、次の宛先にリクエストを送信します。

POST /{user-id}/live_videos?status=LIVE_NOW

タイトルや説明文など、ライブ配信を説明するために含めることができる追加のクエリ文字列パラメーターについては、/live_videosエッジリファレンスをご覧ください。

成功すると、APIはユーザーのLiveVideoオブジェクトを作成し、secure_stream_urlLiveVideoオブジェクトのidを返します。データがセキュアなストリーミングURLに送信されると、すぐにユーザーのプロフィールの投稿にライブ配信が表示されます。LiveVideoオブジェクトをクエリして、ライブ配信の正常性をモニタリングしたり、ライブ配信を終了したりすることができます。

リクエストの例

curl -i -X POST \
 "https://graph.facebook.com/{user-id}/live_videos
   ?status=LIVE_NOW
   &title=Today%27s%20Live%20Video
   &description=This%20is%20the%20live%20video%20for%20today.
   &access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{user-id}/live_videos",
  new JSONObject("{\"title\":\"Today's Live Video\",\"description\":\"This is the live video for today.\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{user-id}/live_videos"
           parameters:@{ @"status": @"LIVE_NOW",@"title": @""Today's Live Video"",@"description": @""This is the live video for today."",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{user-id}/live_videos',
  'POST',
  {"status":"LIVE_NOW","title":"\"Today's Live Video\"","description":"\"This is the live video for today.\""},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{user-id}/live_videos',
    array (
      'status' => 'LIVE_NOW',
      'title' => '"Today\'s Live Video"',
      'description' => '"This is the live video for today."'
    ),
    '{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();

応答の例

{
  "id": "1953020644813104",
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url":"rtmps://rtmp-api.facebook..."
}

ページにライブ配信する

ページにライブ動画を配信するには、pages_read_engagementおよびpages_manage_postsアクセス許可を持つページの管理者のページアクセストークンを取得して、次の宛先にリクエストを送信します。

POST /{page-id}/live_videos?status=LIVE_NOW

タイトルや説明文など、ライブ配信を説明するために含めることができる追加のクエリ文字列パラメーターについては、/live_videosエッジリファレンスをご覧ください。

成功すると、APIはページLiveVideoオブジェクトを作成し、secure_stream_urlLiveVideoオブジェクトのidを返します。データがセキュアなストリーミングURLに送信されると、すぐにページの投稿にライブ配信が表示されます。LiveVideoオブジェクトを照会して、ライブ配信の正常性をモニタリングしたり、ライブ配信を終了したりすることができます。

リクエストの例

curl -i -X POST \
  "https://graph.facebook.com/{page-id}/live_videos
    ?status=LIVE_NOW
    &title=Today%27s%20Page%20Live%20Video
    &description=This%20is%20the%20live%20video%20for%20the%20Page%20for%20today
    &access_token=EAAC..."
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{page-id}/live_videos",
  new JSONObject("{\"title\":\"Today's Page Live Video\",\"description\":\"This is the live video for the Page for today.\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{page-id}/live_videos"
           parameters:@{ @"status": @"LIVE_NOW",@"title": @""Today's Page Live Video"",@"description": @""This is the live video for the Page for today."",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{page-id}/live_videos',
  'POST',
  {"status":"LIVE_NOW","title":"\"Today's Page Live Video\"","description":"\"This is the live video for the Page for today.\""},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{page-id}/live_videos',
    array (
      'status' => 'LIVE_NOW',
      'title' => '"Today's Page Live Video"',
      'description' => '"This is the live video for the Page for today."'
    ),
    '{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();

応答の例

{
  "id": "1953020644813108",
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url":"rtmps://rtmp-api.facebook..."
}

グループにライブ配信する

グループにライブ動画を配信するには、その前にグループがアプリをインストールする必要があります。グループの管理者がこれを行うには、www.facebook.comでグループを表示して[グループの設定を編集] > [アプリ] > [アプリを追加]に移動し、アプリを追加します。

アプリをインストールしたグループにライブ動画を配信するには、publish_videoアクセス許可を持つグループの管理者のユーザーアクセストークンを取得して、次の宛先にリクエストを送信します。

POST /{group-id}/live_videos?status=LIVE_NOW

タイトルや説明文など、ライブ配信を説明するために含めることができる追加のクエリ文字列パラメーターについては、/live_videosエッジリファレンスをご覧ください。

成功すると、APIはグループのLiveVideoオブジェクトを作成し、secure_stream_urlLiveVideoオブジェクトのidを返します。データがセキュアなストリーミングURLに送信されると、すぐにグループの投稿にライブ配信が表示されます。LiveVideoオブジェクトをクエリして、ライブ配信の正常性をモニタリングしたり、ライブ配信を終了したりできます。

リクエストの例

curl -i -X POST \
  "https://graph.facebook.com/{group-id}/live_videos
    ?status=LIVE_NOW
    &title=Today%27s%20Group%20Live%20Video
    &description=This%20is%20the%20live%20video%20for%20the%20group%20for%20today
    &access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{group-id}/live_videos",
  new JSONObject("{\"title\":\"Today's Group Live Video\",\"description\":\"This is the live video for the Group for today.\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{group-id}/live_videos"
           parameters:@{ @"status": @"LIVE_NOW",@"title": @""Today's Group Live Video"",@"description": @""This is the live video for the Group for today."",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{group-id}/live_videos',
  'POST',
  {"status":"LIVE_NOW","title":"\"Today's Groups Live Video\"","description":"\"This is the live video for the Group for today.\""},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{group-id}/live_videos',
    array (
      'status' => 'LIVE_NOW',
      'title' => '"Today's Group Live Video"',
      'description' => '"This is the live video for the Group for today."'
    ),
    '{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();

応答の例

{
  "id": "1953020644813108",
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url":"rtmps://rtmp-api.facebook..."
}

ライブ配信のストリーミングデータを取得する

LiveVideoオブジェクトを読み込んで、ライブ配信のストリーミングのプレビューURLや、ビットレートやフレームレートなどのストリーミングの正常性に関するデータを取得できます。ストリーミングの正常性データは2秒ごとに更新されるので、クエリの頻度を2秒に1回に制限します。データが4秒以上受信されないと、ストリーミングのタイムアウトが検出され、報告されます。

LiveVideoオブジェクトを読み込むには、publish_videoアクセス許可のある適切なユーザーまたはページのアクセストークンを取得して、次の宛先にクエリを送信します。

GET /{live-video-id}?fields={fields}

{fields}パラメーターを使用して、応答に含めるLiveVideoオブジェクトフィールドを指定します。以下に、ストリーミングの正常性に関するデータを含む、LiveVideoオブジェクトのingest_streamsを取得するリクエストの例を示します。

リクエストの例

curl -i -X GET \
  "https://graph.facebook.com/{live-video-id}
    ?fields=ingest_streams
    &access_token={access-token}"
GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/{live-video-id}",  
  new JSONObject("{\"fields\":\"ingest_streams\"}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "ingest_streams");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{live-video-id}"     
           parameters:@{ @"fields": @"ingest_streams",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}',     
  'GET',
  {"fields":"ingest_streams"},
  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();

応答の例

{
  "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": "{your-live-video-id}" 
}

応答プロパティ

フィールド名説明
audio_bitrate

受信する音声ストリーミングの1秒あたりのビット数

is_master

クエリしたライブ動画IDが、視聴者に配信される動画である場合はtrue

secure_stream_url

クエリするライブ動画IDの安全なRTMPS取り込みURL。

stream_url

クエリするライブ動画IDのRTMPS取り込みURL。

video_bitrate

受信する動画ストリームの1秒あたりのビット数。

video_framerate

受信する動画ストリームのフレーム毎秒。

video_gop_size

ミリ秒単位のGOP(写真のグループ)サイズ。

video_height

受信する動画フレームの高さ(ピクセル)。

video_width

受信する動画フレームの幅(ピクセル)。

ライブ配信を終了する

ライブ配信を終了するには、エンコーダーからストリーミングURLへのライブ動画データのストリーミングを停止するか、次の宛先にリクエストを送信します。

POST /{live-video-id}?end_live_video=true

これにより、LiveVideoオブジェクトのステータスがVODに設定され、後で視聴できるようにビデオオンデマンド(VOD)として保存されます。

成功すると、APIはLiveVideoオブジェクトのIDを返します。

リクエストの例

curl -i -X POST \
  "https://graph.facebook.com/{live-video-id}
    ?end_live_video=true
    &access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/live-video-id",
  new JSONObject("{\"end_live_video\":\"true\"}\"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{live-video-id}"
           parameters:@{ @"end_live_video": @"true",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}',
  'POST',
  {"end_live_video":"true"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{live-video-id}',
    array (
      'end_live_video' => 'true'
    ),
    '{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();

応答の例

{
  "id": "10213570560993813"
}

GET操作をLiveVideo IDに対して実行すると、そのステータスがVODに設定されていることを確認できます。

GET /{live-video-id}?fields=status

応答の例

{
  "status": "VOD",  // Broadcast ended, saved as VOD
  "id": "10213570560993813"
}

ライブ配信を削除する

配信が終了してVODとして保存されたライブ配信を削除するには、次の宛先にリクエストを送信します。

DELETE /{live-video-id}

リクエストの例

curl -i -X DELETE \
 "https://graph.facebook.com/{live-video-id}?access_token={access-token}"
Bundle parameters = new Bundle();

GraphRequest request = new GraphRequest(
  accessToken,
  "/{live-video-id}",
  parameters,
  HttpMethod.DELETE,
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"{live-video-id}"
           parameters:nil
           HTTPMethod:@"DELETE"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}',
  'DELETE',
  {},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->delete(
    '/{live-video-id}',
    array (),
    '{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();

応答の例

{
  success: true
}

エラーコードデータを取得する

ライブ配信に関連付けられたエラーコードデータを取得するには、次の宛先にリクエストを送信します。

GET /{live-video-id}?fields=errors

APIはerror codetypemessage、およびtimestampを返します。

応答の例

curl -i -X GET \
 "https://graph.facebook.com/{live-video-id}
   ?fields=errors
   &access_token={access-token}"
GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/1951440638245129",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "errors");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/1951440638245129"
           parameters:@{ @"fields": @"errors",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/1951440638245129',
  'GET',
  {"fields":"errors"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/1951440638245129',
    '{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();

応答の例

{ "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を使用してライブ動画を編集することはできません。ライブ動画IDを使用してください。

LIVE_VIDEO__LIVE_STREAM_ERROR

一般的なストリーミング

ストリーミング中にエラーが発生

LIVE_VIDEO__NOT_EXIST

ライブ動画が存在しない

アクセスしようとしているライブ動画は、システム上に存在しなくなりました。

LIVE_VIDEO__PRIVACY_REQUIRED

プライバシー設定が必要

ライブ配信する前に、プライバシー設定を行う必要があります。