دستکاری کننده مانیفست برای جریان های VOD

Pod Serving API دسترسی به غلاف‌های تبلیغات ویدیویی با نرخ بیت تطبیقی ​​را فراهم می‌کند که به‌گونه‌ای آماده شده‌اند که می‌توان آن‌ها را مستقیماً در فهرست پخش رسانه‌ای HLS یا MPEG-DASH قرار داد.

این راهنما بر روی اجرای یک سرور دستکاری مانیفست پایه Pod Serving برای جریان های VOD متمرکز شده است.

درخواست‌های مانیفست جریان را دریافت کنید

دستکاری کننده مانیفست شما باید یک نقطه پایانی API برای گوش دادن به درخواست های مانیفست از برنامه مشتری پخش کننده ویدیو ارائه دهد. حداقل، این نقطه پایانی باید شناسه جریانی را از برنامه پخش کننده مشتری جمع آوری کند. این شناسه جریان برای شناسایی جلسه پخش جریانی به Ad Manager در درخواست‌های غلاف آگهی شما استفاده می‌شود.

همچنین باید اطلاعات دیگری را برای شناسایی جریان محتوای مناسب جمع آوری کنید، به عنوان مثال، شناسه محتوا.

نقطه پایانی درخواست مانیفست مثال

GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
پارامترهای مسیر
stream_id شناسه جریان Ad Manager از برنامه پخش کننده ویدیوی مشتری.
content_id شناسه فرضی مربوط به محتوای ویدیوی سیستم شما.
format یک پارامتر فرضی مربوط به قالب جریان. یکی از هر دو:
mpd برای جریان های MPEG-DASH
m3u8 برای جریان های HLS

جریان محتوا را بازیابی کنید

از شناسه محتوای جمع‌آوری‌شده از درخواست مانیفست برای انتخاب جریان محتوا برای هم‌پیوندی با تبلیغات استفاده کنید.

درخواست مانیفست آگهی

برای درخواست تبلیغات از Ad Manager، سرور شما باید یک درخواست POST به نقطه پایانی آگهی‌ها ارسال کند و نمایه‌های رمزگذاری درخواستی، برچسب آگهی و پارامترهای هدف را ارسال کند. این درخواست همچنین شامل شناسه جریانی است که در مرحله 1 جمع آوری کرده اید.

در عوض، فهرستی از اشیاء پادهای تبلیغاتی حاوی فایل‌های مانیفست برای پادهای تبلیغاتی درخواست شده توسط برچسب آگهی ناشر و اطلاعاتی درباره زمان و مکان درج آن‌ها در محتوای شما دریافت می‌کنید.

POST /ondemand/pods/api/v1/network/{network_code}/streams/{stream_id}/adpods
Host: dai.google.com
Content-Type: application/json
پارامترهای مسیر
network_code کد شبکه Ad Manager 360 ناشر.
stream_id شناسه جریان از برنامه پخش کننده ویدیوی مشتری.

بدنه JSON

پارامترهای بدن
encoding_profiles Required فهرستی از نمایش‌های JSON از نمایه‌های رمزگذاری که می‌خواهید برای هر وقفه تبلیغاتی دریافت کنید. جزئیات را در زیر ببینید

برای اینکه پخش تا حد امکان بدون درز باشد، باید با مجموعه نمایه های رمزگذاری استفاده شده در جریان محتوای شما مطابقت داشته باشد.

ad_tag Required یک برچسب تبلیغاتی برای درخواست تبلیغات VMAP.
cuepoints Optional فهرستی از نقاط نشانه در جریان محتوا که وقفه‌های تبلیغاتی میان‌روی در آن درج می‌شود. نقاط نشانه در ثانیه ممیز شناور اندازه گیری می شوند.

فقط برای پاسخ‌های VMAP که حاوی فیلم‌های میانی با استفاده از جابجایی‌های زمانی موقعیتی هستند، لازم است. این غیر معمول است.

content_duration_seconds Optional مدت زمان محتوا بر حسب ثانیه

فقط برای پاسخ‌های VMAP که حاوی فیلم‌های میانی با استفاده از درصد فاصله زمانی هستند، لازم است. این غیر معمول است.

manifest_type Optional قالب جریان های تبلیغاتی درخواستی، hls یا dash . مقدار پیش فرض hls است.
dai_options Optional گزینه‌های اضافی که جنبه‌های نحوه نمایش مانیفست‌ها را کنترل می‌کنند. جزئیات را در زیر ببینید
رمزگذاری نمایه
profile_name Required یک شناسه برای این نمایه رمزگذاری. این مقدار می‌تواند هر رشته‌ای باشد که انتخاب می‌کنید، اما نمی‌توانید چندین نمایه رمزگذاری با نام یکسان در یک جریان داشته باشید.
type Required نوع رمزگذاری جریان توصیف شده توسط این نمایه رمزگذاری. انواع محتوا عبارتند از: media ، iframe ، subtitles .
container_type Required قالب کانتینری که این نمایه رمزگذاری استفاده می کند. فرمت های کانتینر عبارتند از: mpeg2ts ، fmp4cmaf ، hls_packed_audio
video_settings Optional اگر نوع نمایه رمزگذاری iframe باشد، الزامی است. در غیر این صورت، فقط در صورتی مجاز است که نوع رسانه حاوی ویدیو باشد. جزئیات را در زیر ببینید
audio_settings Optional اگر نمایه رمزگذاری حاوی صدا باشد، الزامی است. فقط در صورتی مجاز است که نوع آن رسانه ای باشد. جزئیات را در زیر ببینید
subtitle_settings Optional اگر نمایه رمزگذاری حاوی زیرنویس باشد، الزامی است. جزئیات را در زیر ببینید
تنظیمات ویدیو
codec Required رشته کدک RFC6381.

مثال: avc1.4d000c

bitrate Required یک عدد صحیح که حداکثر میزان بیت ویدیوی این نمایه را بر حسب بایت در ثانیه نشان می دهد.
frames_per_second Required FPS ممیز شناور ویدیو.
resolution Required یک مقدار رمزگذاری شده با JSON که حاوی «عرض» و «ارتفاع» ویدیو بر حسب پیکسل است.

مثال: {"width": 640, "height": 320}

تنظیمات صدا
codec Required رشته کدک RFC6381.

مثال: mp4a.40.5

bitrate Required یک عدد صحیح که حداکثر نرخ بیت صوتی این نمایه را بر حسب بایت در ثانیه نشان می دهد.

مثال: 300000

channels Required یک عدد صحیح نشان دهنده تعداد کانال های صوتی از جمله کانال های فرکانس پایین.
sample_rate Required یک عدد صحیح که نشان دهنده نرخ نمونه برداری صوتی در هرتز است.

مثال: 4800

تنظیمات زیرنویس
format Required فرمت فایل مورد استفاده توسط زیرنویس های درون باند. مقادیر پشتیبانی شده webvtt یا ttml هستند.
language Optional زبان زیرنویس به عنوان یک رشته زبان RFC5646. در صورت ارائه، این مقدار فقط برای رندر DASH استفاده می شود.

مثال: en-us

گزینه های DAI
dash_profile Optional نمایه MPEG-DASH برای اعمال در مانیفست آگهی. این تنظیم فقط برای مانیفست های DASH استفاده می شود. مقادیر مجاز live یا on-demand هستند. مقدار پیش فرض on-demand است.

مقدار live مربوط به نمایه MPEG-DASH "urn:mpeg:dash:profile:isoff-live:2011" .

مقدار on-demand مربوط به نمایه MPEG-DASH urn:mpeg:dash:profile:isoff-on-demand:2011 .

ad_pod_timeout Optional حداکثر زمان صرف انتخاب تبلیغات و ساختن پادهای تبلیغاتی، در ثانیه ممیز شناور. پس از سپری شدن این زمان، Ad Manager تبلیغاتی را که قبلاً در پاسخ ad_pods انتخاب شده است برمی گرداند و پردازش را متوقف می کند.
sam_id Optional یک کلید اشکال زدایی جایگزین را مشخص می کند که می تواند برای جستجوی جلسات در نظارت بر فعالیت جریان استفاده شود.

واکنش

پارامترهای پاسخ
valid_for مدت زمانی که این لیست‌های پخش غلاف آگهی در قالب dhms (روز، ساعت، دقیقه، ثانیه) معتبر هستند.
valid_until تاریخ و زمانی که تا آن زمان این لیست‌های پخش غلاف آگهی به‌عنوان یک رشته زمان تاریخ ISO8601 در yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm معتبر هستند.
ad_pods فهرستی از آگهی‌های انتخاب شده برای این جریان.
غلاف آگهی
manifest_uris فقط برای پخش جریانی HLS. نقشه ای از رمزگذاری شناسه های نمایه به URI های مانیفست HLS.
mpd_uri فقط برای جریان های DASH. URI DASH MPD.
type نوع پاد تبلیغاتی انواع غلاف تبلیغاتی عبارتند از: pre ، mid یا post .
start فقط برای پادهای تبلیغاتی میان فیلم. موقعیتی در جریان که باید این غلاف تبلیغاتی در ثانیه ممیز شناور درج شود.
duration مدت زمان این غلاف آگهی در ثانیه ممیز شناور است.
midroll_index فقط برای پادهای تبلیغاتی میان فیلم. نمایه غلاف آگهی میان‌روی فعلی. نمایه سازی با 1 شروع می شود.

درخواست نمونه (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

نمونه درخواست بدنه

این محتویات request_body.json است که در فراخوانی cURL در بالا به آن اشاره شده است.

{
  "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"
}

پاسخ نمونه

{
  "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
    }
  ]
}

غلاف های تبلیغاتی را به محتوا بچسبانید

فرآیند دوخت پادهای تبلیغاتی در جریان محتوای شما بسته به اجرای شما، قالب جریان و ویژگی هایی که از مشخصات قالب برای پیاده سازی انتخاب می کنید متفاوت است. گردش کار زیر پیشنهاداتی برای نحوه مدیریت این فرآیند است. جزئیات دقیق اجرای شما ممکن است بر اساس نیازهای کسب و کار و جریان محتوای شما متفاوت باشد.

جریان های HLS

اگر جریانی را در قالب HLS می‌سازید، جریان محتوای شما یک لیست پخش چند متغیره از پیوندها برای جدا کردن مانیفست‌های جریان، یکی برای هر نمایه رمزگذاری خواهد بود. غلاف های تبلیغاتی شما باید در هر یک از این مانیفست های مختلف درج شود. یکی از راه‌های انجام این کار این است که همه مانیفست‌ها را آماده کنید و آنها را برای میزبانی به یک شبکه تحویل محتوا (CDN) منتقل کنید. لیست پخش چند متغیره نهایی مجموعه ای از پیوندها به این مانیفست های میزبان CDN است.

تکرار روی پروفایل های رمزگذاری

برای هر نمایه رمزگذاری، همه مانیفست‌های غلاف تبلیغات مرتبط را از پاسخ مدیر آگهی، همراه با زمان شروع مرتبط با آنها جمع‌آوری کنید. برای پادهای تبلیغاتی قبل از پخش، زمان شروع را روی 0 تنظیم کنید. برای پست‌ها، از مدت زمان محتوا به‌عنوان زمان شروع آگهی استفاده کنید. جریان متغیری را در لیست پخش چند متغیره شناسایی کنید که با تنظیمات صوتی و تصویری هر نمایه رمزگذاری مطابقت دارد.

نمونه آرایه پادهای تبلیغاتی
"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
    }
  ]
فهرست پخش محتوای چند متغیره مثال
#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
نمونه داده های گونه جمع آوری شده
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

تبلیغات را در مانیفست هر گونه درج کنید

برای هر جریان متفاوت، بخش‌های مانیفست محتوا را مرور کنید و مجموع زمان سپری شده محتوا را حفظ کنید. وقتی به موقعیت شروع یک غلاف تبلیغاتی رسیدید، فهرست بخش‌ها را از مانیفست غلاف آگهی استخراج کنید، فهرست بخش‌ها را در دو تگ #EXT-X-DISCONTINUITY بپیچید و فهرست را در مکان فعلی در مانیفست محتوا وارد کنید. . این روند را تا زمانی که همه دسته‌های تبلیغات و جریان‌های مختلف پردازش شوند ادامه دهید.

مانیفست های به دست آمده باید با استاندارد HLS مطابقت داشته باشند. بنابراین، بسته به این که مانیفست محتوای شما دارای چه ویژگی‌هایی است، ممکن است لازم باشد از مانیفست ترکیبی عبور نهایی کنید تا شماره‌های توالی رسانه، مدت زمان محتوا، شماره‌های توالی ناپیوستگی و هر برچسب دیگری را که برای گرفتن نیاز به به‌روزرسانی است، اصلاح کنید. بخش های تبلیغات جدید را در نظر بگیرید. هنگامی که هر گونه مغایرت با استاندارد تعمیر شد، هر مانیفست نوع خاص کاربر را برای میزبانی به CDN خود فشار دهید.

اگر مانیفست محتوای شما رمزگذاری شده است، باید آخرین کلید رمزگذاری پیدا شده قبل از شروع آگهی فعلی را در یک برچسب #EXT-X-KEY ذخیره کنید. سپس، باید تگ #EXT-X-KEY:METHOD=NONE اضافه کنید تا رمزگذاری قبل از اولین بخش از هر آگهی حذف شود. در نهایت، برای بازیابی رمزگذاری محتوا، باید یک کپی از تگ #EXT-X-KEY ذخیره شده را قبل از اولین بخش محتوا پس از هر پاد تبلیغاتی اضافه کنید.

نمونه داده های گونه جمع آوری شده
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
مانیفست محتوای نمونه

این محتوای مانیفست https://{...}/1080p.m3u8 است که در داده‌های نوع جمع‌آوری‌شده فهرست شده است.

#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
{...}
نمونه مانیفست غلاف آگهی

این محتویات https://dai.google.com/{...}/pod/1/profile/1080p.m3u8 مانیفست فهرست شده در داده های نوع جمع آوری شده است.

#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
نمونه مانیفست نوع دوخته شده

این مانیفست نوع دوخته شده حاصل خواهد بود که به CDN منتقل می‌شود و در https://cdn.{...}/{userid}/1080p.m3u8 میزبانی می‌شود.

#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
{...}

ساخت لیست پخش چند متغیره

آدرس‌های CDN را برای هر مانیفست نسخه تکمیل‌شده به همراه جزئیات نمایه کدگذاری منطبق جمع‌آوری کنید و نتایج را در یک مانیفست چند متغیره جدید جمع‌آوری کنید. این مانیفست خاص کاربر به عنوان پاسخ به درخواست مانیفست که در مرحله 1 دریافت کرده اید، برگردانده می شود.

فهرست پخش چند متغیره نهایی
#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

اگر جریانی را با فرمت MPEG DASH دوختید، فقط باید یک فایل واحد تولید کنید. این می‌تواند دوخت جریان‌های DASH را نسبت به HLS آسان‌تر کند.

یک فایل توصیف ارائه رسانه MPEG DASH (MPD) که به درستی آماده شده است باید از چندین دوره تشکیل شده باشد که هر یک شامل چندین نمایش باشد. هر نمایش باید با یکی از نمایه های رمزگذاری شما مطابقت داشته باشد. هر آگهی بازگردانده شده از Ad Manager نیز یک فایل MPD است که حاوی دنباله ای از دوره ها با نمایش های منطبق است.

برای اتصال این فایل‌های MPD به یکدیگر، با توجه به زمان‌های شروع هر آگهی شروع کنید. برای پیش از پخش، دوره‌های غلاف آگهی قبل از پخش را قبل از هر دوره محتوا درج کنید. برای پست‌ها، دوره‌های غلاف آگهی postroll را بعد از تمام دوره‌های محتوا درج کنید. در طول دوره‌های MPD محتوا تکرار کنید، و زمان پخش سپری شده را برای همه دوره‌های محتوای پردازش شده پیگیری کنید. وقتی به مرز بین دوره‌ها رسیدید که با زمان شروع یک غلاف آگهی مطابقت دارد، دوره‌های فایل MPD غلاف آگهی میان‌پرده منطبق را در آن مرز وارد کنید.

فایل MPD نهایی دوخته شده باید کاملاً با مشخصات MPEG_DASH مطابقت داشته باشد، بنابراین ممکن است لازم باشد یک بار دیگر فایل نهایی را تکرار کنید و زمان‌های شروع دوره را اصلاح کنید، مدت زمان ارائه رسانه را برای در نظر گرفتن دوره‌های تبلیغاتی جدید درج شده تعیین کنید، و موارد دیگر را حل کنید. درگیری هایی که ممکن است از فرآیند دوخت ناشی شود.

محتوای نمونه 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>

غلاف تبلیغاتی مثال JSON

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

MPD غلاف تبلیغاتی مثال

این محتوای mpd_uri از غلاف تبلیغاتی JSON در بالا است.

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

نمونه MPD دوخته شده

این را به عنوان پاسخ خود به درخواست مانیفست جریان اولیه ارائه دهید.

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

منابع اضافی