Questa guida descrive come inserire interruzioni pubblicitarie utilizzando il metodo dei metadati di temporizzazione del pod pubblicitario (ATM) per recuperare la tempistica e la durata precise delle interruzioni pubblicitarie, inclusi gli annunci pre-roll.
Per inserire annunci pre-roll e gestire il ritorno ai contenuti dopo le interruzioni pubblicitarie mid-roll, ti consigliamo di chiamare le seguenti API:
- API Ad pod Timing Metadata (ATM): interroga i risultati della decisione del pod di annunci, incluse le durate degli annunci e delle schermate.
- Endpoint del segmento dell'annuncio: richiedi segmenti di annunci o slate con la possibilità di terminare il pod annuncio corrente.
Se vuoi, per gli eventi di live streaming con un'elevata concorrenza, ti consigliamo di chiamare l'API Early Ad Break Notification (EABN) per pianificare le decisioni sugli annunci prima dell'inizio dell'interruzione pubblicitaria.
Prerequisiti
Per iniziare, devi configurare un evento in live streaming per il tipo di inserimento di annunci dinamici (DAI) reindirizzamento della pubblicazione di pod. Scegli uno dei seguenti metodi:
- UI di Ad Manager: configura un live streaming per DAI.
- API Ad Manager:utilizza una libreria client (opzioni
disponibili) per chiamare il metodo
LiveStreamEventService.createLiveStreamEvents. Imposta il parametroLiveStreamEvent.dynamicAdInsertionTypesuPOD_SERVING_REDIRECT.
Recuperare lo stream di contenuti
Quando un utente seleziona un evento di live streaming, l'app client invia una richiesta di streaming a Google Ad Manager. Nella risposta del flusso, l'app estrae l'ID sessione Google DAI e i metadati da includere nella richiesta del manifest del flusso.
L'esempio seguente trasmette un ID sessione Google DAI a un manipolatore di manifest:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
Durante l'elaborazione della richiesta di riproduzione dei contenuti video, memorizza l'ID sessione DAI di Google e CUSTOM_ASSET_KEY dalla richiesta per prepararti all'inserimento degli annunci.
Recuperare i metadati di sincronizzazione del pod di annunci
Per recuperare la tempistica del pod di annunci:
- Genera un token HMAC.
- Chiama l'API ATM con il token HMAC.
Richiedere i metadati di temporizzazione per gli annunci pre-roll
Verifica le impostazioni del pre-roll per il tuo evento live streaming utilizzando le seguenti opzioni:
Per recuperare i risultati della decisione relativa all'annuncio pre-roll, invia una richiesta all'API ATM.
L'esempio seguente invia una richiesta ATM per gli annunci pre-roll:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=preroll&auth-token=your_signed_HMAC_token"
Richiedere i metadati di temporizzazione per gli annunci mid-roll
Per recuperare i metadati del pod di annunci per i mid-roll:
- Analizza il manifest del live streaming per trovare i marcatori pubblicitari che contengono la tempistica e la durata di ogni interruzione pubblicitaria mid-roll.
- Chiama l'endpoint dell'API ATM per richiedere la durata esatta del pod di annunci e della schermata. L'API restituisce un oggetto JSON con i risultati della decisione del pod di annunci.
L'esempio seguente esegue una richiesta ATM per gli annunci mid-roll:
curl "https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/pod.json?stream_id=SESSION_ID&ad_break_id=AD_BREAK_ID&pd=AD_BREAK_DURATION&auth-token=your_signed_HMAC_token"
In caso di esito positivo, viene visualizzato un output simile al seguente oggetto JSON:
{
"status": "final",
"ads": [
{
"duration_ms": 5046,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5045
]
}
}
}
}
],
"slate": {
"duration_ms": 0,
"variants": {
"devrel1428000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
},
"devrel1928000": {
"segment_extension": "ts",
"segment_durations": {
"timescale": 1000,
"values": [
5005,
...
5046
]
}
}
}
}
}
Unire gli annunci nel manifest dei contenuti
Le sezioni seguenti illustrano come modificare il manifest del live streaming e aggiungere i segmenti pubblicitari.
Identificare i segmenti di interruzione pubblicitaria e inserire le discontinuità
Durante l'elaborazione di ogni manifest delle varianti, identifica i tag EXT-X-CUE-IN e
EXT-X-CUE-OUT nel flusso, che indicano l'inizio e la fine di una pausa
pubblicitaria.
Sostituisci i tag EXT-X-CUE-IN e EXT-X-CUE-OUT con gli elementi
EXT-X-DISCONTINUITY per consentire al video player client di passare da
contenuti e annunci.
Il seguente file manifest di esempio sostituisce i tag EXT-X-CUE-IN e EXT-X-CUE-OUT:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:17.450
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXTINF:2.450,
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
L'esempio seguente mostra un manifest sostituito:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXTINF:5.000,
#EXT-X-DISCONTINUITY
{... Insert ad segments here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
I segmenti degli annunci DAI di Google non sono criptati. Se i tuoi contenuti sono criptati, rimuovi
la criptografia inserendo l'elemento EXT-X-KEY:METHOD=NONE prima del primo segmento
pubblicitario di ogni interruzione pubblicitaria. Al termine dell'interruzione pubblicitaria, aggiungi di nuovo la crittografia
inserendo un EXT-X-KEY appropriato.
Tieni traccia dell'ora di inizio, della durata e dell'indice della prossima interruzione pubblicitaria.
Crea URL di segmenti pubblicitari
Sostituisci i segmenti di contenuti tra i tag EXT-X-DISCONTINUITY con gli URL
per ogni segmento di annunci. Per determinare il numero di segmenti pubblicitari da inserire, utilizza
ads.segment_durations.values fornito nella risposta JSON dell'API ATM.
Per tornare ai contenuti prima del completamento del pod di annunci, ad esempio quando viene rilevato un tag EXT-X-CUE-IN, il manipolatore del manifest deve aggiungere il parametro sd= all'URL del segmento annuncio finale.
Questo parametro accorcia il segmento per evitare di influire sulla cronologia del video player del client.
L'esempio seguente assembla un URL di segmento pubblicitario pre-roll nel manifest. Tieni presente che i segmenti di annunci utilizzano un indice basato su zero:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/preroll/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
L'esempio seguente assembla un URL del segmento pubblicitario mid-roll nel manifest:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
L'esempio seguente inserisce segmenti pubblicitari nel manifest:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/3.ts?stream_id=SESSION_ID&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Creare segmenti di slate
Per colmare il divario tra l'annuncio e i contenuti, inserisci segmenti di slate.
Utilizza l'array slates.segment_durations.values della risposta JSON dell'API ATM
per determinare la durata di ogni segmento della scheda. Ripeti la sequenza delle durate dei segmenti
in base alle esigenze per riempire l'intera interruzione pubblicitaria.
Per tornare ai contenuti prima del completamento del pod di annunci, ad esempio quando viene rilevato un tag EXT-X-CUE-IN, aggiungi il parametro sd= all'URL del segmento finale della schermata. Questo parametro accorcia il segmento per evitare di influire sulla cronologia del video
player del client. Il valore del parametro sd= deve essere un numero intero,
che rappresenta la durata in millisecondi per accorciare il segmento.
L'esempio seguente assembla un segmento di slate:
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
slate/0 nell'esempio rappresenta il numero di iterazione della scheda. Fai riferimento
alla compatibilità e alla funzionalità di memorizzazione nella cache del video player del client per determinare
se iniziare da 0 e incrementare questo numero per ogni ciclo della lavagna,
o mantenerlo a 0 per tutte le iterazioni.
Gestire il ritorno ai contenuti
Dopo che il manipolatore del manifest ha inserito tutti i segmenti del pod pubblicitario, deve tornare al flusso di contenuti. Per tornare allo stream di contenuti, scegli uno dei seguenti metodi. Ogni metodo richiede un segmento di riallineamento finale per mantenere accurata la sequenza temporale dello stream.
Riempi e riallinea:inserisci i segmenti della lavagna e crea un loop.
Compila la durata e inserisci gli elementi EXT-X-DISCONTINUITY tra ogni iterazione
della scheda. Per l'ultimo segmento, aggiungi il parametro sd= in millisecondi
in modo che corrisponda all'inizio dei contenuti.
Ritorno immediato:inserisci un singolo segmento di riallineamento utilizzando
il parametro sd= e seguendo con i contenuti.
Il video player torna ai contenuti senza una timeline modificata.
L'esempio seguente crea una transizione riempiendo il resto della durata dell'interruzione pubblicitaria con segmenti di slate.
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
Con questo metodo, il manipolatore del manifest
esegue il loop della slide come necessario e aggiunge il parametro URL sd= solo
all'ultimo segmento della slide. Questa procedura è perfettamente allineata all'inizio
programmato dei contenuti sottostanti.
L'esempio seguente mostra come utilizzare un singolo segmento di slate con il parametro sd=
per mantenere accurata la cronologia del player quando non
riempi l'intera pausa rimanente con slate in loop.
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.000,
contentorigin.com/1.ts
#EXTINF:5.000,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/1.ts?stream_id=SESSION_ID
#EXTINF:5.000,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/ad/0/profile/ENCODING_PROFILE/2.ts?stream_id=SESSION_ID
#EXT-X-DISCONTINUITY
#EXTINF:2.450,
https://dai.google.com/linear/pods/v1/adv/network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/ad_break_id/AD_BREAK_ID/slate/0/profile/ENCODING_PROFILE/0.ts?stream_id=SESSION_ID&sd=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.ts
#EXTINF:5.000,
contentorigin.com/8.ts
(Facoltativo) Pianificare un'interruzione pubblicitaria
Per migliorare il tasso di riempimento, invia una notifica di interruzione pubblicitaria anticipata (EABN) con la durata del pod pubblicitario, i parametri di targeting personalizzato e i dati dei segnali SCTE-35. Per maggiori dettagli, vedi Inviare notifiche di interruzione pubblicitaria anticipata.