Menyiapkan klien untuk pengalihan penayangan pod

Panduan ini membahas pengembangan aplikasi klien untuk memuat livestream HLS atau DASH dengan Pod serving API dan manipulator manifes Anda.

Prasyarat

Sebelum melanjutkan, Anda harus memiliki hal berikut:

Membuat permintaan streaming

Saat pengguna Anda memilih streaming, lakukan hal berikut:

  1. Buat permintaan POST ke metode layanan livestream. Untuk mengetahui detailnya, lihat Metode: stream.

  2. Teruskan parameter penargetan iklan dalam format application/x-www-form-urlencoded atau application/json. Permintaan ini mendaftarkan sesi streaming dengan Google DAI.

    Contoh berikut membuat permintaan streaming:

    Encoding formulir

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

    Encoding JSON

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

    Jika berhasil, Anda akan melihat output yang mirip dengan berikut ini:

    {
    "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e: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. Dalam respons JSON, temukan ID sesi streaming dan simpan data lainnya untuk langkah-langkah berikutnya.

Metadata iklan polling

Untuk melakukan polling metadata iklan, lakukan hal berikut:

  1. Baca nilai metadata_url dari respons pendaftaran streaming.

  2. Buat permintaan GET ke endpoint. Untuk mengetahui detailnya, lihat Metode: metadata.

    Contoh berikut mengambil metadata iklan:

    const response = await fetch(metadata_url);
    console.log(await response.json());
    

    Jika berhasil, Anda akan menerima respons PodMetadata untuk jeda iklan saat ini dan mendatang:

    {
      "tags":{
        "google_5555555555":{
          "ad":"0000229834_ad1",
          "ad_break_id":"0000229834",
          "type":"firstquartile"
        },
        "google_1234567890123456789":{
          "ad":"0000229834_ad1",
          "ad_break_id":"0000229834",
          "type":"progress"
        },
        ...
      },
      "ads":{
        "0000229834_ad1":{
          "ad_break_id":"0000229834",
          "position":1,
          "duration":15,
          "clickthrough_url":"https://.../",
          ...
        },
              ...
      },
      "ad_breaks":{
        "0000229834":{
          "type":"mid",
          "duration":15,
          "ads":1
        },
        ...
      }
    }
    
  3. Simpan objek tags untuk langkah-langkah selanjutnya.

  4. Tetapkan timer menggunakan nilai polling_frequency untuk meminta metadata secara rutin untuk semua jeda iklan berikutnya.

Muat streaming ke pemutar video Anda

Setelah mendapatkan ID sesi dari respons pendaftaran, teruskan ID tersebut ke manipulator manifes Anda, atau buat URL manifes untuk memuat streaming ke dalam pemutar video.

Untuk meneruskan ID sesi, lihat dokumentasi manipulator manifes Anda. Jika Anda mengembangkan manipulator manifes, lihat Manipulator manifes untuk livestream.

Contoh berikut merakit URL manifes:

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

Saat pemutar Anda siap, mulai pemutaran.

Memproses peristiwa iklan

Periksa format penampung streaming untuk metadata yang disinkronkan dengan waktu:

  • Streaming HLS dengan penampung Transport Stream (TS) menggunakan tag ID3 yang disesuaikan waktunya untuk membawa metadata yang disesuaikan waktunya. Untuk mengetahui detailnya, lihat Tentang Common Media Application Format dengan HTTP Live Streaming (HLS).

  • Streaming DASH menggunakan elemen EventStream untuk menentukan peristiwa dalam manifes.

  • Streaming DASH menggunakan elemen InbandEventStream saat segmen berisi kotak Pesan Acara (emsg) untuk data payload, termasuk tag ID3. Untuk mengetahui detailnya, lihat InbandEventStream.

  • Streaming CMAF, termasuk DASH dan HLS, menggunakan kotak emsg yang berisi tag ID3.

Untuk mengambil tag ID3 dari streaming, lihat panduan pemutar video Anda. Untuk mengetahui detailnya, lihat Panduan penanganan metadata yang disinkronkan dengan waktu

Untuk mengambil ID peristiwa iklan dari tag ID3, lakukan hal berikut:

  1. Memfilter peristiwa menurut scheme_id_uri dengan urn:google:dai:2018 atau https://aomedia.org/emsg/ID3.
  2. Ekstrak array byte dari kolom message_data.

    Contoh berikut mendekode data emsg ke dalam JSON:

    {
      "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3",
      "presentation_time": 27554,
      "timescale": 1000,
      "message_data": "ID3TXXXgoogle_1234567890123456789",
      ...
    }
    
  3. Filter tag ID3 dengan format TXXXgoogle_{ad_event_ID}:

    TXXXgoogle_1234567890123456789
    

Menampilkan data peristiwa iklan

Untuk menemukan objek TagSegment, lakukan hal berikut:

  1. Ambil objek metadata iklan tags dari Polling metadata iklan. Objek tags adalah array objek TagSegment.

  2. Gunakan ID peristiwa iklan lengkap untuk menemukan objek TagSegment dengan jenis progress.

  3. Gunakan 17 karakter pertama ID peristiwa iklan untuk menemukan objek TagSegment dari jenis lain.

  4. Setelah Anda memiliki TagSegment, gunakan properti ad_break_id sebagai kunci untuk menemukan objek AdBreak dalam objek metadata iklan ad_breaks.

    Contoh berikut menemukan objek AdBreak:

    {
      "type":"mid",
      "duration":15,
      "ads":1
    }
    
  5. Gunakan data TagSegment dan AdBreak untuk menampilkan informasi tentang posisi iklan dalam jeda iklan. Misalnya, Ad 1 of 3.

Mengirim ping verifikasi media

Untuk setiap peristiwa iklan, kecuali jenis progress, kirim ping verifikasi media. Google DAI membuang peristiwa progress, dan sering mengirim peristiwa ini dapat memengaruhi performa aplikasi Anda.

Untuk membuat URL verifikasi media lengkap dari peristiwa iklan, lakukan hal berikut:

  1. Dari respons streaming, tambahkan ID peristiwa iklan lengkap ke nilai media_verification_url.

  2. Buat permintaan GET dengan URL lengkap:

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

    Jika berhasil, Anda akan menerima respons kode status 202. Jika tidak, Anda akan menerima kode error 404.

Anda dapat menggunakan Pemantau Aktivitas Streaming (SAM) untuk memeriksa log historis semua peristiwa iklan. Untuk mengetahui detailnya, lihat memantau dan memecahkan masalah live stream