Questa guida descrive come inserire interruzioni pubblicitarie utilizzando il metodo dei metadati di temporizzazione dei pod di annunci (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 dei metadati di temporizzazione dei pod di annunci (ATM): esegui query sui risultati delle decisioni relative ai pod di annunci, incluse le durate degli annunci e degli slate.
- Endpoint dei segmenti di annunci: richiedi segmenti di annunci o slate con l'opzione di terminare il pod di annunci corrente.
Facoltativamente, per gli eventi di live streaming con elevata concorrenza, ti consigliamo di chiamare Early Ad Break Notification (EABN) API per pianificare le decisioni relative agli annunci prima dell'inizio dell'interruzione pubblicitaria.
Prerequisiti
Per iniziare, devi configurare un evento di 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
LiveStreamEventService.createLiveStreamEventsmetodo. 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 stream a Google Ad Manager. Nella risposta dello stream, l'app estrae l'ID sessione DAI di Google e i metadati da includere nella richiesta del manifest dello stream.
L'esempio seguente passa un ID sessione DAI di Google 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
Quando elabori la richiesta di riproduzione dei contenuti video, memorizza l'ID sessione DAI di Google e CUSTOM_ASSET_KEY dalla richiesta per prepararti all'unione degli annunci.
Recuperare i metadati di temporizzazione dei pod di annunci
Per recuperare la temporizzazione dei 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 pre-roll per l'evento di live streaming utilizzando le seguenti opzioni:
Per recuperare i risultati delle decisioni relative agli annunci 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 dei pod di annunci per i mid-roll:
- Analizza il manifest del live streaming per trovare i marcatori di annunci che contengono la tempistica e la durata di ogni interruzione pubblicitaria mid-roll.
- Chiama l'endpoint dell'API ATM per richiedere la durata precisa del pod di annunci e dello slate. L'API restituisce un oggetto JSON con i risultati delle decisioni del pod di annunci.
L'esempio seguente invia 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"
Se l'operazione va a buon fine, vedrai 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 ti illustrano come modificare il manifest del live streaming e aggiungere i segmenti di annunci.
Identificare i segmenti di interruzione pubblicitaria e inserire le discontinuità
Quando elabori ogni manifest variante, identifica i tag EXT-X-CUE-IN e EXT-X-CUE-OUT nello stream, che indicano l'inizio e la fine di un'interruzione 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 dai contenuti agli annunci.
Il seguente 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.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
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.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
I segmenti di annunci DAI di Google non sono criptati. Se i tuoi contenuti sono criptati, rimuovi la crittografia inserendo l'elemento EXT-X-KEY:METHOD=NONE prima del primo segmento di annunci di ogni interruzione pubblicitaria. Al termine dell'interruzione pubblicitaria, aggiungi di nuovo la crittografia inserendo un elemento EXT-X-KEY appropriato.
Tieni traccia dell'ora di inizio, della durata e dell'indice dell'interruzione pubblicitaria imminente.
Creare gli URL dei segmenti di annunci
Sostituisci i segmenti di contenuti tra i tag EXT-X-DISCONTINUITY con gli URL di ogni segmento di annunci. Per determinare il numero di segmenti di annunci 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 rileva un tag EXT-X-CUE-IN, il manipolatore di manifest deve aggiungere il parametro d= all'URL del segmento di annunci finale.
Questo parametro accorcia il segmento per evitare di influire sulla sequenza temporale del video player client.
L'esempio seguente assembla un URL del segmento di annunci 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 di annunci 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 i segmenti di annunci 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
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Creare segmenti di slate
Per colmare il divario tra l'annuncio e i contenuti, inserisci i segmenti di slate.
Utilizza l'array slates.segment_durations.values della risposta JSON dell'API ATM per determinare la durata di ogni segmento di slate. 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 rileva un tag EXT-X-CUE-IN, aggiungi il parametro d= all'URL del segmento di slate finale. Questo parametro accorcia il segmento per evitare di influire sulla sequenza temporale del video player client. Il valore dei parametri d= 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 dello slate. Fai riferimento alla compatibilità e alla capacità di memorizzazione nella cache del video player client per determinare se iniziare da 0 e incrementare questo numero per ogni loop dello slate o mantenerlo a 0 per tutte le iterazioni.
Gestire il ritorno ai contenuti
Dopo che il manipolatore di manifest ha inserito tutti i segmenti del pod di annunci, deve tornare allo stream 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.
Riempimento e riallineamento: inserisci i segmenti di slate e ripeti lo slate.
Riempi la durata e inserisci gli elementi EXT-X-DISCONTINUITY tra ogni iterazione dello slate. Per l'ultimo segmento, aggiungi il parametro d= in millisecondi
in modo che corrisponda all'inizio dei contenuti.
Ritorno immediato: inserisci un singolo segmento di slate di riallineamento utilizzando
il parametro d= e poi i contenuti.
Il video player torna ai contenuti senza una sequenza temporale modificata.
L'esempio seguente crea una transizione riempiendo la durata rimanente 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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
In questo metodo, il manipolatore di manifest ripete lo slate in base alle esigenze e aggiunge il parametro URL d= solo all'ultimo segmento di slate. Questo processo si allinea con precisione all'inizio programmato dei contenuti sottostanti.
L'esempio seguente mostra come utilizzare un singolo segmento di slate con il parametro d= per mantenere accurata la sequenza temporale del player quando non riempi l'intera interruzione 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&d=2450
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Facoltativo: pianificare un'interruzione pubblicitaria
Per migliorare il tasso di riempimento, invia una notifica di interruzione pubblicitaria anticipata (EABN) con la durata del pod di annunci, i parametri di targeting personalizzati e i dati dei segnali SCTE-35. Per ulteriori dettagli, consulta la sezione Inviare notifiche di interruzione pubblicitaria anticipata.