Müşteriyi kapsül yayınlama yönlendirmesine hazırlama

Bu kılavuzda, kapsül yayınlama API'si ve manifest düzenleyicinizle HLS veya DASH canlı yayını yüklemek için bir istemci uygulaması geliştirme konusu ele alınmaktadır.

Ön koşullar

Devam etmeden önce aşağıdakilere sahip olmanız gerekir:

Akış isteğinde bulunma

Kullanıcınız bir yayın seçtiğinde aşağıdakileri yapın:

  1. Canlı yayın hizmeti yöntemine POST isteğinde bulunun. Ayrıntılar için Yöntem: stream başlıklı makaleyi inceleyin.

  2. Reklam hedefleme parametrelerini application/x-www-form-urlencoded veya application/json biçimlerinde iletin. Bu istek, Google DAI ile bir akış oturumunu kaydeder.

    Aşağıdaki örnekte bir akış isteği oluşturuluyor:

    Form kodlaması

    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());
    

    JSON kodlama

    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());
    

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

    {
    "stream_id": "c4a5dad5-aaa8-4550-8acb-7cda3cdb21bb: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
    }
    
  3. JSON yanıtında akış oturumu kimliğini bulun ve sonraki adımlar için diğer verileri saklayın.

Anket reklamı meta verileri

Reklam meta verilerini yoklamak için aşağıdakileri yapın:

  1. Yayın kaydı yanıtından metadata_url değerini okuyun.

  2. metadata_url uç noktasına ilk GET isteği gönderin.

    • delta_token sorgu parametresini atlayın. Bu işlem, sunucunun akışın dijital video kaydedici (DVR) penceresi için tam meta verileri döndürmesine olanak tanır. DVR aralığı, izleyicinin geri sarıp oynatabileceği yayın zaman aralığını içerir. Yanıtta bir next_delta_token alanı var.
  3. Bant genişliğini optimize etmek için en son yanıttan next_delta_token değerini saklayın.

  4. Bir sonraki isteğinizde bu değeri delta_token sorgu parametresi olarak gönderin. Sunucu, yalnızca jeton oluşturulduktan sonra değişen meta verileri döndürür. Her zaman aldığınız en son jetonu gönderin. Jetonu ayrıştırmaya, değiştirmeye veya oluşturmaya çalışmayın. Ayrıntılar için Yöntem: meta veri başlıklı makaleyi inceleyin.

    Aşağıdaki örnekte reklam meta verileri getirilmektedir:

    // Initial request (returns full metadata and next_delta_token)
    let response = await fetch(metadata_url);
    let metadata = await response.json();
    let deltaToken = metadata.next_delta_token;
    
    // Subsequent request (returns only changes since deltaToken)
    if (deltaToken) {
      const url = new URL(metadata_url);
      url.searchParams.append('delta_token', deltaToken);
      response = await fetch(url.toString());
      const deltaMetadata = await response.json();
      // Merge deltaMetadata into your local cache
      mergeMetadata(metadata, deltaMetadata);
      deltaToken = deltaMetadata.next_delta_token;
    }
    

    Başarılı olursa PodMetadata yanıtını alırsınız. delta_token parametresini sağlarsanız yanıt yalnızca sunucunun jetonu oluşturmasından bu yana sunucunun eklediği veya güncellediği reklamları, reklam aralarını ve etiketleri içerir. Yanıtta yeni bir next_delta_token değeri de yer alıyor. Eski reklam arası varsa yanıtta, önbelleğinizden kaldırılacak reklam aralarının obsolete_ad_break_ids listesi de yer alır.

    {
      "next_delta_token": "eyJyYW5nZXMiOlt7InMiOjEsImUiOjN9XX0",
      "obsolete_ad_break_ids": ["0003069407"],
      "tags":{
        "google_1022389921":{
          "ad":"0003069408_ad1",
          "ad_break_id":"0003069408",
          "type":"start"
        },
        ...
      },
      "ads":{
        "0003069408_ad1":{
          "ad_break_id":"0003069408",
          "position":1,
          "duration":10.01,
          "title":"External - Pod Midroll 1",
          "clickthrough_url":"https://.../",
          ...
        },
        ...
      },
      "ad_breaks":{
        "0003069408":{
          "type":"mid",
          "duration":30,
          "ads":3
        },
        ...
      }
    }
    
  5. tags nesnesini kaydedin ve güncellemeleri yerel önbelleğinizle birleştirin. obsolete_ad_break_ids parametresi varsa bu reklam aralarını ve ilişkili reklamları ve etiketleri önbelleğinizden kaldırın.

  6. polling_frequency değerini kullanarak düzenli olarak meta veri isteğinde bulunmak için bir zamanlayıcı ayarlayın. Her ankette, en son meta veri yanıtında döndürülen next_delta_token değerini delta_token sorgu parametresi olarak gönderin.

Akışı video oynatıcınıza yükleme

Kayıt yanıtından oturum kimliğini aldıktan sonra kimliği manifest manipülatörünüze iletin veya akışı bir video oynatıcıya yüklemek için bir manifest URL'si oluşturun.

Oturum kimliğini iletmek için manifest işleyici dokümanlarınıza bakın. Manifest işleyici geliştiriyorsanız Canlı yayın için manifest işleyici başlıklı makaleyi inceleyin.

Aşağıdaki örnekte bir manifest URL'si oluşturulmaktadır:

https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"

Oynatıcınız hazır olduğunda oynatmaya başlayın.

Reklam etkinliklerini dinleme

Zamanlanmış meta veriler için yayınınızın kapsayıcı biçimini kontrol edin:

  • Transport Stream (TS) kapsayıcıları içeren HLS akışları, zamanlanmış meta verileri taşımak için zamanlanmış ID3 etiketlerini kullanır. Ayrıntılar için HTTP Canlı Yayın (HLS) ile Ortak Medya Uygulaması Biçimi Hakkında başlıklı makaleyi inceleyin.

  • DASH akışları, manifestteki etkinlikleri belirtmek için EventStream öğelerini kullanır.

  • DASH akışlarında, segmentler ID3 etiketleri de dahil olmak üzere yük verileri için InbandEventStream öğeleri içerdiğinde (emsg) kullanılır. Ayrıntılı bilgi için InbandEventStream'e bakın.

  • DASH ve HLS dahil olmak üzere CMAF akışlarında ID3 etiketleri içeren emsg kutuları kullanılır.

Akışınızdan ID3 etiketlerini almak için video oynatıcınızın kılavuzuna bakın. Ayrıntılı bilgi için Zamanlanmış meta verileri işleme kılavuzuna bakın.

Reklam etkinliği kimliğini ID3 etiketlerinden almak için aşağıdakileri yapın:

  1. Etkinlikleri scheme_id_uri ile urn:google:dai:2018 veya https://aomedia.org/emsg/ID3'ye göre filtreleyin.
  2. Bayt dizisini message_data alanından çıkarın.

    Aşağıdaki örnekte, emsg verileri JSON'a dönüştürülüyor:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1022389921",
      ...
    }
    
  3. ID3 etiketlerini TXXXgoogle_{ad_event_ID} biçiminde filtreleyin:

    TXXXgoogle_1022389921
    

Reklam etkinliği verilerini göster

TagSegment nesnesini bulmak için aşağıdakileri yapın:

  1. Poll ad metadata (Reklam meta verilerini yokla) işlevinden tags reklam meta verileri nesnesini alın. tags nesnesi, TagSegment nesneleri dizisidir.

  2. TagSegment türünde bir progress nesnesi bulmak için tam reklam etkinliği kimliğini kullanın.

  3. Diğer türlerdeki bir TagSegment nesnesini bulmak için reklam etkinliği kimliğinin ilk 17 karakterini kullanın.

    İstemci uygulamanız reklam meta verilerini düzenli olarak yokladığı için video oynatıcınızın akışta bir ID3 etiketiyle karşılaşması ile ilişkili meta verilerin kullanılabilir olması arasında gecikme olabilir. İstemci uygulamanız depolanan etiketlerde ID3 etiketi bulamazsa etiketi bir kuyrukta tutun ve bir sonraki meta veri yoklamasından sonra etiketi yeniden işleyin. İşleme tamamlanana kadar etiketi kuyrukta tutun.

  4. TagSegment değerini aldıktan sonra ad_break_id özelliğini anahtar olarak kullanarak reklam meta verileri ad_breaks nesnesindeki AdBreak nesnesini bulun.

    Aşağıdaki örnekte bir AdBreak nesnesi bulunuyor:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. Reklam arasındaki reklam konumu hakkında bilgi göstermek için TagSegment ve AdBreak verilerini kullanın. Örneğin, Ad 1 of 3.

Medya doğrulama ping'leri gönderme

progress türü hariç her reklam etkinliği için bir medya doğrulama ping'i gönderin. Google DAI, progress etkinliklerini siler ve bu etkinliklerin sık sık gönderilmesi uygulamanızın performansını etkileyebilir.

Bir reklam etkinliğinin medya doğrulama URL'sini oluşturmak için aşağıdakileri yapın:

  1. Yayın yanıtından, tam reklam etkinliği kimliğini media_verification_url değerine ekleyin.

  2. Tam URL ile GET isteğinde bulunun:

    // media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/"
    const completeUrl = `${media_verification_url}google_1022389921`;
    
    const response = await fetch(completeUrl);
    

    Başarılı olursa 202 kod durumu yanıtı alırsınız. Aksi takdirde 404 hata kodunu alırsınız.

Tüm reklam etkinliklerinin geçmiş günlüğünü incelemek için Akış Etkinliği İzleyicisi'ni (SAM) kullanabilirsiniz. Ayrıntılar için Canlı yayını izleme ve sorunlarını giderme başlıklı makaleyi inceleyin.