Planen von Übertragungen

Die Planung von Live-Videos wird ab v12.0 und für alle Versionen am 14. Dezember 2021 eingestellt. Aufrufe an den POST /ID/live-video-Endpunkt mit dem Parameter planned_start_time werden einen Fehler zurückgeben.

Mithilfe der Live Video API kannst du Live-Video-Übertragungen, die zu einem bestimmten Zeitpunkt live gehen sollen, bis zu sieben Tage vor ihrem Übertragungsdatum planen.

Planen einer Übertragung

Um eine Live-Video-Übertragung mit einem Startdatum in der Zukunft für einen Nutzer, eine Seite, eine Gruppe oder ein Event zu erstellen, sende eine Anfrage an:

POST /{node-id}/live_videos?status=SCHEDULED_UNPUBLISHED&planned_start_time={start-time}

Verwende den Parameter planned_start_time und einen UNIX-Zeitstempel, um die gewünschte Startzeit anzugeben.

Hierdurch wird ein LiveVideo-Objekt im Ziel-Node erstellt. Außerdem werden die secure_stream_url und die id des Live-Videos zurückgegeben. Verwende die sichere Stream-URL in deinem Encoder, um Live-Videodaten zu oder vor der geplanten Startzeit an das LiveVideo-Objekt zu senden. Die Übertragung wird zur geplanten Startzeit in der Chronik/im Feed des Node angezeigt, sofern Stream-Daten empfangen werden.

Geplante Übertragungen können Stream-Daten jederzeit vor dem Startdatum zu Vorschauzwecken empfangen.

Beispielanfrage

curl -i -X POST \ 
  "https://graph.facebook.com/{page-id}/live_videos?status=SCHEDULED_UNPUBLISHED&planned_start_time=1541539800&access_token={access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{page-id}/live_videos",
  new JSONObject("{\"status\":\"SCHEDULED_UNPUBLISHED\",\"planned_start_time\":\"1541539800\"}"),
  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": @"SCHEDULED_UNPUBLISHED",@"planned_start_time": @"1541539800",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{page-id}/live_videos',
  'POST',
  {"status":"SCHEDULED_UNPUBLISHED","planned_start_time":"1541539800"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{page-id}/live_videos',
    array (
      'status' => 'SCHEDULED_UNPUBLISHED',
      'planned_start_time' => '1541539800'
    ),
    '{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();

Beispielantwort

{
  "id": "10214937378883406",  //LiveVideo object ID
  "stream_url": "rtmp://rtmp-api.facebook...",
  "secure_stream_url": "rtmps://rtmp-api.facebook..."  //Stream URL
}

Anweisungen zum Abrufen einer Liste geplanter Übertragungen findest du unter Abrufen geplanter Übertragungen.

Anzeigen einer Übertragungsvorschau

Mit der Live Video API kannst du dir eine Vorschau einer noch nicht veröffentlichten Live-Video-Übertragung ansehen. Das ist ein LiveVideo-Objekt, bei dessen Erstellung status auf SCHEDULED_UNPUBLISHED oder UNPUBLISHED festgelegt ist.

Um dir eine Vorschau einer noch nicht veröffentlichten Live-Video-Übertragung anzusehen, sende eine Anfrage an:

GET /{live_video_id}?fields={fields}

Verwende den Parameter {fields}, um die dash_preview_url des LiveVideo-Objekts abzurufen.

Beispielanfrage

curl -i -X GET \
 "https://graph.facebook.com/{live-video-id}
    ?fields=dash_preview_url
     &access_token={access-token}"
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", "dash_preview_url");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{live-video-id}"
           parameters:@{ @"fields": @"dash_preview_url",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{live-video-id}',
  'GET',
  {"fields":"dash_preview_url"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/{live-video-id}',
    '{fields:dash_preview_url}',    
    '{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();

Beispielantwort

{
  'dash_preview_url': 'https://video.xx.fbcdn.net/...',
  'id': '{live-video-id}'
}

Gibt die dash_preview_url und die id des Live-Videos zurück. Kopiere die URL und füge sie in einen Dash Player ein, um eine Vorschau der Übertragung anzuzeigen.

Zwar ist die Anzeige einer Übertragungsvorschau mit einem Test-Player eines Drittanbieters eine gute Möglichkeit, den Inhalt der Übertragung zu überprüfen, wir empfehlen jedoch die Übertragung auf eine Testseite. Du musst ein Seitenadministrator oder -editor sein, um die Seite zu übertragen. Außerdem kannst du den privacy-Parameter festlegen, um Streams zu erstellen, die nur du sehen kannst.

Abrufen geplanter Übertragungen

Um eine Liste geplanter Übertragungen für einen Nutzer, eine Seite, eine Gruppe oder eine Veranstaltung abzurufen, rufe einen entsprechenden Zugriffsschlüssel mit der Berechtigung publish_video ab und sende eine Anfrage an:

GET /{node-id}/live_videos?broadcast_status=["SCHEDULED_UNPUBLISHED"]

Beachte, dass der Wert von broadcast_status ein Array sein muss. Eine vollständige Liste zusätzlicher Werte findest du in der Live-Video-Referenz.

Beispiel-Übertragungsliste für eine Seite

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

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

Beispielantwort

{
  "data": [
    {
      "status": "SCHEDULED_UNPUBLISHED",
      "stream_url": "rtmp://rtmp-api-dev.facebook.com:80/rtmp/...",
      "secure_stream_url": "rtmps://rtmp-api-dev.facebook.com:443/rtmp/...",
      "embed_html": "<iframe src=\"https://www.facebook.com/plugins/video.php?...",
      "id": "10214937378883406 "  //LiveVideo object ID
    }
  ]
}

Neuplanen einer Übertragung

Um die Startzeit einer geplanten Übertragung zu ändern, sende eine Anfrage an:

POST /{live-video-id}?planned_start_time={new-start-time}

Der Wert von {new-start-time} muss ein UNIX-Zeitstempel sein, der die neue Startzeit angibt. Wenn der Vorgang erfolgreich war, antwortet die API mit der ID des LiveVideo-Objekts.

Beispiel-Live-Video für eine Seite

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

Beispielantwort

{
  "id": "10214937378883406"
}

Sofortiges Starten einer Übertragung

Um eine Übertragung sofort zu starten, sende eine Anfrage an:

POST /{live-video-id}?status=LIVE_NOW

Die Übertragung geht live, sofern die mit dem LiveVideo-Objekt (das die Übertragung darstellt) verknüpfte Stream-URL Stream-Daten empfängt. Wenn der Vorgang erfolgreich war, antwortet die API mit der ID des LiveVideo-Objekts.

Beispielanfrage

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

JSON-Beispielantwort

{
  "id": "10214937378883406"
}