Panduan ini menjelaskan cara menyisipkan jeda iklan menggunakan metode Metadata Waktu Pod Iklan (ATM) untuk mengambil waktu dan durasi yang tepat untuk jeda iklan, termasuk iklan pra-putar.
Untuk menyisipkan iklan pre-roll dan mengelola kembali ke konten setelah jeda iklan mid-roll, sebaiknya panggil API berikut:
- API Metadata Waktu Pod Iklan (ATM): mengueri hasil keputusan pod iklan, termasuk durasi iklan dan slate.
- Endpoint segmen iklan: meminta segmen iklan atau slate dengan opsi untuk menghentikan pod iklan saat ini.
Secara opsional, untuk acara live stream dengan konkurensi tinggi, sebaiknya panggil Early Ad Break Notification (EABN) API untuk menjadwalkan keputusan iklan sebelum jeda iklan dimulai.
Prasyarat
Untuk memulai, Anda memerlukan penyiapan acara live stream untuk jenis Penyisipan Iklan Dinamis (DAI) Pengalihan penayangan pod. Pilih salah satu metode berikut:
- UI Ad Manager: Siapkan livestream untuk DAI.
- Ad Manager API: Gunakan library klien (opsi yang tersedia) untuk memanggil metode
LiveStreamEventService.createLiveStreamEvents
. Tetapkan parameterLiveStreamEvent.dynamicAdInsertionType
kePOD_SERVING_REDIRECT
.
Mengambil aliran data konten
Saat pengguna memilih acara live stream, aplikasi klien akan membuat permintaan streaming ke Google Ad Manager. Dalam respons streaming, aplikasi mengekstrak ID dan metadata sesi Google DAI untuk disertakan dalam permintaan manifes streaming.
Contoh berikut meneruskan ID sesi DAI Google ke manipulator manifes:
https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY
Saat memproses permintaan pemutaran konten video, simpan ID sesi Google DAI dan CUSTOM_ASSET_KEY dari permintaan untuk bersiap melakukan penyambungan iklan.
Mengambil metadata pengaturan waktu pod iklan
Untuk mengambil pengaturan waktu pod iklan, ikuti langkah-langkah berikut:
- Buat token HMAC.
- Panggil ATM API dengan token HMAC.
Membuat token HMAC bertanda tangan
Untuk mengautentikasi permintaan Anda, ikuti langkah-langkah berikut:
Buat string token dengan menggabungkan parameter berikut dalam urutan abjad, yang dipisahkan dengan tilde
~
:Parameter Wajib diisi atau opsional Deskripsi ad_break_id
Wajib String yang Anda tentukan untuk mengidentifikasi jeda iklan, misalnya ad-break-1
. Untuk iklan pre-roll, gunakanpreroll
.custom_asset_key
Wajib Kunci aset kustom acara livestream. cust_params
Opsional Parameter penargetan kustom. Untuk mengetahui detail selengkapnya, lihat Menyediakan parameter penargetan ke streaming Anda. exp
Wajib Waktu saat token ini habis masa berlakunya, diukur sebagai total jumlah detik yang telah berlalu sejak epoch Unix. network_code
Wajib Kode jaringan Google Ad Manager Anda. Untuk mengetahui detail selengkapnya, lihat Menemukan informasi akun Ad Manager. pd
Wajib Durasi jeda iklan dalam milidetik. Untuk iklan pre-roll, Google DAI mengganti parameter ini dengan setelan acara livestream Anda. scte35
Opsional Sinyal SCTE-35 berenkode base64. Pastikan sinyalnya sudah benar. Jika salah, pesan akan dikirim ke header HTTP X-Ad-Manager-Dai-Warning
dalam respons dan sinyal tetap disebarkan untuk membuat jeda iklan. Untuk mengetahui detail selengkapnya tentang penanda jeda iklan yang didukung, lihat integrasi HLS.Download kunci autentikasi DAI Google Anda yang berjenis HMAC. Untuk mengetahui detail selengkapnya, lihat Mengautentikasi permintaan streaming video DAI.
Gunakan kunci HMAC yang Anda download untuk membuat tanda tangan SHA256 string token.
Gabungkan string token dan tanda tangan yang dibuat.
Terapkan encoding URL ke string yang digabungkan. String yang dienkode adalah token HMAC bertanda tangan untuk mengautentikasi permintaan Ad pod Timing Metadata (ATM) API.
Contoh berikut menghasilkan token HMAC bertanda tangan untuk iklan pre-roll:
custom_asset_key="CUSTOM_ASSET_KEY"
exp="1750700000" # Expired on Mon Jun 23 2025 13:33:20 GMT-0400 (Eastern Daylight Time)
network_code="NETWORK_CODE"
ad_break_id="preroll"
pd="0" # Pod duration value is overridden by the livestream event settings.
# The HMAC authentication key associated with your livestream event in Google Ad Manager.
secret_key="24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C"
# Concatenate the parameters, keep the parameters alphabetically ordered by name.
token_string="ad_break_id=${ad_break_id}~custom_asset_key=${custom_asset_key}~exp=${exp}~network_code=${network_code}~pd=${pd}"
# Calculate the SHA256 signature of the token_string.
hmac_signature=$(echo -n "$token_string" | openssl dgst -sha256 -hmac "$secret_key" | awk '{print $2}')
# Concatenate the token string and the signature.
signed_token="${token_string}~hmac=${hmac_signature}"
url_encode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
# Apply URL encoding to the concatenated string.
url_encoded_signed_token=$(url_encode "$signed_token")
echo "Signed HMAC token:"
echo "${url_encoded_signed_token}"
# Example output:
# ad_break_id%3Dpreroll~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D21775744923~pd%3D180000~pod_id%3D5~hmac%3D24E96382584C328087546B0E8454F26158564E8466FD2BE3D8A996B38445876C
Meminta metadata pengaturan waktu untuk iklan pre-roll
Verifikasi setelan pra-putar untuk acara livestream Anda menggunakan opsi berikut:
Untuk mengambil hasil keputusan iklan pre-roll, buat permintaan ke ATM API.
Contoh berikut membuat permintaan ATM untuk iklan 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"
Meminta metadata pengaturan waktu untuk iklan mid-roll
Untuk mengambil metadata pod iklan untuk mid-roll, ikuti langkah-langkah berikut:
- Parse manifes livestream untuk menemukan penanda iklan yang berisi waktu dan durasi untuk setiap jeda iklan mid-roll.
- Panggil endpoint ATM API untuk meminta durasi pod iklan dan slate yang tepat. API menampilkan objek JSON dengan hasil keputusan pod iklan.
Contoh berikut membuat permintaan ATM untuk iklan 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"
Jika berhasil, Anda akan melihat output yang mirip dengan objek JSON berikut:
{
"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
]
}
}
}
}
}
Menyambungkan iklan ke manifes konten
Bagian berikut akan memandu Anda cara mengubah manifes livestream dan menambahkan segmen iklan.
Mengidentifikasi segmen jeda iklan dan menyisipkan diskontinuitas
Saat memproses setiap manifes varian, identifikasi tag EXT-X-CUE-IN
dan
EXT-X-CUE-OUT
dalam aliran Anda, yang menunjukkan awal dan akhir jeda
iklan.
Ganti tag EXT-X-CUE-IN
dan EXT-X-CUE-OUT
dengan elemen
EXT-X-DISCONTINUITY
agar pemutar video klien dapat beralih antara
konten dan iklan.
Contoh manifes berikut menggantikan tag EXT-X-CUE-IN
dan 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:15.000
#EXTINF:5.000,
contentorigin.com/3.ts
#EXTINF:5.000,
contentorigin.com/4.ts
#EXTINF:5.000,
contentorigin.com/5.ts
#EXT-X-CUE-IN
#EXTINF:5.000,
contentorigin.com/6.ts
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Contoh berikut menunjukkan manifes yang diganti:
#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/6.mp4
#EXTINF:5.000,
contentorigin.com/7.mp4
#EXTINF:5.000,
contentorigin.com/8.mp4
Segmen iklan DAI Google tidak dienkripsi. Jika konten Anda dienkripsi, hapus
enkripsi dengan menyisipkan elemen EXT-X-KEY:METHOD=NONE
sebelum segmen iklan
pertama dari setiap jeda iklan. Di akhir jeda iklan, tambahkan kembali enkripsi dengan
menyisipkan EXT-X-KEY
yang sesuai.
Melacak waktu mulai, durasi, dan indeks jeda iklan mendatang.
Membangun URL segmen iklan
Ganti segmen konten di antara tag EXT-X-DISCONTINUITY
dengan URL untuk setiap segmen iklan. Untuk menentukan jumlah segmen iklan yang akan disisipkan, gunakan
ads.segment_durations.values
yang diberikan dalam respons JSON dari ATM API.
Untuk mengakhiri pod iklan lebih awal saat mendeteksi tag EXT-X-CUE-IN
, tambahkan parameter d=
ke URL segmen iklan akhir. Parameter ini memperpendek
segmen untuk menghindari pengaruh pada linimasa pemutar video klien.
Contoh berikut merakit URL segmen iklan pra-putar ke manifes. Perhatikan bahwa segmen iklan menggunakan indeks berbasis nol:
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
Contoh berikut merakit URL segmen iklan mid-roll ke manifes:
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
Contoh berikut menyisipkan segmen iklan ke manifes:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.00,
contentorigin.com/1.ts
#EXTINF:5.00,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.00,
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.00,
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.00,
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:5.00,
contentorigin.com/6.mp4
#EXTINF:5.00,
contentorigin.com/7.mp4
#EXTINF:5.00,
contentorigin.com/8.mp4
Membuat segmen layar pemblokir
Untuk mengisi kesenjangan antara iklan dan konten, sisipkan segmen slate.
Gunakan array slates.segment_durations.values
dari respons JSON ATM API
untuk menentukan durasi setiap segmen slate. Ulangi urutan durasi segmen
sesuai kebutuhan untuk mengisi seluruh jeda iklan.
Contoh berikut merakit segmen saran:
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
dalam contoh mewakili nomor iterasi slate. Lihat kompatibilitas dan kemampuan caching pemutar video klien Anda untuk menentukan apakah akan memulai dari 0
dan menambah angka ini untuk setiap loop slate, atau mempertahankannya di 0
untuk semua iterasi.
Mengelola kembali ke konten
Setelah Anda menyisipkan semua segmen dari pod iklan, pilih salah satu metode berikut untuk kembali ke aliran konten Anda:
Metode | Deskripsi | Efek pada pemutar video klien |
---|---|---|
Isi dengan segmen slate | Menyisipkan segmen papan tulis dan mengulang papan tulis. Mengisi durasi dan menyisipkan elemen EXT-X-DISCONTINUITY di antara setiap iterasi slate. |
Tidak ada efek. Pemutar video akan kembali ke konten tanpa mengubah linimasa. |
Menyelaraskan ulang dengan segmen papan tulis tunggal | Menyisipkan satu segmen papan tulis. Menggunakan parameter d= untuk mengisi durasi hingga konten dimulai. |
Tidak ada efek. Pemutar video akan kembali ke konten tanpa mengubah linimasa. |
Pengembalian Langsung | Menyisipkan segmen konten. | Linimasa pemutar video diubah. Pemutar video klien Anda harus menangani linimasa yang diubah. |
Opsional: Jadwalkan jeda iklan
Untuk meningkatkan rasio pengisian, kirim Early Ad Break Notification (EABN) dengan durasi pod iklan, parameter penargetan kustom, dan data sinyal SCTE-35. Untuk mengetahui detail selengkapnya, lihat Mengirim notifikasi jeda iklan awal.