دستکاری کننده مانیفست برای جریان های 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 به نقطه پایانی Ad Manager ارسال کند. این درخواست همچنین شامل شناسه جریانی است که در مرحله 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 pod ad

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

منابع اضافی

،

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 به نقطه پایانی Ad Manager ارسال کند. این درخواست همچنین شامل شناسه جریانی است که در مرحله 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 pod ad

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

منابع اضافی

،

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 به نقطه پایانی Ad Manager ارسال کند. این درخواست همچنین شامل شناسه جریانی است که در مرحله 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 است.

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

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

مثال آرایه غلافهای تبلیغاتی
"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

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

برای هر جریان متفاوت ، بخش های مانیفست محتوا را طی کنید و در کل زمان محتوای سپری شده نگه دارید. هنگامی که به موقعیت شروع یک غلاف آگهی رسیدید ، لیست بخش های موجود از مانیفست AD POD را استخراج کنید ، لیست بخش ها را در دو برچسب #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 }/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 جریانی را بخیه می کنید ، فقط باید یک فایل واحد تولید کنید. این می تواند باعث شود که جریانهای داش نسبت به HLS بخیه را آسان تر کنند.

یک پرونده ارائه شده به درستی تهیه شده MPEG DASH DESCRIPTION DESCRIPTION (MPD) باید از چندین دوره تشکیل شود که هر یک حاوی چندین بازنمایی است. هر نمایندگی باید با یکی از پروفایل های رمزگذاری شما مطابقت داشته باشد. هر غلاف تبلیغاتی که از مدیر AD برگشت داده شده نیز یک فایل MPD است که حاوی دنباله ای از دوره ها با بازنمودهای تطبیق است.

برای بخیه این پرونده های MPD در کنار هم ، با توجه به زمان شروع برای هر غلاف تبلیغاتی ، شروع کنید. برای پیش رول ، دوره های غلاف تبلیغاتی را قبل از هر دوره محتوا وارد کنید. برای پس از رول ، دوره های غلاف تبلیغاتی PoStroll را پس از تمام دوره های محتوا وارد کنید. در دوره های موجود در محتوا MPD ، پیگیری زمان پخش سپری شده برای کلیه دوره های محتوای پردازش شده را تکرار کنید. هنگامی که بین دوره هایی که مربوط به زمان شروع یک غلاف است ، به مرز می رسید ، دوره هایی را از پرونده MPD AD Mid-Roll AD در آن مرز قرار دهید.

پرونده 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>

مثال AD POD JSON

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

مثال AD POD MPD

این محتوای mpd_uri از AD POD 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>

منابع اضافی

،

API Pod Spering API دسترسی به غلافهای تبلیغاتی و ویدئویی سازگار و بایت را فراهم می کند که به گونه ای تهیه می شود که می توان آنها را مستقیماً در یک لیست پخش رسانه های کاربر کاربر یا MPEG-Dash قرار داد.

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

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

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

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

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

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

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

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

درخواست غلاف تبلیغاتی

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

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

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

جسد JSON

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

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

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

فقط برای پاسخ های 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 برای استفاده از آشکار AD POD. این تنظیم فقط برای تجلی داش استفاده می شود. ارزشهای مجاز 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 هر تبلیغی را که قبلاً در پاسخ ad_pods انتخاب شده و پردازش را متوقف می کند ، برمی گرداند.
sam_id Optional یک کلید اشکال زدایی متناوب را مشخص می کند که می تواند برای جستجوی جلسات در مانیتور فعالیت جریان استفاده شود.

پاسخ

پارامترهای پاسخ
valid_for مدت زمانی که این لیست های پخش AD POD در قالب dhms (روز ، ساعت ، دقیقه ، ثانیه) معتبر هستند.
valid_until تاریخ و زمانی که این لیست های پخش POD AD به عنوان یک رشته DateTime ISO8601 معتبر هستند ، در yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm فرمت.
ad_pods لیستی از غلافهای تبلیغاتی که برای این جریان انتخاب شده اند.
غلاف تبلیغاتی
manifest_uris فقط برای جریان HLS. نقشه ای از شناسه های پروفایل رمزگذاری به HLS آشکار URI.
mpd_uri فقط برای جریان های داش. Uri of 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 است.

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

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

مثال آرایه غلافهای تبلیغاتی
"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

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

برای هر جریان متفاوت ، بخش های مانیفست محتوا را طی کنید و در کل زمان محتوای سپری شده نگه دارید. هنگامی که به موقعیت شروع یک غلاف آگهی رسیدید ، لیست بخش های موجود از مانیفست AD POD را استخراج کنید ، لیست بخش ها را در دو برچسب #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 }/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 جریانی را بخیه می کنید ، فقط باید یک فایل واحد تولید کنید. این می تواند باعث شود که جریانهای داش نسبت به HLS بخیه را آسان تر کنند.

یک پرونده ارائه شده به درستی تهیه شده MPEG DASH DESCRIPTION DESCRIPTION (MPD) باید از چندین دوره تشکیل شود که هر یک حاوی چندین بازنمایی است. هر نمایندگی باید با یکی از پروفایل های رمزگذاری شما مطابقت داشته باشد. هر غلاف تبلیغاتی که از مدیر AD برگشت داده شده نیز یک فایل MPD است که حاوی دنباله ای از دوره ها با بازنمودهای تطبیق است.

برای بخیه این پرونده های MPD در کنار هم ، با توجه به زمان شروع برای هر غلاف تبلیغاتی ، شروع کنید. برای پیش رول ، دوره های غلاف تبلیغاتی را قبل از هر دوره محتوا وارد کنید. برای پس از رول ، دوره های غلاف تبلیغاتی PoStroll را پس از تمام دوره های محتوا وارد کنید. در دوره های موجود در محتوا MPD ، پیگیری زمان پخش سپری شده برای کلیه دوره های محتوای پردازش شده را تکرار کنید. هنگامی که بین دوره هایی که مربوط به زمان شروع یک غلاف است ، به مرز می رسید ، دوره هایی را از پرونده MPD AD Mid-Roll AD در آن مرز قرار دهید.

پرونده 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>

مثال AD POD JSON

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

مثال AD POD MPD

این محتوای mpd_uri از AD POD 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>

منابع اضافی