Reklam kapsülü zamanlama meta verileri içeren reklamlar ekleme

Bu kılavuzda, reklam aralarının tam zamanlamasını ve süresini (yayın öncesi reklamlar dahil) getirmek için reklam kapsülü zamanlama meta verileri (ATM) yöntemi kullanılarak reklam aralarının nasıl ekleneceği açıklanmaktadır.

Videonun ortasında gösterilen reklam aralarından sonra içeriğe dönüşü yönetmek ve videodan önce gösterilen reklamları eklemek için aşağıdaki API'leri çağırmanızı öneririz:

İsteğe bağlı olarak, eşzamanlı izleyici sayısının yüksek olduğu canlı yayın etkinliklerinde, reklam arası başlamadan önce reklam kararlarını planlamak için Erken Reklam Arası Bildirimi (EABN) API'sinin çağrılması önerilir.

Ön koşullar

Başlamak için kapsül yayınlama yönlendirme Dinamik Reklam Ekleme (DAI) türü için bir canlı yayın etkinliği ayarlamanız gerekir. Aşağıdaki yöntemlerden birini seçin:

İçerik akışını alma

Kullanıcı bir canlı yayın etkinliği seçtiğinde istemci uygulaması Google Ad Manager'a bir yayın isteğinde bulunur. Uygulama, yayın yanıtında Google DAI oturum kimliğini ve meta verilerini çıkararak yayın manifesti isteğine ekler.

Aşağıdaki örnekte, bir Google DAI oturum kimliği, manifest değiştiriciye iletilir:

https://MANIFEST_MANIPULATOR_URL/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY

Video içeriği oynatma isteğini işlerken reklam eklemeye hazırlanmak için Google DAI oturum kimliğini ve CUSTOM_ASSET_KEY isteğinden gelen verileri saklayın.

Reklam kapsülü zamanlama meta verilerini alma

Reklam kapsülü zamanlamasını almak için aşağıdaki adımları uygulayın:

  1. HMAC jetonu oluşturun.
  2. HMAC jetonuyla ATM API'sini çağırın.

İmzalı bir HMAC jetonu oluşturma

İsteklerinizin kimliğini doğrulamak için aşağıdaki adımları uygulayın:

  1. Aşağıdaki parametreleri alfabetik sırayla birleştirerek ve tilde işaretiyle ~ ayırarak bir jeton dizesi oluşturun:

    Parametre Zorunlu veya isteğe bağlı Açıklama
    ad_break_id Zorunlu Reklam arasını tanımlamak için belirttiğiniz dize (ör. ad-break-1). Videodan önce gösterilen reklamlar için preroll kullanın.
    custom_asset_key Zorunlu Canlı yayın etkinliğinin özel öğe anahtarı.
    cust_params İsteğe bağlı Özel hedefleme parametreleri. Daha fazla bilgi için Akışınıza hedefleme parametreleri sağlama başlıklı makaleyi inceleyin.
    exp Zorunlu Bu jetonun geçerliliğinin sona erdiği zaman, Unix döneminden bu yana geçen toplam saniye sayısı olarak ölçülür.
    network_code Zorunlu Google Ad Manager ağ kodunuz. Daha fazla bilgi için Ad Manager hesap bilgilerini bulma başlıklı makaleyi inceleyin.
    pd Zorunlu Reklam arası süresi (milisaniye cinsinden). Videodan önce gösterilen reklamlar için Google DAI, bu parametreyi canlı yayın etkinliği ayarlarınızla geçersiz kılar.
    scte35 İsteğe bağlı Base64 kodlu SCTE-35 sinyali. Sinyalin doğru olup olmadığını doğrulayın. Yanlışsa yanıttaki X-Ad-Manager-Dai-Warning HTTP başlığına bir mesaj gönderilir ve reklam arası oluşturmak için sinyal yayılmaya devam eder. Desteklenen reklam arası işaretçileri hakkında daha fazla bilgi için HLS entegrasyonu başlıklı makaleyi inceleyin.
  2. HMAC türündeki Google DAI kimlik doğrulama anahtarınızı indirin. Daha fazla ayrıntı için DAI video akışı isteklerinin kimliğini doğrulama başlıklı makaleyi inceleyin.

  3. Jeton dizesinin SHA256 imzasını oluşturmak için indirdiğiniz HMAC anahtarını kullanın.

  4. Jeton dizesini ve oluşturulan imzayı birleştirin.

  5. Birleştirilmiş dizeye URL kodlaması uygulayın. Kodlanmış dize, Ad Pod Zamanlama Meta Verileri (ATM) API isteklerinin kimliğini doğrulamak için kullanılan imzalı HMAC jetonudur.

Aşağıdaki örnek, videodan önce gösterilen reklamlar için imzalı bir HMAC jetonu oluşturur:

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

Videonun başında gösterilen reklamlar için zamanlama meta verilerini isteyin

Aşağıdaki seçenekleri kullanarak canlı yayın etkinliğinizin yayın öncesi reklam ayarlarını doğrulayın:

Videodan önce gösterilen reklam kararı sonuçlarını almak için ATM API'ye istek gönderin.

Aşağıdaki örnekte, videodan önce gösterilen reklamlar için bir ATM isteği oluşturuluyor:

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"

Videonun ortasında gösterilen reklamlar için zamanlama meta verilerini isteme

Orta rulo reklamlar için reklam kapsülü meta verilerini almak üzere aşağıdaki adımları uygulayın:

  1. Her bir videonun ortasında gösterilen reklam arası için zamanlamayı ve süreyi içeren reklam işaretçilerini bulmak üzere canlı yayın manifestini ayrıştırın.
  2. Tam reklam grubu ve slate süresini istemek için ATM API uç noktasını çağırın. API, reklam kapsülünün karar sonuçlarını içeren bir JSON nesnesi döndürür.

Aşağıdaki örnekte, videonun ortasında gösterilen reklamlar için bir ATM isteği oluşturuluyor:

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"

İşlem başarılı olursa aşağıdaki JSON nesnesine benzer bir çıkış görürsünüz:

{
  "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
          ]
        }
      }
    }
  }
}

Reklamları içerik manifestine yerleştirme

Aşağıdaki bölümlerde, canlı yayın manifestini nasıl değiştireceğiniz ve reklam segmentlerini nasıl ekleyeceğiniz açıklanmaktadır.

Reklam arası segmentlerini belirleme ve süreksizlikler ekleme

Her varyant manifestini işlerken akışınızdaki EXT-X-CUE-IN ve EXT-X-CUE-OUT etiketlerini belirleyin. Bu etiketler, reklam arası başlangıcını ve bitişini gösterir.

İstemci video oynatıcının içerik ve reklamlar arasında geçiş yapabilmesi için EXT-X-CUE-IN ve EXT-X-CUE-OUT etiketlerini EXT-X-DISCONTINUITY öğeleriyle değiştirin.

Aşağıdaki örnek manifest, EXT-X-CUE-IN ve EXT-X-CUE-OUT etiketlerinin yerine geçer:

#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

Aşağıdaki örnekte değiştirilmiş bir manifest gösterilmektedir:

#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

Google DAI reklam segmentleri şifrelenmez. İçeriğiniz şifrelenmişse her reklam arasının ilk reklam segmentinden önce EXT-X-KEY:METHOD=NONE öğesini ekleyerek şifrelemeyi kaldırın. Reklam arasının sonunda, uygun bir EXT-X-KEY ekleyerek şifrelemeyi geri ekleyin.

Yaklaşan reklam arasının başlangıç zamanını, süresini ve dizinini takip edin.

Reklam segmenti URL'leri oluşturma

EXT-X-DISCONTINUITY etiketleri arasındaki içerik segmentlerini her reklam segmentinin URL'leriyle değiştirin. Kaç reklam segmenti ekleneceğini belirlemek için ATM API'den gelen JSON yanıtında sağlanan ads.segment_durations.values değerini kullanın.

Bir EXT-X-CUE-IN etiketi algılandığında reklam kapsülünü erken sonlandırmak için nihai reklam segmentinin URL'sine d= parametresini ekleyin. Bu parametre, istemci video oynatıcısının zaman çizelgesini etkilememek için segmenti kısaltır.

Aşağıdaki örnekte, manifeste videodan önce gösterilen reklam segmenti URL'si eklenmektedir. Reklam segmentlerinin sıfır tabanlı bir dizin kullandığını unutmayın:

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

Aşağıdaki örnekte, manifeste bir videonun ortasında gösterilen reklam segmenti URL'si eklenmektedir:

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

Aşağıdaki örnekte, manifest dosyasına reklam segmentleri eklenmektedir:

#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

Seçenek listesi segmentleri oluşturma

Reklam ile içerik arasındaki boşluğu doldurmak için seçenek listesi segmentleri ekleyin. Her bir slate segmentinin süresini belirlemek için ATM API'sinin JSON yanıtındaki slates.segment_durations.values dizisini kullanın. Reklam arasının tamamını doldurmak için segment süreleri dizisini gerektiği gibi tekrarlayın.

Aşağıdaki örnekte, bir slate segmenti oluşturulmaktadır:

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

Örnekteki slate/0, slate yineleme numarasını temsil eder. 0 ile başlayıp bu sayıyı her bir slate döngüsü için artırmanız mı yoksa tüm yinelemeler için 0 olarak tutmanız mı gerektiğini belirlemek için istemci video oynatıcınızın uyumluluğuna ve önbelleğe alma özelliğine bakın.

İçeriğe dönüşü yönetme

Reklam kapsülündeki tüm segmentleri ekledikten sonra içerik akışınıza geri dönmek için aşağıdaki yöntemlerden birini seçin:

Yöntem Açıklama İstemci video oynatıcısındaki etkiler
Seçenek listesi segmentleriyle doldurma Slate segmentlerini ekler ve slate'i döngüye alır. Süreyi doldurur ve her bir slate yinelemesi arasına EXT-X-DISCONTINUITY öğeleri ekler. Efekt yok.
Video oynatıcı, zaman çizelgesi değiştirilmeden içeriğe geri döner.
Tek bir slate segmentiyle yeniden hizalama Tek bir slate segmenti ekler. İçerik başlangıcına kadar olan süreyi doldurmak için d= parametresini kullanır. Efekt yok.
Video oynatıcı, zaman çizelgesi değiştirilmeden içeriğe geri döner.
Anında İade İçerik segmentleri ekleme Video oynatıcının zaman çizelgesi değiştirilir.
İstemci video oynatıcınız, değiştirilen zaman çizelgesini işlemelidir.

İsteğe bağlı: Reklam arası planlama

Doldurma oranınızı artırmak için reklam grubu süresi, özel hedefleme parametreleri ve SCTE-35 sinyal verileriyle birlikte Erken Reklam Arası Bildirimi (EABN) gönderin. Daha fazla bilgi için Erken reklam arası bildirimi gönderme başlıklı makaleye bakın.