VOD akışları için manifest düzenleyici

Kapsül Yayınlama API'si, doğrudan kullanıcılara yönelik bir HLS veya MPEG-DASH medya oynatma listesine birleştirilebilecek şekilde hazırlanmış, uyarlanabilir bit hızı video reklam kapsüllerine erişim sağlar.

Bu kılavuzda, seç-izle yayınları için temel bir kapsül yayınlama manifesti değiştirme sunucusu uygulamaya odaklanılmaktadır.

Akış manifesti istekleri alma

Manifest düzenleyiciniz, video oynatıcı istemci uygulamasından gelen manifest isteklerini dinlemek için bir API uç noktası sağlamalıdır. Bu uç nokta en azından istemci oynatıcı uygulamasından bir akış kimliği toplamalıdır. Bu akış kimliği, reklam kapsülü isteklerinizde Ad Manager'a aktarılan akış oturumunu tanımlamak için kullanılır.

Uygun içerik akışını tanımlamak için başka bilgiler de (ör. Content ID) toplamanız gerekir.

Örnek manifest istek uç noktası

GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
Yol parametreleri
stream_id İstemci video oynatıcı uygulamasından alınan Ad Manager akış kimliği.
content_id Sisteminizdeki içerik videosuna karşılık gelen varsayımsal kimlik.
format Akış biçimine karşılık gelen varsayımsal bir parametre. Aşağıdakilerden biri:
mpd MPEG-DASH akışları için
m3u8 HLS yayınları için

İçerik akışını alma

Reklamlarla birleştirilecek içerik akışını seçmek için manifest isteğinden toplanan Content ID'yi kullanın.

Reklam kapsülü manifestlerini isteme

Ad Manager'dan reklam istemek için sunucunuzun, istenen kodlama profillerini ve reklam etiketini ileterek reklam kapsülleri uç noktasına bir POST isteği göndermesi gerekir. Bu istek, 1. adımda topladığınız akış kimliğini de içerir.

Bunun karşılığında, yayıncının reklam etiketi tarafından istenen reklam kapsülleri için manifest dosyalarını ve bu reklam kapsüllerinin içeriğinize ne zaman ve nereye yerleştirilmesi gerektiğiyle ilgili bilgileri içeren bir reklam kapsülü nesnesi listesi alırsınız.

POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
Yol parametreleri
network_code Yayıncının Ad Manager 360 ağ kodu.
stream_id İstemci video oynatıcı uygulamasındaki akış kimliği.

JSON gövdesi

Vücut parametreleri
encoding_profiles Required Her reklam arası için almak istediğiniz kodlama profillerinin JSON temsillerinin listesi. Ayrıntıları aşağıda bulabilirsiniz.

Oynatma işleminin olabildiğince sorunsuz olması için bu değer, içerik akışınızda kullanılan kodlama profilleriyle eşleşmelidir.

ad_tag Required VMAP reklamları isteyecek bir reklam etiketi.
cuepoints Optional Videonun ortasında gösterilen reklam aralarının ekleneceği içerik akışı içindeki işaret noktalarının listesi. İşaret noktaları, kayan noktalı saniye cinsinden ölçülür.

Yalnızca konumsal zaman farklarını kullanan videonun ortasında gösterilen reklamlar içeren VMAP yanıtları için gereklidir. Bu durum yaygın değildir.

content_duration_seconds Optional İçeriğin saniye cinsinden süresi.

Yalnızca yüzde zaman farklarını kullanan videonun ortasında gösterilen reklamlar içeren VMAP yanıtları için gereklidir. Bu durum yaygın değildir.

manifest_type Optional İstenen reklam akışlarının biçimi (hls veya dash). Varsayılan değer: hls.
dai_options Optional Manifestlerin nasıl oluşturulacağının bazı yönlerini kontrol eden ek seçenekler. Ayrıntıları aşağıda bulabilirsiniz.
Kodlama profili
profile_name Required Bu kodlama profilinin tanımlayıcısıdır. Bu değer, seçtiğiniz herhangi bir dize olabilir ancak aynı yayında aynı ada sahip birden fazla kodlama profili olamaz.
type Required Bu kodlama profili tarafından açıklanan yayının kodlama türü. İçerik türleri: media, iframe, subtitles.
container_type Required Bu kodlama profili tarafından kullanılan kapsayıcı biçimi. Kapsayıcı biçimleri: mpeg2ts, fmp4cmaf, hls_packed_audio
video_settings Optional Kodlama profili türü iframe ise gereklidir. Aksi takdirde, yalnızca medya türü video içeriyorsa izin verilir. Ayrıntıları aşağıda bulabilirsiniz.
audio_settings Optional Kodlama profili ses içeriyorsa gereklidir. Yalnızca türün medya olması durumunda izin verilir. Ayrıntıları aşağıda bulabilirsiniz.
subtitle_settings Optional Kodlama profili altyazı içeriyorsa gereklidir. Ayrıntıları aşağıda bulabilirsiniz.
Video ayarları
codec Required RFC6381 codec dizesi.

Örnek: avc1.4d000c

bitrate Required Bu profilin saniye başına bayt cinsinden maksimum video bit hızını temsil eden bir tam sayı.
frames_per_second Required Videonun kayan noktalı FPS değeri.
resolution Required Videonun piksel cinsinden "width" ve "height" değerlerini içeren JSON kodlu bir değer.

Örnek: {"width": 640, "height": 320}

Ses ayarları
codec Required RFC6381 codec dizesi.

Örnek: mp4a.40.5

bitrate Required Bu profilin saniye başına bayt cinsinden maksimum ses bit hızını temsil eden bir tam sayı.

Örnek: 300000

channels Required Düşük frekanslı kanallar dahil ses kanallarının sayısını temsil eden bir tam sayı.
sample_rate Required Ses örnekleme hızını hertz cinsinden temsil eden bir tam sayı.

Örnek: 4800

Altyazı ayarları
format Required Bant içi altyazılar tarafından kullanılan dosya biçimi. webvtt veya ttml değerleri desteklenir.
language Optional Altyazı dili, RFC5646 dil dizesi olarak. Sağlanırsa bu değer yalnızca DASH oluşturma için kullanılır.

Örnek: en-us

DAI seçenekleri
dash_profile Optional Reklam kapsülü manifestlerine uygulanacak MPEG-DASH profili. Bu ayar yalnızca DASH manifest'leri için kullanılır. İzin verilen değerler live veya on-demand'tır. Varsayılan değer: on-demand.

live değeri, MPEG-DASH profiline karşılık gelir"urn:mpeg:dash:profile:isoff-live:2011".

on-demand değeri, MPEG-DASH profiline karşılık gelirurn:mpeg:dash:profile:isoff-on-demand:2011.

ad_pod_timeout Optional Reklam seçmek ve reklam kapsülleri oluşturmak için harcanabilecek maksimum süre (kayan noktalı saniye cinsinden). Bu süre dolduktan sonra Ad Manager, ad_pods yanıtında zaten seçilmiş olan tüm reklamları döndürür ve işlemeyi durdurur.
sam_id Optional Akış etkinliği izleyicisinde oturumları aramak için kullanılabilecek alternatif bir hata ayıklama anahtarı belirtir.

Yanıt

Yanıt parametreleri
valid_for Bu reklam kapsülü oynatma listelerinin geçerli olduğu süre dhms biçiminde (gün, saat, dakika, saniye)
valid_until Bu reklam kapsülü oynatma listelerinin geçerli olduğu tarih ve saat. yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm biçiminde ISO8601 tarih ve saat dizesi olarak belirtilir.
ad_pods Bu akış için seçilen reklam kapsülleri listesi.
Reklam kapsülü
manifest_uris Yalnızca HLS akışları için. Kodlama profili kimliklerinin HLS manifest URI'leriyle eşlendiği bir harita.
mpd_uri Yalnızca DASH yayınları için. DASH MPD'nin URI'si.
type Reklam kapsülü türü. Reklam kapsülü türleri: pre, mid veya post.
start Yalnızca videonun ortasında gösterilen reklam kapsülleri için. Bu reklam kapsülünün yayına eklenmesi gereken konum (kayan noktalı saniye cinsinden).
duration Bu reklam kapsülünün kayan noktalı saniye cinsinden süresi.
midroll_index Yalnızca videonun ortasında gösterilen reklam kapsülleri için. Mevcut videonun ortasında gösterilen reklam kapsülünün dizini. Dizine ekleme 1 ile başlar.

Örnek istek (cURL)

curl -X POST \
     -d '@request-body.json' \
     -H 'Content-Type: application/json' \
  https://dai.google.com/ondemand/pods/api/v1/network/21775744923/streams/6e69425c-0ac5-43ef-b070-c5143ba68541:CHS/adpods

Örnek istek içeriği

Bu, yukarıdaki cURL çağrısında referans verilen request-body.json içeriğidir.

{
  "encoding_profiles": [
   {
     "profile_name": "1080p",
     "type": "media",
     "container_type": "mpeg2ts",
     "video_settings": {
       "codec": "avc1.4d000c",
       "bitrate": 5000000,
       "frames_per_second": 30.0,
       "resolution": {
         "width": 1920,
         "height": 1080
       }
     },
     "audio_settings": {
       "codec": "mp4a.40.5",
       "bitrate": 300000,
       "channels": 2,
       "sample_rate": 48000
     }
   },
   {
     "profile_name": "360p",
     "type": "media",
     "container_type": "mpeg2ts",
     "video_settings": {
       "codec": "avc1.4d000d",
       "bitrate": 1000000,
       "frames_per_second": 30.0,
       "resolution": {
         "width": 640,
         "height": 360
       }
     },
     "audio_settings": {
       "codec": "mp4a.40.5",
       "bitrate": 64000,
       "channels": 2,
       "sample_rate": 48000
     }
   },
   {
     "profile_name": "subtitles-webvtt",
     "type": "subtitles",
     "subtitle_settings": {
       "format": "webvtt"
     }
   }
 ],
 "ad_tag": "https://pubads.g.doubleclick.net/gampad/ads?...",
 "manifest_type": "hls"
}

Örnek yanıt

{
  "valid_for": "8h0m0s",
  "valid_until": "2023-03-24T08:30:26.839717986-07:00",
  "ad_pods": [
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/0/profile/1080p.m3u8",
        "360p": "https://{...}/pod/0/profile.m3u8",
        "subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt"
      },
      "type": "pre",
      "duration": 10.0
    },
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/1/profile/1080p.m3u8",
        "360p": "https://{...}/pod/1/profile.m3u8",
        "subtitles-webvtt": "https://{...}/pod/1/profile/subtitles-en.vtt"
      },
      "type": "mid",
      "start": 15.0,
      "duration": 15.0,
      "midroll_index": 1
    },
    {
      "manifest_urls":{
        ]"1080p": "https://{...}/pod/2/profile/1080p.m3u8",
        "360p": "https://{...}/pod/2/profile.m3u8",
        "subtitles-webvtt": "https://{...}/pod/0/profile/subtitles-en.vtt""
      },
      "type": "post",
      "duration": 10.0
    }
  ]
}

Reklam kapsüllerini içeriğe ekleme

Reklam kapsüllerini içerik akışlarınıza ekleme işlemi, uygulamanıza, akış biçimine ve biçimin özelliklerinden hangilerini uygulamayı seçtiğinize bağlı olarak değişir. Aşağıdaki iş akışları, bu sürecin nasıl yönetileceğine dair önerilerdir. Uygulamanızın ayrıntıları, işletmenizin ihtiyaçlarına ve içerik akışlarınıza göre değişiklik gösterebilir.

HLS akışları

HLS biçiminde bir yayın birleştiriyorsanız içerik akışınız, her kodlama profili için ayrı bir yayın manifestinin bağlantılarının yer aldığı çok varyantlı bir oynatma listesi olacaktır. Reklam kapsüllerinizin bu varyant manifestlerinin her birine eklenmesi gerekir. Bunu yapmanın bir yolu, tüm varyant manifestlerini hazırlayıp barındırma için bir İçerik Yayınlama Ağı'na (CDN) aktarmaktır. Nihai çok değişkenli oynatma listesi, CDN'de barındırılan bu manifest'lerin bağlantılarından oluşur.

Kodlama profilleri üzerinde iterasyon yapma

Her kodlama profili için, Ad Manager'ın yanıtındaki ilişkili tüm reklam kapsülü manifestlerini ve ilişkili başlangıç zamanlarını toplayın. Videodan önce gösterilen reklam kapsülleri için başlangıç zamanını 0 olarak ayarlayın. Videodan sonra gösterilen reklamlar için reklam kapsülünün başlangıç zamanı olarak içeriğin süresini kullanın. Çok varyantlı oynatma listesinde, her kodlama profilinin ses ve video ayarlarıyla eşleşen varyant akışını tanımlayın.

Örnek reklam kapsülleri dizisi
"ad_pods": [
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/0/profile/1080p.m3u8",
        "360p": "https://{...}/pod/0/profile/360p.m3u8",
        "subtitles-en": "https://{...}/pod/0/profile/subitles-en.vtt"
      },
      "type": "pre",
      "duration": 10.0
    },
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/1/profile/1080p.m3u8",
        "360p": "https://{...}/pod/1/profile/360p.m3u8",
        "subtitles-en": "https://{...}/pod/1/profile/subitles-en.vtt"
      },
      "type": "mid",
      "start": 15.0,
      "duration": 15.0,
      "midroll_index": 1
    },
    {
      "manifest_urls":{
        "1080p": "https://{...}/pod/2/profile/1080p.m3u8",
        "360p": "https://{...}/pod/2/profile/360p.m3u8",
        "subtitles-en": "https://{...}/pod/2/profile/subitles-en.vtt"
      },
      "type": "post",
      "duration": 10.0
    }
  ]
Çok değişkenli içerik oynatma listesi örneği
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://{...}/subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{...}/360p.m3u8
Toplanan varyant verileri örneği
Encoding profile: "1080p"
Profile settings: {...}
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
    0 -> https://{...}/pod/0/profile/1080p.m3u8
   15 -> https://{...}/pod/1/profile/1080p.m3u8
  600 -> https://{...}/pod/2/profile/1080p.m3u8

Her varyant manifestine reklam ekleme

Her varyant yayını için içerik manifest'inin segmentlerini inceleyin ve geçen içerik süresinin toplamını sürekli olarak hesaplayın. Bir reklam kapsülünün başlangıç konumuna geldiğinizde, reklam kapsülünün manifestinden segment listesini ayıklayın, segment listesini iki #EXT-X-DISCONTINUITY etiketine sarın ve listeyi içerik manifestindeki mevcut konuma ekleyin. Tüm reklam kapsülleri ve varyant akışları işlenene kadar bu işlemi sürdürün.

Ortaya çıkan manifestler HLS standardına uygun olmalıdır. Bu nedenle, içerik manifestinizin hangi özellikleri içerdiğine bağlı olarak, medya sıra numaralarını, içerik süresini, kesinti sıra numaralarını ve yeni reklam segmentlerini hesaba katmak için güncellenmesi gereken diğer etiketleri düzeltmek üzere birleştirilmiş manifest üzerinde son bir geçiş yapmanız gerekebilir. Standartla ilgili tüm tutarsızlıklar düzeltildikten sonra, kullanıcıya özel her varyant manifestini barındırma için CDN'nize gönderin.

İçerik manifest'iniz şifrelenmişse mevcut reklam kapsülünün başlamasından önce bulunan son şifreleme anahtarını bir #EXT-X-KEY etiketinde saklamanız gerekir. Ardından, her reklam kapsülünün ilk segmentinden önce şifrelemeyi kaldırmak için #EXT-X-KEY:METHOD=NONE etiketini eklemeniz gerekir. Son olarak, içerik şifrelemeyi geri yüklemek için her reklam kapsülünden sonraki ilk içerik segmentinin önüne depolanan #EXT-X-KEY etiketinin bir kopyasını eklemeniz gerekir.

Toplanan varyant verileri örneği
Encoding profile: "1080p"
Content manifest: https://{...}/1080p.m3u8
Ad pods (start time -> manifest):
    0 -> https://dai.google.com/{...}pod/0/profile/1080p.m3u8
   15 -> https://dai.google.com/{...}pod/1/profile/1080p.m3u8
  600 -> https://dai.google.com/{...}pod/2/profile/1080p.m3u8
Örnek içerik manifesti

Bu, toplanan varyant verilerinde listelenen https://{...}/1080p.m3u8 manifest dosyasının içeriğidir.

#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}
Örnek reklam kapsülü manifesti

Bu, toplanan varyant verilerinde listelenen https://dai.google.com/{...}/pod/1/profile/1080p.m3u8 manifest dosyasının içeriğidir.

#EXTM3U
{...}
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
Örnek birleştirilmiş varyant manifesti

Bu, CDN'ye iletilen ve https://cdn.{...}/{userid}/1080p.m3u8 adresinde barındırılan, birleştirilmiş varyant manifesti olur.

#EXTM3U
{...}
#EXTINF:5.000,
https://{...}/1080p/content-segment-0.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-1.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://dai.google.com/{...}/0.ts
#EXTINF:5.000,
https://dai.google.com/{...}/1.ts
#EXTINF:5.000,
https://dai.google.com/{...}/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.000,
https://{...}/1080p/content-segment-3.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-4.ts
#EXTINF:5.000,
https://{...}/1080p/content-segment-5.ts
{...}

Çok değişkenli oynatma listesi oluşturma

Tamamlanmış her varyant manifestinin CDN adreslerini ve eşleşen kodlama profili ayrıntılarını toplayın ve sonuçları yeni bir çok varyantlı manifestte birleştirin. Bu kullanıcıya özel manifest, 1. adımda aldığınız manifest isteğine yanıt olarak döndürülür.

Örnek nihai çok değişkenli oynatma listesi
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs0",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="https://cdn.{...}-subitles-en.vtt"
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/{userid}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/{userid}/360p.m3u8

MPEG DASH akışları

MPEG DASH biçiminde bir yayın birleştiriyorsanız tek bir dosya oluşturmanız yeterlidir. Bu, DASH yayınlarının HLS'ye kıyasla daha kolay birleştirilmesini sağlayabilir.

Düzgün şekilde hazırlanmış bir MPEG DASH medya sunumu açıklaması (MPD) dosyası, her biri birden fazla temsil içeren birkaç dönemden oluşmalıdır. Her temsil, kodlama profillerinizden biriyle eşleşmelidir. Ad Manager'dan döndürülen her reklam kapsülü, eşleşen temsillere sahip bir nokta dizisi içeren bir MPD dosyasıdır.

Bu MPD dosyalarını birleştirmek için her reklam kapsülünün başlangıç zamanlarını not ederek başlayın. Videodan önce gösterilen reklam için videodan önce gösterilen reklam kapsülü dönemlerini herhangi bir içerik döneminden önce ekleyin. Videodan sonra gösterilen reklamlar için videodan sonra gösterilen reklam kapsülü noktalarını tüm içerik noktalarından sonra ekleyin. İçerik MPD'sindeki dönemleri iterleyerek tüm işlenmiş içerik dönemleri için geçen oynatma süresini takip edin. Bir reklam kapsülünün başlangıç zamanına karşılık gelen dönemler arasındaki bir sınıra ulaştığınızda, eşleşen videonun ortasında reklam kapsülünün MPD dosyasından bu sınıra dönemler ekleyin.

Son birleştirilmiş MPD dosyası MPEG_DASH spesifikasyonlarına tam olarak uygun olmalıdır. Bu nedenle, tüm dönem başlangıç zamanlarını düzeltmek, yeni eklenen reklam dönemlerini hesaba katmak için medya sunum süresini düzeltmek ve birleştirme işleminden kaynaklanabilecek diğer tüm anlaşmazlıkları çözmek üzere nihai dosyayı bir kez daha iterasyonla incelemeniz gerekebilir.

Örnek içerik MPD

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M00.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <ProgramInformation moreInformationURL="http://.../info">
    <Title>Example Stream</Title>
  </ProgramInformation>
  <Period duration="PT0H0M15.000S" id="content-period-1">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-2">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-3">
    ...
  </Period>
  ...
</MPD>

Örnek reklam kapsülü JSON'u

[{
  "mpd_uri": "https://{...}pod/1.mpd",
  "type": "mid",
  "start": 15.0,
  "duration": 15.0,
  "midroll_index": 1
}]

Örnek reklam kapsülü MPD

Bu, yukarıdaki reklam kapsülü JSON'undaki mpd_uri içeriğidir.

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H0M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <ProgramInformation moreInformationURL="http://.../info">
    <Title>Ad Pod 1</Title>
  </ProgramInformation>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
    ...
  </Period>
  ...
</MPD>

Örnek birleştirilmiş MPD

Bu yanıtı, ilk yayın manifesti isteğine yanıt olarak gönderin.

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H10M15.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
  <ProgramInformation moreInformationURL="http://.../info">
    <Title>Example Stream</Title>
  </ProgramInformation>
  <Period duration="PT0H0M15.000S" id="content-period-1">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-1">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-2">
    ...
  </Period>
  <Period duration="PT0H0M5.000S" id="ad-pod-1-period-3">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-2">
    ...
  </Period>
  <Period duration="PT0H0M15.000S" id="content-period-3">
    ...
  </Period>
  ...
</MPD>

Ek kaynaklar