Manipulator manifes untuk live stream

Pod Serve API menyediakan akses ke segmen iklan yang dienkode dan dikondisikan, yang disiapkan sedemikian rupa sehingga dapat digabungkan langsung menjadi playlist media HLS atau MPEG-DASH yang ditampilkan kepada pengguna. Untuk MPEG-DASH, Pod Serve API juga menyediakan template manifes untuk memberikan informasi dan konteks tambahan untuk segmen iklan ini.

Panduan ini berfokus pada penerapan server manipulasi manifes Penayangan Pod dasar untuk live stream.

Prasyarat: Mengonfigurasi peristiwa livestream di Google Ad Manager

Sebelum membuat permintaan apa pun dari API penayangan pod, Anda harus membuat peristiwa livestream Ad Manager untuk setiap streaming yang diproses. Anda dapat membuat acara livestream menggunakan LiveStreamEventService API atau antarmuka web Google Ad Manager.

Agar peristiwa livestream dapat digunakan dengan API penayangan pod, Anda harus mengisi beberapa atribut peristiwa:

  • customAssetKey - ID kustom yang akan digunakan untuk Peristiwa ini. Harus unik di seluruh Peristiwa untuk jaringan.
  • adTags - URL tag iklan utama yang dihasilkan oleh alur kerja proses iklan Ad Manager.
  • dynamicAdInsertionType - Harus ditetapkan ke POD_SERVING_REDIRECT.
  • streamingFormat - Setel ke HLS atau DASH sebagaimana mestinya.
  • segmentUrlAuthenticationKeyIds - setidaknya satu kunci HMAC yang digunakan untuk menandatangani permintaan segmen iklan.
  • daiEncodingProfileIds - Daftar ID DAIEncodingProfile yang diaktifkan untuk peristiwa ini.
  • startDateTime - Tanggal dan waktu acara dimulai
  • endDateTime - Tanggal dan waktu akhir yang dijadwalkan untuk acara ini. Atribut ini diperlukan jika unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` - Boolean. Lihat di atas.

Menerima permintaan manifes streaming

Manipulator manifes Anda harus menyediakan endpoint API untuk memproses permintaan manifes dari aplikasi klien pemutar video. Setidaknya, endpoint ini harus mengumpulkan ID streaming dari aplikasi pemutar klien, dan harus menampilkan manifes streaming yang digabungkan. ID streaming digunakan untuk mengidentifikasi sesi streaming ke Ad Manager.

Anda juga perlu mengumpulkan beberapa informasi lain untuk mengidentifikasi streaming konten yang sesuai, misalnya, Content ID.

Contoh endpoint permintaan manifes potensial

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
Parameter jalur
asset_key ID hipotetis yang sesuai dengan livestream yang diminta di sistem Anda.
format Parameter hipotetis yang sesuai dengan format streaming. Salah satu dari:
mpd Untuk streaming MPEG-DASH
m3u8 Untuk streaming HLS
Parameter kueri
stream_id ID streaming Ad Manager dari aplikasi pemutar video klien.

Mengambil streaming konten

Gunakan ID konten yang dikumpulkan dari permintaan manifes untuk memilih aliran konten yang akan digabungkan dengan iklan.

Menggabungkan segmen iklan ke dalam streaming konten

Penggabungan URL segmen iklan akan berbeda, bergantung pada format streaming Anda.

Streaming HLS

Streaming HLS biasanya ditayangkan sebagai manifes multi-varian, yang akan berisi serangkaian link ke manifes varian, yang sesuai dengan setiap profil encoding.

catatan: Agar lebih mudah, panduan ini mengasumsikan bahwa media HLS Anda dienkode dalam format yang menggabungkan audio dan video ke dalam file segmen yang sama.

Playlist multi-varian proxy

Anda harus mengganti setiap URL playlist varian di playlist multi-varian asli dengan panggilan endpoint lain ke manipulator untuk memproses manifes varian yang dipilih oleh pemain.

Langkah yang tersisa untuk menggabungkan HLS akan mengasumsikan bahwa satu manifes varian sedang diproses.

Contoh endpoint permintaan varian potensial
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
Parameter jalur
asset_key ID hipotetis yang sesuai dengan livestream yang diminta di sistem Anda.
variant Parameter hipotetis yang berisi ID untuk varian tertentu yang sedang diproses.
Parameter kueri
stream_id ID streaming Ad Manager dari aplikasi pemutar video klien. yang digunakan di sini untuk mengidentifikasi sesi pengguna dengan manipulator manifes.
Contoh manifes multi-varian yang belum diproses
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
Contoh manifes multi-varian melalui proxy
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS

Identifikasi segmen jeda iklan dan masukkan diskon

Saat Anda memproses manifes varian, lacak waktu mulai, durasi, dan indeks jeda iklan mendatang berikutnya, hingga manifes dinamis yang diproses berisi segmen yang akan diganti dengan konten iklan.

Jeda iklan dapat digambarkan dari segmen konten dengan berbagai cara, bergantung pada encoder Anda. Salah satu cara umum untuk menunjukkan jeda iklan adalah dengan mengawali segmen iklan dengan tag #EXT-X-CUE-OUT dan diikuti dengan tag #EXT-X-CUE-IN.

Untuk memisahkan jeda iklan yang dihosting Google dari segmen konten, Anda harus memasukkan tag #EXT-X-DISCONTINUITY di awal dan akhir setiap jeda iklan. Jika tag penghentian ini tidak muncul dalam manifes akhir, pemutaran akan gagal.

URI segmen iklan yang dimasukkan tidak dienkripsi. Jika konten dienkripsi, Anda juga harus menghapus enkripsi dengan menentukan #EXT-X-KEY:METHOD=NONE sebelum segmen iklan pertama di setiap jeda iklan, lalu menambahkannya kembali setelah jeda iklan.

Contoh manifes (asli)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
Manifes dengan diskontinuitas yang disisipkan
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

Memproses segmen pod iklan

Untuk setiap segmen dalam pod iklan, Anda harus melacak beberapa nilai tambahan:

  • segment_number: Indeks segmen dalam pod iklan, dimulai dengan nol. Atau "init" untuk segmen inisialisasi mp4.
  • segment_duration: Durasi segmen saat ini dalam milidetik. Nilai ini harus sama untuk semua segmen kecuali yang terakhir dalam pod.
  • segment_offset: Offset segmen dihitung dengan menambahkan durasi segmen sebelumnya ke offset segmennya dalam milidetik
  • last: Nilai Boolean yang mengidentifikasi segmen terakhir di pod iklan. Nilai defaultnya adalah false (salah).

Buat URL segmen iklan

Ganti setiap segmen dalam jeda iklan dengan URL berformat:

/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
Parameter jalur
network_code Kode jaringan Ad Manager 360 untuk jaringan ini.
custom_asset_key Kunci aset livestream kustom yang ditentukan di LiveStreamEventService API atau di halaman livestream di antarmuka web Ad Manager 360.
pod_id ID untuk jeda iklan. Harus berupa bilangan bulat yang dimulai dari 1 dan bertambah satu untuk setiap jeda iklan.

Nilai ini harus sama untuk semua pengguna yang melihat jeda iklan yang sama pada peristiwa saat ini.

profile_name ID untuk profil yang diminta,
segment_number Indeks segmen ini dalam pod iklan saat ini, mulai dari nol.
Saat menggunakan penampung MP4, segmen inisialisasi dapat diminta dengan menetapkan Segment_number ke "init".
Parameter kueri
stream_id Wajib Parameter stream_id pengguna ditampilkan dari permintaan Pembuatan Streaming.
sd Wajib segment_duration
so Opsional segment_offset

Jika so tidak ada, dianggap bahwa semua segmen sebelumnya memiliki durasi yang sama dan offset segmen dihitung dari segment_number dan sd.

pd Wajib, kecuali untuk acara yang mengaktifkan jeda iklan tanpa durasi Durasi (dalam milidetik) jeda iklan. Juga disebut sebagai ad_pod_duration.
auth-token Wajib Token HMAC yang ditandatangani dan dienkode URL untuk pod iklan ini.
last Opsional Boolean yang menunjukkan segmen terakhir dalam jeda iklan. Nilai defaultnya adalah false (salah).

Nilai parameter kueri harus dienkode dengan benar agar aman untuk URL. Hal ini sangat penting untuk kolom auth-token, karena dapat berisi karakter /, +, dan =.

Contoh manifes (setelah penggantian segmen)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0

#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4

Selamat! Anda kini menayangkan livestream dengan segmen iklan yang disediakan oleh DAI Pod Serve API.

Aliran DASH

Streaming DASH disediakan sebagai file MPD, yang berisi semua encoding streaming dalam satu file, dengan konten direpresentasikan sebagai serangkaian periode.

Template periode permintaan

Minta template periode dari Google Ad Manager. Template ini akan menjadi periode jeda iklan Anda, setelah makro di dalamnya terisi.

Anda hanya boleh meminta template ini sekali per sesi streaming, dan meng-cache-nya untuk digunakan kembali setiap kali jeda iklan.

Endpoint permintaan template periode
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
Parameter jalur
network_code Kode jaringan Ad Manager 360 penayang.
custom_asset Kunci aset kustom dari peristiwa live streaming di Google Ad Manager.
Parameter kueri
stream_id ID streaming Ad Manager dari pemutar video klien.
Tanggapan JSON
dash_period_template String XML template periode.
segment_duration_ms Durasi setiap segmen media iklan di template titik pisah, dalam milidetik.
Contoh permintaan (cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
Contoh respons
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
 <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
  <SegmentTimeline>
    <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
  </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>

    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>",
"segment_duration_ms":5000}

Isi template periode

Template periode berisi beberapa makro yang harus Anda ganti untuk setiap jeda iklan. Semua makro harus diganti. Makro yang tidak digunakan harus diganti dengan string kosong ("").

Macro Deskripsi Contoh
$$pod-id$$ Indeks pod iklan yang diwakili oleh periode ini. Nilai ini harus cocok untuk pod yang sama di semua sesi pelihat. 1
$$period-start$$ Waktu saat periode dimulai dalam MPD saat ini. Atribut opsional yang harus diganti dengan start="###", dengan ### adalah waktu presentasi saat jeda iklan dimulai. Jika waktu mulai periode tidak diberikan, makro ini harus diganti dengan string kosong. start="PT2H33M30S"
$$period-duration$$ Durasi periode iklan lengkap. Atribut opsional yang harus diganti dengan duration="###", dengan ### adalah durasi periode iklan dalam format durasi DASH standar. Jika durasi periode tidak diberikan, makro ini harus diganti dengan string kosong. duration="PT15S"
$$pod-duration$$ Perkiraan durasi iklan yang akan ditentukan untuk pod ini, dalam milidetik. 15000
$$number-of-repeated-segments$$ Nilai ini dihitung dengan membagi durasi periode iklan (dalam milidetik) dengan nilai Segment_duration_ms, dan dibulatkan ke bilangan bulat terdekat. 3
$$cust_params$$ Makro ini dapat diganti dengan parameter penargetan kustom yang unik untuk jeda iklan saat ini, jika tersedia. Nilai harus diformat seperti yang dijelaskan di artikel Pusat Bantuan Ad Manager ini. Jika parameter kustom tidak diperlukan, makro ini harus diganti dengan string kosong. &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ Makro ini perlu diganti dengan nilai scte35 yang unik untuk jeda iklan tersebut, jika ada. Jika informasi scte35 tidak diperlukan, makro ini harus diganti dengan string kosong. /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ Token HMAC yang ditandatangani dan dienkode URL. Token ini diperlukan. custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
Template periode mentah, yang berisi makro
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
  </BaseURL>
  <SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">  
    <SegmentTimeline>
      <S t="0" d="5" r="$$number-of-repeated-segments$$"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
    <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
    <Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
  </AdaptationSet>
  <AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
    <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
  </AdaptationSet>
</Period>
Periode iklan yang terisi
<Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>

Memasukkan periode yang terisi ke Manifes DASH

Terakhir, ganti periode yang sesuai dalam manifes mentah dengan periode iklan yang baru diisi, dan tampilkan manifes akhir yang digabungkan ke klien video yang meminta, untuk diputar.

Contoh manifes konten mentah
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    <Period start="PT0S">
      <AdaptationSet bitstreamSwitching="true">

        <Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
          <SegmentBase>
            <Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
            <SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
            <SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
          <SegmentBase>
            <Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
            <SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
            <SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
            ...
          </SegmentList>
        </Representation>

        <Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
          <SegmentBase>
            <Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
          </SegmentBase>
          <SegmentList duration="15">
            <SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
            <SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
            <SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
            ...
          </SegmentList>
        </Representation>
        ...
      </AdaptationSet>
    </Period end>
  </MPD>
Contoh manifes gabungan
<?xml version="1.0"?>
  <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
    <BaseURL>
      http://example.com/tears_of_steel/
    </BaseURL>
    
    <Period id="pod-0" start="PT5H50M12S">
  <BaseURL>
    https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
  </BaseURL>
  <SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$">
    <SegmentTimeline>
      <S d="5" r="1"/>
    </SegmentTimeline>
  </SegmentTemplate>
  <AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
    <Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
      <InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
    </Representation>
  </AdaptationSet>
  <AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
    <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
      <Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
    </Representation>
  </AdaptationSet>
</Period>
    
</MPD>

Selamat! Anda kini menayangkan livestream DASH dengan segmen iklan yang disediakan oleh DAI Pod Serve API.

Referensi tambahan