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.createLiveStreamEventscon un oggettoLiveStreamEvente la proprietàdynamicAdInsertionTypeimpostata 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
POSTal 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-urlencodedoapplication/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_urldalla risposta di registrazione dello stream.Invia una richiesta
GETall'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
tagsper i passaggi successivi.Imposta un timer utilizzando il valore
polling_frequencyper 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
EventStreamper specificare gli eventi nel manifest.Gli stream DASH utilizzano gli elementi
InbandEventStreamquando 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
emsgcontenenti 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_uriconurn:google:dai:2018ohttps://aomedia.org/emsg/ID3. Estrai l'array di byte dal campo
message_data.Il seguente esempio decodifica i dati
emsgin 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
tagsdei 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
TagSegmentcon il tipoprogress.Utilizza i primi 17 caratteri dell'ID evento annuncio per trovare un oggetto
TagSegmentdi altri tipi.Dopo aver ottenuto
TagSegment, utilizza la proprietàad_break_idcome chiave per trovare l'oggettoAdBreaknell'oggettoad_breaksdei metadati dell'annuncio.L'esempio seguente trova un oggetto
AdBreak:{ "type":"mid", "duration":15, "ads":1 }Utilizza i dati
TagSegmenteAdBreakper 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
GETcon 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.