Manipulator manifes untuk live stream

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

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

Prasyarat: Konfigurasi acara livestream di Google Ad Manager

Sebelum membuat permintaan dari API penayangan pod, Anda harus membuat Acara livestream pengelola untuk setiap streaming yang Anda proses. Anda dapat membuat acara livestream menggunakan LiveStreamEventService API atau Antarmuka web Google Ad Manager.

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

  • customAssetKey - ID kustom yang akan digunakan untuk Peristiwa ini. Harus unik di semua Peristiwa untuk jaringan.
  • adTags - URL tag iklan utama yang dihasilkan oleh proses iklan Ad Manager alur kerja.
  • dynamicAdInsertionType - Harus ditetapkan ke POD_SERVING_REDIRECT.
  • streamingFormat - Tetapkan ke HLS atau DASH sebagaimana mestinya.
  • segmentUrlAuthenticationKeyIds - minimal satu Kunci HMAC untuk menandatangani permintaan segmen iklan.
  • daiEncodingProfileIds - Daftar DAIEncodingProfile ID diaktifkan untuk peristiwa ini.
  • startDateTime - Tanggal dan waktu mulai acara
  • endDateTime - Tanggal dan waktu berakhir 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 manifes yang diminta dari aplikasi klien pemutar video. Minimal, endpoint ini harus mengumpulkan ID streaming dari aplikasi pemutar klien, dan harus menampilkan gabungan manifes aliran data. ID streaming digunakan untuk mengidentifikasi sesi streaming ke Iklan Manajer.

Anda juga harus mengumpulkan beberapa informasi lain untuk mengidentifikasi streaming konten, misalnya, Content ID.

Contoh endpoint permintaan manifes potensial

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
Parameter jalur
asset_key ID hipotesis yang sesuai dengan livestream yang diminta di sistem Anda.
format Parameter hipotesis 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 konten streaming untuk digabungkan dengan iklan.

Menggabungkan segmen iklan ke streaming konten

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

Streaming HLS

Streaming HLS biasanya disajikan sebagai manifes multi-varian, yang akan berisi sebuah satu set tautan ke manifes varian, yang sesuai dengan setiap untuk profil.

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

Playlist multi-varian proxy

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

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

Contoh endpoint permintaan varian potensial
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
Parameter jalur
asset_key ID hipotesis yang sesuai dengan livestream yang diminta di sistem Anda.
variant Parameter hipotesis yang berisi ID untuk varian tertentu sedang diproses.
Parameter kueri
stream_id ID streaming Ad Manager dari aplikasi pemutar video klien. digunakan di sini untuk mengidentifikasi sesi pengguna dengan manipulator manifes.
Contoh manifes multi-varian yang tidak 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 ber-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

Mengidentifikasi segmen jeda iklan dan menyisipkan penghentian

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

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

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

URI segmen iklan yang disisipkan tidak dienkripsi. Jika konten Anda dienkripsi, Anda juga harus menghapus enkripsi dengan menentukan #EXT-X-KEY:METHOD=NONE sebelum segmen iklan pertama pada setiap jeda iklan, lalu tambahkan 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 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. Ini harus sama untuk semua segmen kecuali segmen terakhir dalam pod.
  • segment_offset: Offset segmen dihitung dengan menambahkan segmen sebelumnya durasi segmen ke offset segmen dalam milidetik
  • last: Nilai Boolean yang mengidentifikasi segmen terakhir dalam pod iklan. Default menjadi false (salah).

Buat URL segmen iklan

Ganti setiap segmen dalam jeda iklan dengan URL format:

/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 live stream 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 meningkat satu untuk setiap jeda iklan.

Nilai ini harus sama di seluruh pengguna yang melihat jeda iklan yang sama di peristiwa saat ini.

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

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

pd Wajib diisi, kecuali untuk acara dengan jeda iklan tanpa durasi yang diaktifkan Durasi (dalam milidetik) jeda iklan. Juga disebut sebagai ad_pod_duration.
auth-token Wajib Tanda tangan yang dienkode dengan URL Token HMAC 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. Ini adalah sangat penting untuk kolom auth-token, karena dapat berisi /, +, dan = karakter.

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 sekarang menayangkan livestream dengan segmen iklan yang disediakan oleh DAI Pod Serving API.

Aliran DASH

Aliran DASH disediakan sebagai file MPD, yang berisi semua pengkodean aliran dalam dalam satu file, dengan konten direpresentasikan sebagai serangkaian titik.

Template periode permintaan

Minta template menstruasi dari Google Ad Manager. {i>Template<i} ini akan menjadi periode jeda iklan, setelah makro yang ada di dalamnya diisi.

Anda hanya boleh meminta template ini sekali per sesi streaming, dan meng-cache-nya untuk digunakan kembali pada setiap 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 acara livestream 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 dalam template periode tanda hubung, dalam 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}

Mengisi template periode

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

Macro Deskripsi Contoh
$$pod-id$$ Indeks pod iklan yang diwakili periode ini. Nilai ini harus cocok untuk pod yang sama di semua sesi penonton. 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 ### sebagai 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 dalam milidetik. 15000
$$number-of-repeated-segments$$ Nilai ini dihitung dengan membagi durasi periode iklan (di milidetik) dengan nilai Segment_duration_ms, dan membulatkan ke atas ke bilangan bulat terdekat. 3
$$cust_params$$ Makro ini dapat diganti dengan parameter penargetan khusus yang unik untuk jeda iklan saat ini, jika. yang Anda berikan. Nilai harus diformat sebagai yang dijelaskan dalam Ad Manager ini Artikel Pusat Bantuan kami. Jika tidak ada parameter kustom yang diperlukan, makro ini harus diganti dengan kolom kosong {i>string<i}. &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
$$scte35$$ Makro ini perlu diganti dengan nilai scte35 yang unik untuk jeda iklan tersebut, jika tersedia. Jika informasi scte35 tidak diperlukan, makro ini akan diganti dengan string kosong. /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
$$token$$ Tanda tangan yang dienkode dengan URL Token HMAC. 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>

Menyisipkan periode yang terisi ke dalam Manifes DASH

Terakhir, ganti periode yang sesuai dalam manifes mentah Anda dengan periode iklan yang terisi, dan menampilkan manifes gabungan akhir ke permintaan klien video, untuk pemutaran.

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 yang digabungkan
<?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 sedang menayangkan livestream DASH dengan segmen iklan yang disediakan oleh DAI Pod Serving API.

Referensi lainnya