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 informasi dan konteks tambahan untuk segmen iklan ini.

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

Prasyarat: Konfigurasi acara livestream di Google Ad Manager

Sebelum membuat permintaan apa pun dari API penayangan pod, Anda harus membuat peristiwa live stream Pengelola Iklan untuk setiap streaming yang Anda proses. Anda dapat membuat acara live stream Anda 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 seluruh 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 ID DAIEncodingProfile yang diaktifkan untuk peristiwa ini.
  • startDateTime - Tanggal dan waktu mulai peristiwa
  • endDateTime - Tanggal dan waktu akhir yang dijadwalkan untuk acara ini. Atribut ini wajib ada 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. Minimal, 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 Iklan Manajer.

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 hipotesis 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 Content ID yang dikumpulkan dari permintaan manifes untuk memilih streaming konten yang akan digabungkan dengan iklan.

Menggabungkan segmen iklan ke streaming konten

URL segmen iklan yang digabungkan 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: Untuk memudahkan, 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 dalam playlist multivarian asli dengan panggilan endpoint lain ke manipulator untuk memproses manifes varian yang dipilih pemutar.

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 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 multivarian dengan 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 diskontinuitas

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 cara yang berbeda, bergantung pada encoder Anda. Salah satu cara umum untuk menandai jeda iklan adalah dengan mengawali segmen iklan dengan tag #EXT-X-CUE-OUT dan mengikutinya 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 ini tidak muncul dalam 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 dari 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 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 dari 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_identifier}/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 dalam LiveStreamEventService API atau di halaman livestream di antarmuka web Ad Manager 360.
pod_identifier

Format berikut didukung:

pod/{integer}

ID numerik untuk jeda iklan saat ini. ID pod iklan adalah ditetapkan secara bertahap untuk setiap peristiwa jeda iklan, mulai 1.

ad_break_id/{string}

ID string untuk jeda iklan saat ini.

profile_name ID untuk profil yang diminta,
segment_number Indeks segmen ini dalam pod iklan saat ini, dimulai 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 yang ditampilkan dari permintaan Create Stream.
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, kecuali untuk peristiwa dengan jeda iklan tanpa durasi yang diaktifkan 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/ad_break_id/adbreak1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=ad_break_id%3adbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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/ad_break_id/adbreak1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~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 live stream dengan segmen iklan yang disediakan oleh DAI Pod Serving API.

Streaming 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. Template ini akan menjadi periode jeda iklan, setelah makro yang dikandungnya diisi.

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

Endpoint permintaan template periodehjf
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 dasbor, 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 ### 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 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 kustom yang unik untuk jeda iklan saat ini, jika disediakan. Nilai harus diformat seperti yang dijelaskan dalam artikel Pusat Bantuan Ad Manager ini. Jika tidak ada parameter kustom yang 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 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 diisi 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 kini menayangkan live stream DASH dengan segmen iklan yang disediakan oleh DAI Pod Serving API.

Referensi lainnya