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 | یک پارامتر فرضی مربوط به قالب جریان. یکی از هر دو:
|
جریان محتوا را بازیابی کنید
از شناسه محتوای جمعآوریشده از درخواست مانیفست برای انتخاب جریان محتوا برای همپیوندی با تبلیغات استفاده کنید.
درخواست مانیفست آگهی
برای درخواست تبلیغات از 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. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر میزان بیت ویدیوی این نمایه را بر حسب بایت در ثانیه نشان می دهد. |
frames_per_second | Required | FPS ممیز شناور ویدیو. |
resolution | Required | یک مقدار رمزگذاری شده با JSON که حاوی «عرض» و «ارتفاع» ویدیو بر حسب پیکسل است. مثال: |
تنظیمات صدا | ||
codec | Required | رشته کدک RFC6381. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر نرخ بیت صوتی این نمایه را بر حسب بایت در ثانیه نشان می دهد. مثال: |
channels | Required | یک عدد صحیح نشان دهنده تعداد کانال های صوتی از جمله کانال های فرکانس پایین. |
sample_rate | Required | یک عدد صحیح که نشان دهنده نرخ نمونه برداری صوتی در هرتز است. مثال: |
تنظیمات زیرنویس | ||
format | Required | فرمت فایل مورد استفاده توسط زیرنویس های درون باند. مقادیر پشتیبانی شده webvtt یا ttml هستند. |
language | Optional | زبان زیرنویس به عنوان یک رشته زبان RFC5646. در صورت ارائه، این مقدار فقط برای رندر DASH استفاده می شود. مثال: |
گزینه های DAI | ||
dash_profile | Optional | نمایه MPEG-DASH برای اعمال در مانیفست آگهی. این تنظیم فقط برای مانیفست های DASH استفاده می شود. مقادیر مجاز live یا on-demand هستند. مقدار پیش فرض on-demand است. مقدار مقدار |
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 با IMA SDK:
- پخش سرویس Pod با DAI API
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 | یک پارامتر فرضی مربوط به قالب جریان. یکی از هر دو:
|
جریان محتوا را بازیابی کنید
از شناسه محتوای جمعآوریشده از درخواست مانیفست برای انتخاب جریان محتوا برای همپیوندی با تبلیغات استفاده کنید.
درخواست مانیفست آگهی
برای درخواست تبلیغات از 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. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر میزان بیت ویدیوی این نمایه را بر حسب بایت در ثانیه نشان می دهد. |
frames_per_second | Required | FPS ممیز شناور ویدیو. |
resolution | Required | یک مقدار رمزگذاری شده با JSON که حاوی «عرض» و «ارتفاع» ویدیو بر حسب پیکسل است. مثال: |
تنظیمات صدا | ||
codec | Required | رشته کدک RFC6381. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر نرخ بیت صوتی این نمایه را بر حسب بایت در ثانیه نشان می دهد. مثال: |
channels | Required | یک عدد صحیح نشان دهنده تعداد کانال های صوتی از جمله کانال های فرکانس پایین. |
sample_rate | Required | یک عدد صحیح که نشان دهنده نرخ نمونه برداری صوتی در هرتز است. مثال: |
تنظیمات زیرنویس | ||
format | Required | فرمت فایل مورد استفاده توسط زیرنویس های درون باند. مقادیر پشتیبانی شده webvtt یا ttml هستند. |
language | Optional | زبان زیرنویس به عنوان یک رشته زبان RFC5646. در صورت ارائه، این مقدار فقط برای رندر DASH استفاده می شود. مثال: |
گزینه های DAI | ||
dash_profile | Optional | نمایه MPEG-DASH برای اعمال در مانیفست آگهی. این تنظیم فقط برای مانیفست های DASH استفاده می شود. مقادیر مجاز live یا on-demand هستند. مقدار پیش فرض on-demand است. مقدار مقدار |
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 با IMA SDK:
- پخش سرویس Pod با DAI API
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 | یک پارامتر فرضی مربوط به قالب جریان. یکی از هر دو:
|
جریان محتوا را بازیابی کنید
از شناسه محتوای جمعآوریشده از درخواست مانیفست برای انتخاب جریان محتوا برای همپیوندی با تبلیغات استفاده کنید.
درخواست مانیفست آگهی
برای درخواست تبلیغات از 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. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر میزان بیت ویدیوی این نمایه را بر حسب بایت در ثانیه نشان می دهد. |
frames_per_second | Required | FPS ممیز شناور ویدیو. |
resolution | Required | یک مقدار رمزگذاری شده با JSON که حاوی «عرض» و «ارتفاع» ویدیو بر حسب پیکسل است. مثال: |
تنظیمات صدا | ||
codec | Required | رشته کدک RFC6381. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر نرخ بیت صوتی این نمایه را بر حسب بایت در ثانیه نشان می دهد. مثال: |
channels | Required | یک عدد صحیح نشان دهنده تعداد کانال های صوتی از جمله کانال های فرکانس پایین. |
sample_rate | Required | یک عدد صحیح که نشان دهنده نرخ نمونه برداری صوتی در هرتز است. مثال: |
تنظیمات زیرنویس | ||
format | Required | فرمت فایل مورد استفاده توسط زیرنویس های درون باند. مقادیر پشتیبانی شده webvtt یا ttml هستند. |
language | Optional | زبان زیرنویس به عنوان یک رشته زبان RFC5646. در صورت ارائه، این مقدار فقط برای رندر DASH استفاده می شود. مثال: |
گزینه های DAI | ||
dash_profile | Optional | نمایه MPEG-DASH برای اعمال در مانیفست آگهی. این تنظیم فقط برای مانیفست های DASH استفاده می شود. مقادیر مجاز live یا on-demand هستند. مقدار پیش فرض on-demand است. مقدار مقدار |
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>
منابع اضافی
- پخش POD با پخش IMA SDK:
- Pod Spering پخش با API DAI
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 | یک پارامتر فرضی مطابق با قالب جریان. یکی از هر دو:
|
جریان محتوا را بازیابی کنید
از شناسه محتوای جمع آوری شده از درخواست مانیفست برای انتخاب جریان محتوا برای بخیه با تبلیغات استفاده کنید.
درخواست غلاف تبلیغاتی
برای درخواست تبلیغات از مدیر 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. مثال: |
bitrate | Required | یک عدد صحیح که نمایانگر حداکثر ویدیوی این نمایه در بایت در ثانیه است. |
frames_per_second | Required | نقطه شناور FPS فیلم. |
resolution | Required | یک مقدار رمزگذاری شده JSON حاوی فیلم "عرض" و "ارتفاع" در پیکسل ها. مثال: |
تنظیمات صدا | ||
codec | Required | رشته کدک RFC6381. مثال: |
bitrate | Required | یک عدد صحیح که حداکثر بیتر صوتی این پروفایل را در بایت در ثانیه نشان می دهد. مثال: |
channels | Required | یک عدد صحیح که تعداد کانال های صوتی از جمله کانال های فرکانس پایین را نشان می دهد. |
sample_rate | Required | یک عدد صحیح که نشان دهنده میزان نمونه برداری صوتی در هرتز است. مثال: |
تنظیمات زیرنویس | ||
format | Required | قالب پرونده مورد استفاده در زیرنویس های درون باند. مقادیر پشتیبانی شده webvtt یا ttml هستند. |
language | Optional | زبان زیرنویس به عنوان یک رشته زبان RFC5646. در صورت ارائه ، این مقدار فقط برای رندر Dash استفاده می شود. مثال: |
گزینه های DAI | ||
dash_profile | Optional | نمایه MPEG-DASH برای استفاده از آشکار AD POD. این تنظیم فقط برای تجلی داش استفاده می شود. ارزشهای مجاز live یا on-demand هستند. مقدار پیش فرض on-demand است. مقدار مقدار |
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>
منابع اضافی
- پخش POD با پخش IMA SDK:
- Pod Spering پخش با API DAI