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 memilih streaming, lakukan hal berikut:

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

  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.

Polling metadata iklan

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 PodMetadata untuk jeda iklan saat ini dan yang akan datang:

    {
      "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 berikutnya.

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

Memuat streaming ke pemutar video

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

Untuk meneruskan ID sesi, lihat dokumentasi manipulator manifes. 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 siap, mulai pemutaran.

Memproses peristiwa iklan

Periksa format penampung streaming Anda untuk metadata berwaktu:

  • Streaming HLS dengan penampung Transport Stream (TS) menggunakan tag ID3 berwaktu untuk membawa metadata berwaktu. 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 Peristiwa (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. Untuk mengetahui detailnya, lihat Panduan menangani metadata berwaktu guide

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

  1. Filter 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 lainnya.

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

    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 akan menghapus 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 Stream Activity Monitor (SAM) untuk memeriksa log historis semua peristiwa iklan. Untuk mengetahui detailnya, lihat memantau dan memecahkan masalah livestream