Kapsül Yayınlama API'si, kodlanmış ve koşullandırılmış reklam segmentlerine erişim sağlar. doğrudan kullanıcıya yönelik bir HLS'ye birleştirilebilecek şekilde hazırlanmış olmalıdır veya MPEG-DASH medya oynatma listesi. MPEG-DASH için Kapsül Yayınlama API'si aynı zamanda bir bu reklamla ilgili ek bilgi ve bağlam sağlayan manifest şablonu emin olun.
Bu kılavuz, temel bir kapsül yayınlama manifest düzenlemesini uygulamaya odaklanmıştır. sunucusu da var.
Ön koşul: Google Ad Manager'da canlı yayın etkinliklerini yapılandırma
Kapsül yayınlama API'sinden herhangi bir istekte bulunmadan önce bir Reklam oluşturmanız gerekir
İşlediğiniz her yayının yönetici canlı yayın etkinliği. Web sitemiz g.co/newsinitiative/labs
üzerinden
canlı yayın etkinliğinde
LiveStreamEventService API
veya
Google Ad Manager web arayüzü.
Canlı yayın etkinliğinin kapsül sunma API'siyle kullanılması için şunları yapmanız gerekir: etkinliğinizin çeşitli özelliklerini doldurun:
customAssetKey
: Bu Etkinlik için kullanılacak özel tanımlayıcı. Olması gereken: Ağdaki tüm etkinliklerde benzersiz olması gerekir.adTags
- Ad Manager trafik işlemleri tarafından oluşturulan birincil reklam etiketi URL'si iş akışını takip edin.dynamicAdInsertionType
:POD_SERVING_REDIRECT
olarak ayarlanmalıdır.streamingFormat
- Buna göreHLS
veyaDASH
olarak ayarlayın.segmentUrlAuthenticationKeyIds
- en az bir HMAC anahtarı reklam segmenti isteklerini imzalamak için kullanılır.daiEncodingProfileIds
- DAIEncodingProfile Bu etkinlik için kimlikler etkinleştirildi.startDateTime
- Etkinliğin başlangıç tarihi ve saatiendDateTime
- Bu etkinliğin planlanan bitiş tarihi ve saati. Bu özellikunlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis true.
unlimitedEndDateTime` - Boole değeri belirlenmişse gereklidir. Yukarıya bakın.
Akış manifesti isteklerini alma
Manifest düzenleyiciniz, manifesti dinlemek için bir API uç noktası sağlamalıdır. video oynatıcı istemci uygulamasından gelen isteklerle ilgilidir. Bu uç nokta, en azından istemci oynatıcı uygulamasından bir akış kimliği almalı ve birleştirilmiş bir akış manifesti. Akış kimliği, akış oturumunu Reklam'a tanımlamak için kullanılır Yönetici'yi seçin.
Ayrıca, uygun türleri belirlemek için başka bilgiler de toplamanız gerekir. bir içerik kimliği oluşturabilirsiniz.
Olası bir manifest isteği uç noktası örneği
GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
Yol parametreleri | |||||
---|---|---|---|---|---|
asset_key |
Sisteminizde istenen canlı yayına karşılık gelen varsayımsal bir kimlik. | ||||
format |
Akış biçimine karşılık gelen varsayımsal bir parametre. Şunlardan biri:
|
Sorgu parametreleri | |
---|---|
stream_id |
İstemci video oynatıcı uygulamasındaki Ad Manager akış kimliği. |
İçerik akışını alma
İçeriği seçmek için manifest isteğinden toplanan Content ID'yi kullanın canlı yayınlar oluşturun.
Reklam segmentlerini içerik akışında birleştirin
Reklam segmenti URL'lerinin birleştirilmesi, yayın biçiminize bağlı olarak farklılık gösterir.
HLS akışları
HLS akışları genellikle çok değişkenli bir manifest olarak sunulur. Bu manifest, kodlamaların her birine karşılık gelen değişken manifestlere bağlantı profil.
not: Kolaylık sağlaması açısından bu kılavuzda HLS medyanızın ses ve videoyu aynı segment dosyasına yerleştiren bir biçim.
Proxy çok değişkenli oynatma listeleri
Orijinal çok değişkenli her varyant oynatma listesi URL'sini değiştirmeniz gerekir manipülatöre başka bir uç nokta çağrısı içeren oynatma listesi manifestosunu tıklayın.
HLS'yi birleştirme işleminin kalan adımlarında, tek bir varyant manifestinin işleniyor.
Olası bir varyant isteği uç noktası örneği
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
Yol parametreleri | |
---|---|
asset_key |
Sisteminizde istenen canlı yayına karşılık gelen varsayımsal bir kimlik. |
variant |
Belirli bir varyantın tanımlayıcısını içeren varsayımsal bir parametre bir şablondur. |
Sorgu parametreleri | |
---|---|
stream_id |
İstemci video oynatıcı uygulamasındaki Ad Manager akış kimliği. şu amaçlarla kullanılır: manifest düzenleyiciyle bir kullanıcı oturumunu tanımlama. |
İşlenmemiş çok değişkenli manifest örneği
#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
Proxy kullanılan çok değişkenli manifest örneği
#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
Reklam arası segmentlerini belirleme ve süreksizlikler ekleme
Varyant manifestini işlerken başlangıç zamanını, süreyi ve dinamik manifest işlenene kadar, bir sonraki reklam arasının dizini yerleştirilecek segmentleri reklam içeriğiyle değiştirecektir.
Reklam araları, duruma bağlı olarak, içerik segmentlerinden farklı şekillerde
tıklayın. Reklam arasını tanımlamanın yaygın yollarından biri, reklamın
#EXT-X-CUE-OUT
etiketi içeren segmentler ve bunu bir #EXT-X-CUE-IN
etiketi ile takip et.
Google tarafından barındırılan reklam aralarını içerik segmentlerinizden ayırmak için
Her reklam arasının başında ve sonunda #EXT-X-DISCONTINUITY
etiket. Bu
Süreksizlik etiketleri nihai manifestte görünmez, oynatma başarısız olur.
Eklenen reklam segmenti URI'leri şifrelenmemiştir. İçeriğiniz şifrelenmişse
ayrıca #EXT-X-KEY:METHOD=NONE
belirterek şifrelemeyi kaldırmanız gerekir.
önce her reklam arasının ilk reklam segmentine ekleyin, ardından bunu
reklam arası.
Örnek manifest (orijinal)
#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
Süreksizlikler eklenmiş manifest
#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
Reklam kapsülü segmentlerini işleyin
Bir reklam kapsülü içindeki her segment için birkaç ek değeri izlemeniz gerekir:
segment_number
: Sıfır ile başlayarak reklam kapsülü içinde segment dizini. Ya da "init" bölümüne göz atın.segment_duration
: Geçerli segmentin milisaniye cinsinden süresi. Bu değeri, kapsüldeki son segment hariç tüm segmentler için aynı olmalıdır.segment_offset
: Önceki segment eklenerek hesaplanan segment ofseti segmentin segment ofsetine kadar olan süresi (milisaniye cinsinden)last
: Reklam kapsülündeki son segmenti tanımlayan boole değeri. Varsayılanlar değerini false (yanlış) olarak değiştirin.
Reklam segmenti URL'leri oluşturun
Reklam arası içindeki her segmenti şu biçime sahip bir URL ile değiştirin:
/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)
Yol parametreleri | |
---|---|
network_code
|
Bu ağ için Ad Manager 360 ağ kodu. |
custom_asset_key
|
LiveStreamEventService'te belirtilen özel canlı yayın öğe anahtarı veya Ad Manager 360 web arayüzündeki canlı yayın sayfasında gösterilebilir. |
pod_id
|
Reklam arasının tanımlayıcısı. ile başlayan bir tam sayı olmalıdır
1 ve her reklam arası için birer tane artar.
Bu değer, şurada aynı reklam arasını görüntüleyen tüm kullanıcılar için aynı olmalıdır: güncel bilgileri gösterir. |
profile_name
|
İstenen profilin tanımlayıcısı, |
segment_number
|
Bu segmentin mevcut reklam kapsülü içinde sıfırdan başlayan dizini. MP4 kapsayıcısı kullanırken segment_numarası "init" olarak ayarlanarak başlatma segmenti istenebilir. |
Sorgu parametreleri | ||
---|---|---|
stream_id
|
Zorunlu | Kullanıcının stream_id parametresi, Akış Oluşturma özelliğinden döndürüldü
isteğinde bulunabilirsiniz.
|
sd
|
Zorunlu | segment_duration
|
so
|
İsteğe bağlı | segment_offset
|
pd
|
Süresiz reklam aralarının etkin olduğu etkinlikler hariç, zorunludur. | Reklam arasının süresi (milisaniye cinsinden). Ayrıca şu adla bilinir:
ad_pod_duration
|
auth-token
|
Zorunlu | İmzalanmış, url kodlamalı bir HMAC jetonu oluşturmanız gerekir. |
last
|
İsteğe bağlı | Reklam arasındaki son segmenti gösteren boole değeri. Varsayılan olarak yanlış değerine ayarlanır. |
Sorgu parametresi değerleri, URL açısından güvenli olacak şekilde doğru şekilde kodlanmalıdır. Bu
/
, içerebileceği için özellikle auth-token
alanı için önemlidir
+
ve =
karakter.
Örnek manifest (segment değiştirildikten sonra)
#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
Tebrikler! Şu anda yayıncının sağladığı reklam segmentlerini içeren bir canlı yayın yapıyorsunuz DAI Kapsül Yayınlama API'si.
DASH Akışları
DASH Akışları, tüm akış kodlamalarını İçeriğin nokta dizisi olarak gösterildiği tek bir dosya.
İstek dönemi şablonu
Google Ad Manager'dan dönem şablonu isteyin. Bu şablon, reklam arası dönemini ayarlayabilirsiniz.
Bu şablonu her akış oturumu için yalnızca bir kez istemeli ve aşağıdaki süre boyunca önbelleğe almalısınız yeniden kullanabilirsiniz.
Dönem şablonu isteği Endpointshjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
Yol parametreleri | |
---|---|
network_code |
Yayıncının Ad Manager 360 ağ kodu. |
custom_asset |
Google Ad Manager'daki canlı yayın etkinliğinin özel öğe anahtarı. |
Sorgu parametreleri | |
---|---|
stream_id |
İstemci video oynatıcıdaki Ad Manager akış kimliği. |
Yanıt JSON | |
---|---|
dash_period_template |
Dönem şablonu XML dizesi. |
segment_duration_ms |
Kısa çizgi süresi şablonundaki her bir reklam medya segmentinin süresi milisaniye cinsinden ayarlanır. |
Örnek istek (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
Örnek yanıt
{"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}
Dönem şablonunu doldurun
Dönem şablonu, her reklam için değiştirmeniz gereken birkaç makro içerir mola verin. Tüm makroların değiştirilmesi gerekiyor. Kullanılmayan makrolar, boş dize ("")
Makro | Açıklama | Örnek |
---|---|---|
$$pod-id$$ |
Bu dönemin temsil ettiği reklam kapsülünün dizini. Bu değer, tüm izleyici oturumlarında aynı kapsülü kullanın. | 1 |
$$period-start$$ |
Geçerli MPD'de dönemin başladığı zaman. İsteğe bağlı bir özellik
bu değer start="###" ile değiştirilmesi gerekir; burada
### , reklam arasının başladığı sunum zamanıdır. Eğer
dönemin başlangıç zamanı sağlanmamışsa bu makronun değiştirilmesi gerekir
boş bir dizeyle değiştirin.
|
start="PT2H33M30S" |
$$period-duration$$ |
Tam reklam döneminin süresi. Şu özelliklere sahip isteğe bağlı bir özellik:
değeri, duration="###" ile değiştirilir; burada ### değeri:
standart DASH süresi biçiminde reklam döneminin süresini gösterir. Öğe
dönemin süresi sağlanmazsa, bu makronun
boş dize.
|
duration="PT15S" |
$$pod-duration$$ |
Bu kapsül için karar verilecek reklamların beklenen süresi milisaniye cinsinden ayarlanır. | 15000 |
$$number-of-repeated-segments$$ |
Bu değer, reklam dönemi süresinin ( milisaniye) segment_duration_ms değerine yuvarlanır ve en yakın tam sayıdır. | 3 |
$$cust_params$$ |
Bu makro, geçerli reklam arasını gösterir. sağlar. Değer şu şekilde biçimlendirilmelidir: bu Ad Manager'da açıklandığı şekilde Yardım Merkezi makalesi. Özel parametre gerekmiyorsa bu makronun yerine boş bir dize. |
&cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
|
$$scte35$$ |
Bu makronun, söz konusu reklam arasına özel bir scte35 değeriyle değiştirilmesi gerekir. e-posta adresini kullanabilirsiniz. scte35 bilgisi gerekmiyorsa bu makro boş bir dizeyle değiştirilir. |
/DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
|
$$token$$ |
İmzalanmış, url kodlamalı bir HMAC jetonu. Bu jeton gereklidir. |
custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9
|
Makro içeren işlenmemiş dönem şablonu
<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>
Doldurulan reklam dönemi
<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>
Doldurulan döneminizi DASH manifestine ekleme
Son olarak, ham manifestinizdeki uygun dönemi yeni ve son birleştirilmiş manifesti istekte bulunan video istemcisi kullanılır.
Ham içerik manifesti örneği
<?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>
Birleştirilmiş manifest örneği
<?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>
Tebrikler! Şu anda reklam segmentleri sağlanan bir DASH canlı yayını yayınlıyorsunuz bunu DAI Kapsül Yayınlama API'si ile gerçekleştirebilirsiniz.
Ek kaynaklar
- IMA SDK ile kapsül yayınlama oynatma:
- DAI ile kapsül yayınlama API