Usi avanzati

Targetizzazione del pubblico

Includi o escludi segmenti di pubblico specifici per la visualizzazione del tuo video in diretta.

Creare un pubblico di destinazione

Nodo

Prima di iniziare

Per i video in diretta su una Pagina, hai bisogno di:

Per i video in diretta in un gruppo, hai bisogno di:

Esempi

Invia una richiesta POST /id, dove id indica il live-video-id, e imposta il campo targeting e i relativi parametri.

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();

Esempio di risposta

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

Ottenere informazioni sul pubblico di destinazione

Nodo

Prima di iniziare

Per i video in diretta su una Pagina, hai bisogno di:

Per i video in diretta in un gruppo, hai bisogno di:

  • Token d'accesso utente richiesto da un amministratore del gruppo

Esempi

Invia una richiesta GET /id, dove id indica il live-video-id, con il campo 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"

Esempio di risposta

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

Trasmissione in diretta con precisione al fotogramma

L'inizio dello streaming di una trasmissione in diretta potrebbe subire un lieve ritardo dovuto al processo di decodifica dei dati di streaming iniziali e all'elaborazione di eventuali richieste API associate. Questo può rendere difficile per chi esegue lo streaming capire il momento esatto in cui inizia la trasmissione in diretta. Per evitare questo problema, gli oggetti LiveVideo possono essere impostati in modo da accettare i dati di streaming, ma senza avviare la trasmissione in diretta fino a quando non viene rilevato un messaggio RTMP di trasmissione in diretta nei dati di streaming stessi. Questo consente a chiunque sia in grado di visualizzare in anteprima una trasmissione in diretta di vederla, permettendo al contempo al codificatore per lo streaming di controllare con precisione sia il momento di inizio dello streaming della trasmissione per il pubblico sia il primo fotogramma visualizzato.

Per consentire la trasmissione in diretta con precisione al fotogramma, crea innanzitutto un oggetto LiveVideo come faresti normalmente e impostane lo stato su ANTEPRIMA. Una volta creato, interroga l'oggetto LiveVideo e richiedi il campo secure_stream_url con i seguenti campi nidificati:

secure_stream_url.inband_go_live(require_inband_signal)

In questo modo sarà abilitata la trasmissione in diretta con precisione al fotogramma sull'oggetto LiveVideo e l'API risponderà con un nuovo URL di streaming sicuro su cui trasmettere in diretta. Puoi ignorare l'URL di streaming sicuro che hai ricevuto al momento della creazione dell'oggetto LiveVideo.

Lo streaming della trasmissione in diretta inizierà e sarà visibile al pubblico dopo (1) l'impostazione dello stato della trasmissione su IN DIRETTA (tramite una chiamata all'API Graph o una pubblicazione da parte di un utente da Live Producer) e (2) l'invio del messaggio RTMP di trasmissione in diretta da parte del codificatore.

Struttura del messaggio RTMP di trasmissione in diretta

Un pacchetto AMF0 (tipo 0x12) contenente:

  • la stringa onGoLive
  • un array ECMA (tipo 0x08) contenente una singola coppia codice-valore:
    • Codice: stringa (tipo 0x02) timestamp
    • Valore: numero (tipo 0x00): la marca temporale del primo fotogramma del video che sarà visibile pubblicamente

Per maggiori informazioni, fai riferimento alle specifiche RTMP e AMF0.

Esempio di richiesta

Esempio di richiesta per abilitare la trasmissione in diretta con precisione al fotogramma su un 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..."

Esempio di risposta

URL di streaming sicuro per un oggetto LiveVideo con trasmissione in diretta con precisione al fotogramma abilitata.

{
  "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...",
  "id": "LIVE_VIDEO_ID"
}

Finestra di dialogo Trasmetti in diretta

A partire dal 25 maggio 2021, la finestra di dialogo Trasmetti in diretta diventerà obsoleta. Visita il nostro post sul blog per maggiori informazioni.

Abbiamo creato un plug-in per rendere il processo di integrazione con API Live il più semplice possibile, consentendoti di effettuare l'autenticazione con Facebook, visualizzare l'anteprima della tua diretta streaming e scriverne la descrizione mediante una finestra pop-up prima di iniziare la trasmissione. Questa finestra di dialogo è adatta per coloro che trasmettono in streaming sul lato client. Chi usa integrazioni backend dovrebbe continuare a usare direttamente l'API.

Requisiti

Per inizializzare una finestra pop-up con controlli che determinino dove indirizzare la tua risposta POST, inserisci il seguente codice.

<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>
Parametri Valore Descrizione

display

popup, iframe

Il modo in cui la finestra di dialogo viene aperta sulla tua pagina web.

phase

create, publish

La finestra di dialogo nella fase di creazione ti consente di acquisire l'URL dello streaming per caricare il video; la finestra di dialogo nella fase di pubblicazione fornirà l'anteprima e il pulsante Trasmetti in diretta. required

broadcast_data

La risposta object restituita dall'API o dalla fase create.

Questo parametro è required per la fase publish.

Nella finestra pop-up della fase Crea, puoi scegliere la destinazione della tua diretta streaming, che può essere qualsiasi pagina o gruppo tu gestisca. La risposta POST includerà i campi stream_url e secure_stream_url. Entrambi possono essere suddivisi in un URL del server e in una chiave per lo streaming.

L'URL del server è la prima metà dello stream_url: rtmp://rtmp-api.facebook.com:80/rtmp/

La chiave per lo streaming è la seconda metà dello stream_url: 10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

Campo della rispostaFaseDescrizione

id

create, publish

L'ID del video trasmesso in diretta.

stream_url

create

Un URL RTMP contenente il server e la chiave dello streaming usati per caricare la diretta streaming.

secure_stream_url

create

Un URL RTMPS, l'URL dello streaming con il protocollo di sicurezza.

status

publish

Il valore della stringa indicante lo stato della trasmissione in diretta.

Nel nostro snippet di codice, abbiamo una chiamata alert con lo stream_url. Il tuo client dovrebbe avviare la trasmissione in streaming tramite stream_url. Non appena inizierà lo streaming, noterai che verrà visualizzata un'anteprima della trasmissione in diretta nella finestra pop-up della fase Pubblica. La finestra di dialogo consente agli utenti di scegliere le impostazioni sulla privacy senza modificare il parametro privacy della richiesta, nonché di impostare descrizione, titolo e tag sull'argomento del video in diretta.

Nota: se la finestra pop-up Pubblica è Offline, assicurati che il tuo firewall non stia bloccando il protocollo RTMP e che eventuali software per il blocco della pubblicità nel tuo browser siano disattivati.

Quando clicchi su Trasmetti in diretta, la finestra di dialogo si chiude e in pochi secondi la diretta streaming viene trasmessa sulla pagina o sul gruppo, a seconda della destinazione scelta.

I metadati vengono inseriti nel primo fotogramma di un video iin diretta con tempi di inizio accurati per fotogramma. I codificatori possono implementare un countdown per indicare agli editori l'esatto inizio del video. Puoi anche avviare e arrestare il video dall'interfaccia di Facebook.