Pod Serving API دسترسی به بخشهای تبلیغاتی رمزگذاریشده و شرطیشده را فراهم میکند، به گونهای که میتوان آنها را مستقیماً در فهرست پخش رسانهای HLS یا MPEG-DASH قرار داد. برای MPEG-DASH، Pod Serving API همچنین یک الگوی مانیفست برای ارائه اطلاعات اضافی و زمینه برای این بخشهای تبلیغاتی ارائه میکند.
این راهنما بر روی اجرای یک سرور دستکاری مانیفست پایه Pod Serving برای استریم های زنده متمرکز شده است.
پیش نیاز: رویدادهای پخش زنده را در Google Ad Manager پیکربندی کنید
قبل از درخواست از API سرویس pod، باید برای هر جریانی که پردازش میکنید یک رویداد پخش زنده Ad Manager ایجاد کنید. میتوانید با استفاده از LiveStreamEventService API
یا رابط وب Google Ad Manager یک رویداد پخش زنده ایجاد کنید.
برای استفاده از یک رویداد پخش زنده با API سرویس پاد، باید چندین ویژگی رویداد خود را پر کنید:
-
customAssetKey
- یک شناسه سفارشی که برای این رویداد استفاده می شود. باید در تمام رویدادهای شبکه منحصر به فرد باشد. -
adTags
- نشانی اینترنتی تگ تبلیغاتی اصلی که توسط گردش کار ترافیک Ad Manager ایجاد می شود. -
dynamicAdInsertionType
- باید رویPOD_SERVING_REDIRECT
تنظیم شود. -
streamingFormat
- بر این اساس رویHLS
یاDASH
تنظیم کنید. -
segmentUrlAuthenticationKeyIds
- حداقل یک کلید HMAC برای امضای درخواستهای بخش تبلیغات استفاده میشود. -
daiEncodingProfileIds
- لیستی از شناسه های DAIEncodingProfile فعال شده برای این رویداد. -
startDateTime
- تاریخ و زمان شروع رویداد -
endDateTime
- تاریخ و زمان پایان برنامه ریزی شده این رویداد. اگرunlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis true.
نامحدودEndDateTime` - بولی. بالا را ببینید.
درخواستهای مانیفست جریان را دریافت کنید
دستکاری کننده مانیفست شما باید یک نقطه پایانی API برای گوش دادن به درخواست های مانیفست از برنامه مشتری پخش کننده ویدیو ارائه دهد. حداقل، این نقطه پایانی باید شناسه جریانی را از برنامه پخشکننده مشتری جمعآوری کند و باید یک مانیفست جریان دوخته شده را برگرداند. شناسه جریان برای شناسایی جلسه پخش جریانی به Ad Manager استفاده میشود.
همچنین باید اطلاعات دیگری را برای شناسایی جریان محتوای مناسب جمع آوری کنید، به عنوان مثال، شناسه محتوا.
مثالی از یک نقطه پایانی درخواست مانیفست بالقوه
GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
پارامترهای مسیر | |||||
---|---|---|---|---|---|
asset_key | شناسه فرضی مربوط به جریان مستقیم درخواستی در سیستم شما. | ||||
format | یک پارامتر فرضی مربوط به قالب جریان. یکی از هر دو:
|
پارامترهای پرس و جو | |
---|---|
stream_id | شناسه جریان Ad Manager از برنامه پخش کننده ویدیوی مشتری. |
جریان محتوا را بازیابی کنید
از شناسه محتوای جمعآوریشده از درخواست مانیفست برای انتخاب جریان محتوا برای همپیوندی با تبلیغات استفاده کنید.
بخش های تبلیغات را به جریان محتوا بپیچید
بسته به قالب پخش شما، پیوند URL های بخش تبلیغات متفاوت خواهد بود.
جریان های HLS
جریانهای HLS معمولاً بهعنوان یک مانیفست چند متغیره ارائه میشوند که شامل مجموعهای از پیوندها به مانیفستهای متغیر است که با هر یک از نمایههای رمزگذاری مطابقت دارد.
توجه: برای سادگی، این راهنما فرض میکند که رسانه HLS شما در قالبی کدگذاری شده است که صدا و تصویر را در یک فایل بخش ترکیب میکند.
لیست های پخش چند متغیره پروکسی
برای پردازش مانیفست نوع انتخابی پخش کننده، باید هر نشانی اینترنتی فهرست پخش نسخه را در فهرست پخش چند متغیره اصلی با یک فراخوان نقطه پایانی دیگر به دستکاری کننده جایگزین کنید.
مراحل باقیمانده برای دوخت HLS فرض میکند که یک مانیفست نوع واحد در حال پردازش است.
مثالی از یک نقطه پایانی درخواست نوع بالقوه
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
پارامترهای مسیر | |
---|---|
asset_key | شناسه فرضی مربوط به جریان مستقیم درخواستی در سیستم شما. |
variant | یک پارامتر فرضی حاوی یک شناسه برای نوع خاص در حال پردازش. |
پارامترهای پرس و جو | |
---|---|
stream_id | شناسه جریان Ad Manager از برنامه پخش کننده ویدیوی مشتری. در اینجا برای شناسایی یک جلسه کاربر با دستکاری کننده مانیفست استفاده می شود. |
نمونه مانیفست چند متغیره پردازش نشده
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://cdn.{...}/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://cdn.{...}/360p.m3u8
نمونه مانیفست چند متغیره پروکسی
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/1080p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,CODECS="avc1.4d000c,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/720p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=640x360,CODECS="avc1.4d000d,mp4a.40.5"
https://{manifest_manipulator}/api/video/tears_of_steel/variant/360p.m3u8?stream_id=6e69425c-0ac5-43ef-b070-c5143ba68541:CHS
بخشهای استراحت آگهی را شناسایی کنید و ناپیوستگیها را درج کنید
همانطور که مانیفست نوع را پردازش می کنید، زمان شروع، مدت زمان و فهرست وقفه تبلیغاتی بعدی را پیگیری کنید، تا زمانی که مانیفست پویا در حال پردازش شامل بخش هایی باشد که با محتوای آگهی جایگزین می شوند.
بسته به رمزگذار شما، وقفههای تبلیغاتی ممکن است به روشهای مختلفی از بخشهای محتوا مشخص شود. یکی از راههای متداول برای تعیین وقفه تبلیغاتی این است که قسمتهای تبلیغات را با یک تگ #EXT-X-CUE-OUT
مقدمه کنید و آن را با یک تگ #EXT-X-CUE-IN
دنبال کنید.
برای جدا کردن وقفههای تبلیغاتی میزبانی شده توسط Google از بخشهای محتوای خود، باید برچسبهای #EXT-X-DISCONTINUITY
را در ابتدا و انتهای هر وقفه تبلیغاتی درج کنید. اگر این تگهای ناپیوستگی در مانیفست نهایی ظاهر نشوند، بازپخش با شکست مواجه میشود.
URI های بخش تبلیغات درج شده رمزگذاری نشده هستند. اگر محتوای شما رمزگذاری شده است، باید با مشخص کردن #EXT-X-KEY:METHOD=NONE
قبل از اولین بخش تبلیغاتی هر وقفه تبلیغاتی، رمزگذاری را حذف کنید و بعد از وقفه تبلیغاتی دوباره آن را اضافه کنید.
مانیفست نمونه (اصلی)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-CUE-OUT:15.000
#EXTINF:5.005,
contentorigin.com/3.ts
#EXTINF:5.005,
contentorigin.com/4.ts
#EXTINF:5.005,
contentorigin.com/5.ts
#EXTINF:5.000,d
contentorigin.com/6.ts
#EXT-X-CUE-IN
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
آشکار با درج ناپیوستگی
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXTINF:5.005,
#EXT-X-DISCONTINUITY
{... New segments will go here ...}
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
پردازش بخش های غلاف تبلیغاتی
برای هر بخش در یک آگهی تبلیغاتی، باید چند مقدار اضافی را دنبال کنید:
-
segment_number
: نمایه بخش در غلاف آگهی که با صفر شروع می شود. یا "init" برای بخش اولیه سازی mp4. -
segment_duration
: مدت زمان بخش فعلی بر حسب میلی ثانیه. این مقدار باید برای همه بخش ها به جز آخرین قسمت در غلاف یکسان باشد. -
segment_offset
: جبران بخش با افزودن مدت زمان بخش قبلی به افست بخش آن بر حسب میلی ثانیه محاسبه می شود. -
last
: مقدار بولی که آخرین بخش را در یک آگهی تبلیغاتی مشخص می کند. پیش فرض به نادرست.
URL های بخش تبلیغات بسازید
هر بخش در وقفه تبلیغاتی را با یک URL با فرمت جایگزین کنید:
/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/{pod_identifier}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
پارامترهای مسیر | |
---|---|
network_code | کد شبکه Ad Manager 360 برای این شبکه. |
custom_asset_key | کلید دارایی پخش مستقیم سفارشی که در LiveStreamEventService API یا در صفحه پخش زنده در رابط وب Ad Manager 360 مشخص شده است. |
pod_identifier | فرمت های زیر پشتیبانی می شوند: pod/{integer} شناسه عددی برای وقفه تبلیغاتی فعلی. شناسههای غلاف آگهی بهصورت تدریجی برای هر رویداد وقفه تبلیغاتی، از ad_break_id/{string} شناسه رشته برای وقفه تبلیغاتی فعلی. |
profile_name | شناسه پروفایل مورد درخواست، |
segment_number | شاخص این بخش در غلاف تبلیغات فعلی، از صفر شروع می شود. هنگام استفاده از کانتینر MP4، بخش مقداردهی اولیه را می توان با تنظیم segment_number روی "init" درخواست کرد. |
پارامترهای پرس و جو | ||
---|---|---|
stream_id | مورد نیاز | پارامتر stream_id کاربر از درخواست Stream Create برگردانده شد. |
sd | مورد نیاز | segment_duration |
so | اختیاری | segment_offset اگر |
pd | الزامی است، به جز رویدادهایی که وقفههای تبلیغاتی بدون مدت فعال هستند | مدت زمان وقفه تبلیغاتی (بر حسب میلی ثانیه). همچنین به عنوان ad_pod_duration نیز نامیده می شود. |
auth-token | مورد نیاز | یک کد HMAC امضا شده و کدگذاری شده با URL برای این غلاف تبلیغاتی. |
last | اختیاری | Boolean نشان دهنده آخرین بخش در وقفه تبلیغاتی است. پیش فرض به نادرست. |
مقادیر پارامتر پرس و جو باید به درستی کدگذاری شوند تا از نظر URL ایمن باشند. این به ویژه برای فیلد auth-token
مهم است، زیرا می تواند شامل /
، +
و =
کاراکتر باشد.
مانیفست نمونه (پس از جایگزینی بخش)
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.005,
contentorigin.com/1.ts
#EXTINF:5.005,
contentorigin.com/2.ts
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/ad_break_id/adbreak1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/ad_break_id/adbreak1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:5.005,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/ad_break_id/adbreak1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=ad_break_id%3adbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2
#EXTINF:3.000,
https://dai.google.com/linear/pods/v1/seg/network/6062/custom_asset/iYdOkYZdQ1KFULXSN0Gi7g/ad_break_id/adbreak1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=ad_break_id%3Dadbreak1~custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~hmac%3D44bf78223c240cbc5bae3cdfd794bfc6971b6583cd296f44ef3a46944605cf9a&stream_id=fe6c9136-09a4-4ff6-862e-daee1dea0e1b:MRN2&last=true
#EXT-X-DISCONTINUITY
#EXTINF:5.005,
contentorigin.com/7.mp4
#EXTINF:5.005,
contentorigin.com/8.mp4
تبریک می گویم! اکنون در حال پخش جریانی زنده با بخشهای تبلیغاتی ارائهشده توسط DAI Pod Serving API هستید.
جریان های DASH
جریانهای DASH بهعنوان یک فایل MPD ارائه میشوند، که شامل تمام رمزگذاریهای جریان در یک فایل است، که در آن محتوا بهصورت مجموعهای از نقطهها نشان داده میشود.
الگوی دوره درخواست
از Google Ad Manager یک الگوی دوره درخواست کنید. این الگو پس از پر شدن ماکروهای موجود در آن به دوره استراحت تبلیغاتی شما تبدیل خواهد شد.
شما باید این الگو را فقط یک بار در هر جلسه پخش جریانی درخواست کنید و با هر وقفه تبلیغاتی آن را برای استفاده مجدد در حافظه پنهان ذخیره کنید.
درخواست الگوی دوره endpointhjf
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
پارامترهای مسیر | |
---|---|
network_code | کد شبکه Ad Manager 360 ناشر. |
custom_asset | کلید دارایی سفارشی رویداد پخش زنده در Google Ad Manager. |
پارامترهای پرس و جو | |
---|---|
stream_id | شناسه جریان Ad Manager از پخش کننده ویدیوی مشتری. |
پاسخ JSON | |
---|---|
dash_period_template | رشته XML الگوی نقطه. |
segment_duration_ms | مدت زمان هر بخش رسانه تبلیغاتی در الگوی دوره خط تیره، بر حسب میلی ثانیه. |
درخواست نمونه (cURL)
curl https://dai.google.com/linear/pods/v1/dash/network/21775744923/custom_asset/tears_of_steel/pods.json?stream-id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS
پاسخ نمونه
{"dash_period_template":"<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$> <BaseURL>https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/</BaseURL>
<SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id={a-stream-id}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
<SegmentTimeline>
<S t="0" d="5" r="$$number-of-repeated-segments$$"/>
</SegmentTimeline>
</SegmentTemplate>
<AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
<InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
<Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
</AdaptationSet>
<AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
<Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
</AdaptationSet>
</Period>",
"segment_duration_ms":5000}
قالب دوره را پر کنید
الگوی دوره شامل چندین ماکرو است که باید برای هر وقفه تبلیغاتی آنها را جایگزین کنید. همه ماکروها باید جایگزین شوند. ماکروهای استفاده نشده باید با یک رشته خالی ("") جایگزین شوند.
ماکرو | توضیحات | مثال |
---|---|---|
$$pod-id$$ | شاخص غلاف آگهی این دوره را نشان می دهد. این مقدار باید برای یک غلاف در تمام جلسات بیننده مطابقت داشته باشد. | 1 |
$$period-start$$ | زمانی که دوره در MPD فعلی شروع می شود. یک ویژگی اختیاری که باید با start="###" جایگزین شود، که در آن ### زمان ارائه ای است که در آن وقفه تبلیغاتی شروع می شود. اگر زمان شروع دوره ارائه نشده باشد، این ماکرو باید با یک رشته خالی جایگزین شود. | start="PT2H33M30S" |
$$period-duration$$ | مدت زمان دوره کامل آگهی. یک ویژگی اختیاری که باید با duration="###" جایگزین شود، که در آن ### مدت زمان دوره تبلیغ در قالب استاندارد مدت زمان DASH است. اگر مدت زمان ارائه نشده باشد، این ماکرو باید با یک رشته خالی جایگزین شود. | duration="PT15S" |
$$pod-duration$$ | مدت زمان مورد انتظار تبلیغاتی که باید برای این pod تصمیم گیری شود، بر حسب میلی ثانیه. | 15000 |
$$number-of-repeated-segments$$ | این مقدار با تقسیم مدت زمان تبلیغات (بر حسب میلی ثانیه) بر مقدار segment_duration_ms و گرد کردن به نزدیکترین عدد صحیح محاسبه می شود. | 3 |
$$cust_params$$ | این ماکرو را میتوان با پارامترهای هدفیابی سفارشی منحصر به فرد برای استراحت فعلی جایگزین کرد. ارائه شده است. مقدار باید همانطور که در این مقاله مرکز راهنمای Ad Manager توضیح داده شده است قالب بندی شود. اگر هیچ پارامتر سفارشی مورد نیاز نیست، این ماکرو باید با یک رشته خالی جایگزین شود. | &cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2 |
$$scte35$$ | این ماکرو باید با یک مقدار scte35 که مختص آن وقفه تبلیغاتی است جایگزین شود، در صورت ارائه. اگر به اطلاعات scte35 نیاز نیست، این ماکرو باید با یک رشته خالی جایگزین شود. | /DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR |
$$token$$ | یک نشانه HMAC امضا شده با کد URL. این توکن مورد نیاز است. | custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~hmac%3D6a8c44c72e4718ff63ad2284edf2a8b9e319600b430349d31195c99b505858c9 |
الگوی دوره خام، حاوی ماکروها
<Period id="adpod-$$pod-id$$" $$period-start$$ $$period-duration$$>
<BaseURL>
https://dai.google.com/linear/pods/v1/seg/event/{event_code}/pods/$$pod-id$$/profile/
</BaseURL>
<SegmentTemplate initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&sd=5000&pd=$$pod-duration$$&cust_params=$$cust_params$$&scte35=$$scte35$$&auth_token=$$token$$" startNumber="1" presentationTimeOffset="0">
<SegmentTimeline>
<S t="0" d="5" r="$$number-of-repeated-segments$$"/>
</SegmentTimeline>
</SegmentTemplate>
<AdaptationSet id="0" width="1280" height="720" frameRate="30" contentType="video" subsegmentAlignment="true" startWithSAP="1">
<InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation mimeType="video/mp4" codecs="avc1.640029" id="a943ff679a2f3e71d9181a21b7542122g" bandwidth="3200000"/>
<Representation mimeType="video/mp4" codecs="avc1.640029" id="abbbd80q4w5ce2fs28308rd1f4g4bat0" bandwidth="1500000"/>
</AdaptationSet>
<AdaptationSet id="1" contentType="audio"> <Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="a87ff679a2f3e71d9181a67b7542122c" bandwidth="95000"/>
<Representation audioSamplingRate="48000" mimeType="audio/mp4" codecs="mp4a.40.2" id="eccbc87e4b5ce2fe28308fd9f2a7baf3" bandwidth="127000"/>
</AdaptationSet>
</Period>
دوره آگهی پرجمعیت
<Period id="pod-0" start="PT5H50M12S">
<BaseURL>
https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
</BaseURL>
<SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&sd=5000&pd=30000&cust_params=&auth-token=&scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&scte35=">
<SegmentTimeline>
<S d="5" r="1"/>
</SegmentTimeline>
</SegmentTemplate>
<AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
<InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
</Period>
دوره پر شده خود را در مانیفست DASH وارد کنید
در نهایت، دوره مناسب در مانیفست خام خود را با دوره تبلیغاتی جدید پر شده جایگزین کنید و مانیفست نهایی دوخته شده را برای پخش به مشتری ویدیویی درخواست کننده برگردانید.
نمونه مانیفست محتوای خام
<?xml version="1.0"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
<BaseURL>
http://example.com/tears_of_steel/
</BaseURL>
<Period start="PT0S">
<AdaptationSet bitstreamSwitching="true">
<Representation id="0" codecs="avc1" mimeType="video/mp4" width="1920" height="1080" startWithSAP="1" bandwidth="500000">
<SegmentBase>
<Initialization sourceURL="segments/1080/1.m4s" range="0-862"/>
</SegmentBase>
<SegmentList duration="15">
<SegmentURL media="segments/1080p/2.m4s" mediaRange="863-7113"/>
<SegmentURL media="segments/1080p/3.m4s" mediaRange="7114-14104"/>
<SegmentURL media="segments/1080p/4.m4s" mediaRange="14105-17990"/>
...
</SegmentList>
</Representation>
<Representation id="1" codecs="avc1" mimeType="video/mp4" width="1280" height="720" startWithSAP="1" bandwidth="250000">
<SegmentBase>
<Initialization sourceURL="segments/720p/1.m4s" range="0-864"/>
</SegmentBase>
<SegmentList duration="15">
<SegmentURL media="segments/720p/2.m4s" mediaRange="865-11523"/>
<SegmentURL media="segments/720p/3.m4s" mediaRange="11524-25621"/>
<SegmentURL media="segments/720p/4.m4s" mediaRange="25622-33693"/>
...
</SegmentList>
</Representation>
<Representation id="1" codecs="avc1" mimeType="video/mp4" width="640" height="480" startWithSAP="1" bandwidth="100000">
<SegmentBase>
<Initialization sourceURL="segment/480p/1.m4s" range="0-865"/>
</SegmentBase>
<SegmentList duration="15">
<SegmentURL media="segment/480p/2.m4s" mediaRange="866-26970"/>
<SegmentURL media="segment/480p/3.m4s" mediaRange="26971-72543"/>
<SegmentURL media="segment/480p/4.m4s" mediaRange="72544-95972"/>
...
</SegmentList>
</Representation>
...
</AdaptationSet>
</Period end>
</MPD>
نمونه مانیفست دوخته شده
<?xml version="1.0"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:DASH:schema:MPD:2011" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011" profiles="urn:mpeg:dash:profile:isoff-main:2011" type="static" mediaPresentationDuration="PT0H9M56.46S">
<BaseURL>
http://example.com/tears_of_steel/
</BaseURL>
<Period id="pod-0" start="PT5H50M12S">
<BaseURL>
https://dai.google.com/linear/pods/v1/seg/event/M-nTcApTRTi6CEGIt4GYMw/pod/0/profile/
</BaseURL>
<SegmentTemplate startNumber="0" media="1080p/0.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&sd=5000&pd=30000&cust_params=&auth-token=&scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&pd=30000&cust_params=&auth-token=&scte35=$$scte35$$">
<SegmentTimeline>
<S d="5" r="1"/>
</SegmentTimeline>
</SegmentTemplate>
<AdaptationSet mimeType="video/mp4" scanType="progressive" contentType="video">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation width="768" height="432" frameRate="30" codecs="avc1.42c01e" id="fmp4-video-1200k" bandwidth="1300000">
<InbandEventStream schemeIdUri="https://developer.apple.com/streaming/emsg-id3"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" scanType="progressive" contentType="audio">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="fmp4-audio-128kbps" bandwidth="128000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
تبریک می گویم! اکنون در حال پخش جریانی زنده DASH با بخشهای تبلیغاتی ارائهشده توسط DAI Pod Serving API هستید.
منابع اضافی
- پخش سرویس Pod با IMA SDK:
- پخش سرویس Pod با DAI API