Canlı yayınlar için manifest düzenleyici

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öre HLS veya DASH 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 saati
  • endDateTime - Bu etkinliğin planlanan bitiş tarihi ve saati. Bu özellik unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis 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:
mpd MPEG-DASH akışları için
m3u8 HLS akışları için
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

so eksikse önceki segmentlerin tümünün mevcut olduğu varsayılır süreleri aynı kalır ve segment ofseti segment_number ve sd.

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}&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}

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&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>
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&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>

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&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>

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