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:
Una chiave asset personalizzata per un evento in live streaming configurato con il tipo DAI
Pod serving redirect
. Per ottenere questa chiave:Utilizza una libreria client API SOAP per chiamare il metodo
LiveStreamEventService.createLiveStreamEvents
con un oggettoLiveStreamEvent
e la proprietàdynamicAdInsertionType
impostata sul valore enumPOD_SERVING_REDIRECT
. Per tutte le librerie client, consulta Librerie client e codice di esempio.
Determina se l'SDK Interactive Media Ads (IMA) è disponibile per la tua piattaforma. Ti consigliamo di utilizzare l'SDK IMA per aumentare le entrate. Per maggiori dettagli, vedi Configurare l'SDK IMA per DAI.
Effettuare una richiesta di stream
Quando l'utente seleziona uno stream:
Invia una richiesta
POST
al metodo del servizio di live streaming. Per maggiori dettagli, vedi Metodo: stream.Trasmetti i parametri di targeting degli annunci nei formati
application/x-www-form-urlencoded
oapplication/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 }
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:
Leggi il valore
metadata_url
dalla risposta di registrazione dello stream.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 }, ... } }
Salva l'oggetto
tags
per i passaggi successivi.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:
- Filtra gli eventi per
scheme_id_uri
conurn:google:dai:2018
ohttps://aomedia.org/emsg/ID3
. 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", ... }
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
:
Recupera l'oggetto
tags
dei metadati dell'annuncio da Esegui sondaggio sui metadati dell'annuncio. L'oggettotags
è un array di oggettiTagSegment
.Utilizza l'ID evento pubblicitario completo per trovare un oggetto
TagSegment
con il tipoprogress
.Utilizza i primi 17 caratteri dell'ID evento annuncio per trovare un oggetto
TagSegment
di altri tipi.Dopo aver ottenuto
TagSegment
, utilizza la proprietàad_break_id
come chiave per trovare l'oggettoAdBreak
nell'oggettoad_breaks
dei metadati dell'annuncio.L'esempio seguente trova un oggetto
AdBreak
:{ "type":"mid", "duration":15, "ads":1 }
Utilizza i dati
TagSegment
eAdBreak
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:
Dalla risposta dello stream, aggiungi l'ID evento annuncio completo al valore
media_verification_url
.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 errore404
.
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.