Preparare il cliente al reindirizzamento della pubblicazione del pod

Questa guida illustra lo sviluppo di un'applicazione client per caricare un live streaming HLS o DASH con l'API Pod Serving e il tuo manipolatore di manifest.

Prerequisiti

Prima di continuare, devi avere:

Effettuare una richiesta di stream

Quando l'utente seleziona uno stream:

  1. Invia una richiesta POST al metodo del servizio di live streaming. Per maggiori dettagli, vedi Metodo: stream.

  2. Trasmetti i parametri di targeting degli annunci nei formati application/x-www-form-urlencoded o application/json. Questa richiesta registra una sessione di streaming con Google DAI.

    L'esempio seguente effettua una richiesta di flusso:

    Codifica del modulo

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const params = new URLSearchParams({
            cust_params: 'section=sports&page=golf,tennis'
    }).toString();
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: params
    });
    
    console.log(await response.json());
    

    Codifica JSON

    const url = `https://dai.google.com/ssai/pods/api/v1/` +
          `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`;
    
    const response = await fetch(url, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json'
            },
            body: JSON.stringify({
              cust_params: {
                section: 'sports',
                page: 'golf,tennis'
              }
            })
    });
    
    console.log(await response.json());
    

    Se l'operazione va a buon fine, viene visualizzato un output simile al seguente:

    {
    "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS",
    "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/",
    "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata",
    "session_update_url": "https://dai.google.com/linear/.../session",
    "polling_frequency": 10
    }
    
  3. Nella risposta JSON, individua l'ID sessione dello stream e memorizza altri dati per i passaggi successivi.

Metadati degli annunci con sondaggio

Per eseguire il polling dei metadati degli annunci:

  1. Leggi il valore metadata_url dalla risposta di registrazione dello stream.

  2. Invia una richiesta GET all'endpoint. Per i dettagli, vedi Metodo: metadati.

    L'esempio seguente recupera i metadati dell'annuncio:

    const response = await fetch(metadata_url);
    console.log(await response.json());
    

    Se l'operazione ha esito positivo, ricevi la risposta PodMetadata per le interruzioni pubblicitarie attuali e future:

    {
      "tags":{
        "google_5555555555":{
          "ad":"0000229834_ad1",
          "ad_break_id":"0000229834",
          "type":"firstquartile"
        },
        "google_1234567890123456789":{
          "ad":"0000229834_ad1",
          "ad_break_id":"0000229834",
          "type":"progress"
        },
        ...
      },
      "ads":{
        "0000229834_ad1":{
          "ad_break_id":"0000229834",
          "position":1,
          "duration":15,
          "clickthrough_url":"https://.../",
          ...
        },
              ...
      },
      "ad_breaks":{
        "0000229834":{
          "type":"mid",
          "duration":15,
          "ads":1
        },
        ...
      }
    }
    
  3. Salva l'oggetto tags per i passaggi successivi.

  4. Imposta un timer utilizzando il valore polling_frequency per richiedere regolarmente i metadati per tutte le interruzioni pubblicitarie successive.

Caricare lo stream nel video player

Dopo aver ottenuto l'ID sessione dalla risposta di registrazione, passalo al manipolatore del manifest o crea un URL del manifest per caricare lo stream in un video player.

Per trasmettere l'ID sessione, consulta la documentazione del manipolatore del manifest. Se sviluppi un manipolatore del manifest, consulta Manipolatore del manifest per livestream.

L'esempio seguente assembla un URL del manifest:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

Quando il lettore è pronto, inizia la riproduzione.

Ascolta gli eventi degli annunci

Controlla il formato del contenitore dello stream per i metadati temporizzati:

  • Gli stream HLS con contenitori Transport Stream (TS) utilizzano tag ID3 temporizzati per trasportare metadati temporizzati. Per maggiori dettagli, consulta Informazioni su Common Media Application Format con HTTP Live Streaming (HLS).

  • Gli stream DASH utilizzano gli elementi EventStream per specificare gli eventi nel manifest.

  • Gli stream DASH utilizzano gli elementi InbandEventStream quando i segmenti contengono caselle di messaggi evento (emsg) per i dati utili, inclusi i tag ID3. Per i dettagli, consulta InbandEventStream.

  • Gli stream CMAF, inclusi DASH e HLS, utilizzano caselle emsg contenenti tag ID3.

Per recuperare i tag ID3 dal tuo stream, consulta la guida del tuo video player. Per i dettagli, consulta la guida Gestire i metadati temporizzati.

Per recuperare l'ID evento annuncio dai tag ID3:

  1. Filtra gli eventi per scheme_id_uri con urn:google:dai:2018 o https://aomedia.org/emsg/ID3.
  2. Estrai l'array di byte dal campo message_data.

    Il seguente esempio decodifica i dati emsg in JSON:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1234567890123456789",
      ...
    }
    
  3. Filtra i tag ID3 con il formato TXXXgoogle_{ad_event_ID}:

    TXXXgoogle_1234567890123456789
    

Mostra i dati sugli eventi degli annunci

Per trovare l'oggetto TagSegment:

  1. Recupera l'oggetto tags dei metadati dell'annuncio da Esegui sondaggio sui metadati dell'annuncio. L'oggetto tags è un array di oggetti TagSegment.

  2. Utilizza l'ID evento pubblicitario completo per trovare un oggetto TagSegment con il tipo progress.

  3. Utilizza i primi 17 caratteri dell'ID evento annuncio per trovare un oggetto TagSegment di altri tipi.

  4. Dopo aver ottenuto TagSegment, utilizza la proprietà ad_break_id come chiave per trovare l'oggetto AdBreak nell'oggetto ad_breaks dei metadati dell'annuncio.

    L'esempio seguente trova un oggetto AdBreak:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. Utilizza i dati TagSegment e AdBreak per mostrare informazioni sulla posizione dell'annuncio nell'interruzione pubblicitaria. Ad esempio: Ad 1 of 3.

Inviare ping di verifica dei contenuti multimediali

Per ogni evento annuncio, ad eccezione del tipo progress, invia un ping di verifica media. Google DAI scarta gli eventi progress e l'invio frequente di questi eventi potrebbe influire sul rendimento della tua app.

Per generare l'URL di verifica media completo di un evento annuncio, procedi nel seguente modo:

  1. Dalla risposta dello stream, aggiungi l'ID evento annuncio completo al valore media_verification_url.

  2. Invia una richiesta GET con l'URL completo:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_5555555555123456789`;
    
    const response = await fetch(completeUrl);
    

    In caso di esito positivo, ricevi una risposta con lo stato del codice 202. In caso contrario, riceverai un codice di errore 404.

Puoi utilizzare il Monitoraggio attività di streaming (Stream Activity Monitor, SAM) per esaminare un log cronologico di tutti gli eventi pubblicitari. Per maggiori dettagli, vedi Monitorare e risolvere i problemi di un live streaming.