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 kePOD_SERVING_REDIRECT
.streamingFormat
- Tetapkan keHLS
atauDASH
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 acaraendDateTime
- Tanggal dan waktu berakhir yang dijadwalkan untuk acara ini. Atribut ini diperlukan jikaunlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis 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:
|
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 milidetiklast
: 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 |
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}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&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&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&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&sd=5000&pd=30000&cust_params=&auth-token=&scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&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&sd=5000&pd=30000&cust_params=&auth-token=&scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&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
- Pod yang menayangkan pemutaran dengan IMA SDK:
- Pod yang menayangkan pemutaran dengan DAI API