توفّر واجهة برمجة تطبيقات عرض الإعلانات Pod Inventory API الوصول إلى شرائح الإعلانات المشفَّرة والمشروطة يتم إعدادها بطريقة يمكن دمجها مباشرةً في بروتوكول HLS موجَّه للمستخدمين أو قائمة تشغيل وسائط MPEG-DASH. بالنسبة إلى MPEG-DASH، توفّر واجهة برمجة تطبيقات Pod serve API أيضًا نموذج البيان لتوفير معلومات وسياقات إضافية لهذه الإعلانات الأقسام.
يركّز هذا الدليل على تنفيذ معالجة أساسية لبيان عرض الإعلانات المتسلسلة. الخادم لأحداث البث المباشر
شرط أساسي: ضبط أحداث البث المباشر في "مدير إعلانات Google"
قبل تقديم أي طلبات من واجهة برمجة تطبيقات pod serve API، عليك إنشاء إعلان.
حدث بث مباشر خاص بالمدير لكل بث تجري معالجته. يمكنك إنشاء
بث مباشر باستخدام
LiveStreamEventService API
أو
واجهة ويب "مدير إعلانات Google".
لاستخدام حدث البث المباشر مع pod offer API، عليك اتّباع الخطوات التالية: لتعبئة عدّة سمات للحدث:
customAssetKey
- معرّف مخصّص سيتم استخدامه لهذا الحدث يجب أن يكون فريدة عبر جميع أحداث الشبكة.adTags
- عنوان URL لعلامة الإعلان الأساسية التي يتم إنشاؤها من خلال عدد الزيارات في "مدير الإعلانات" سير العمل.dynamicAdInsertionType
- يجب ضبطها علىPOD_SERVING_REDIRECT
.streamingFormat
: اضبط السمة علىHLS
أوDASH
وفقًا لذلك.segmentUrlAuthenticationKeyIds
- واحد على الأقل مفتاح HMAC يُستخدم للتوقيع على طلبات شرائح الإعلان.daiEncodingProfileIds
- قائمة DAIEncodingProfile أرقام التعريف المفعَّلة لهذا الحدثstartDateTime
- تاريخ بدء الحدث ووقتهendDateTime
- تاريخ ووقت الانتهاء المجدولان لهذا الحدث هذه السمة مطلوبة إذا كانت القيمةunlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis true.
unlimitedEndDateTime` - القيمة المنطقية. راجِع أعلاه.
تلقّي طلبات بيان البث
يجب أن يوفر معالج البيان نقطة نهاية لواجهة برمجة التطبيقات للاستماع إلى البيان الطلبات من تطبيق عميل مشغّل الفيديو. على الأقل، يجب أن تكون نقطة النهاية هذه جمع معرّف مصدر بيانات من تطبيق مشغّل العميل، ويجب أن يعرض معرّفًا مجمّعًا ملف بيان البث. يتم استخدام رقم تعريف مصدر البيانات لتحديد جلسة البث من أجل مدير.
عليك أيضًا جمع بعض المعلومات الأخرى لتحديد الجهة المناسبة مصدر بيانات، مثل Content ID
مثال على نقطة نهاية محتملة لطلب البيان
GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
مَعلمات المسار | |||||
---|---|---|---|---|---|
asset_key |
معرّف افتراضي يتطابق مع البث المباشر المطلوب في نظامك | ||||
format |
مَعلمة افتراضية تتوافق مع تنسيق البث. يجب استخدام أحد الخيارَين التاليَين:
|
معامِلات طلب البحث | |
---|---|
stream_id |
رقم تعريف مصدر البيانات في "مدير الإعلانات" من تطبيق مشغّل الفيديو للعميل. |
استرداد بث المحتوى
استخدام Content ID الذي تم جمعه من طلب البيان لاختيار المحتوى البث للربط بالإعلانات
دمج شرائح الإعلانات في بث المحتوى
سيختلف دمج عناوين URL لشرائح الإعلانات حسب تنسيق البث الذي تستخدمه.
مجموعات بث HLS
وتتوفر عادةً مجموعات بث HLS كبيان متعدد المتغيرات، والذي يحتوي على مجموعة من الروابط إلى بيانات الصيغ، والتي تتوافق مع كل ترميز الشخصية.
ملاحظة: للتبسيط، يفترض هذا الدليل أنّ وسائط HLS مرمّزة في الذي يدمج الصوت والفيديو في ملف المقطع نفسه.
قوائم تشغيل خادم وكيل متعدد المتغيرات
يجب استبدال عنوان URL لكل خيار من خيارات التشغيل في الإصدار الأصلي المتعدد المتغيّرات. تتضمن قائمة تشغيل تتضمن استدعاء آخر لنقطة النهاية إلى المشغّل لمعالجة طلب تشغيل بيان خيار المنتج المحدد.
ستفترض الخطوات المتبقية لدمج بروتوكول HLS أنّ بيان صيغة واحدة قيد المعالجة.
مثال على نقطة نهاية لطلب خيار منتج محتمَل
GET /api/video/{asset_key}/variant/{variant_id}.m3u8
Host: {your_domain}
مَعلمات المسار | |
---|---|
asset_key |
معرّف افتراضي يتطابق مع البث المباشر المطلوب في نظامك |
variant |
مَعلمة افتراضية تحتوي على معرّف لخيار المنتج المحدّد قيد المعالجة. |
معامِلات طلب البحث | |
---|---|
stream_id |
رقم تعريف مصدر البيانات في "مدير الإعلانات" من تطبيق مشغّل الفيديو للعميل. استخدمته هنا تحديد جلسة المستخدم باستخدام معالج البيان. |
مثال على بيان متعدد المتغيرات لم تتم معالجته
#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
: فهرس التقسيم ضمن مجموعة الإعلانات المتسلسلة، بدءًا من صفر. أو "بدء" لشريحة تهيئة mp4.segment_duration
: مدة الشريحة الحالية بالمللي ثانية هذا النمط يجب أن تكون القيمة هي نفسها لجميع الأجزاء باستثناء القيمة الأخيرة في المجموعة.segment_offset
: تم احتساب معادلة الشريحة عن طريق إضافة السابق مدة المقطع إلى إزاحة الجزء بالمللي ثانيةlast
: قيمة منطقية تحدِّد آخر شريحة في مجموعة الإعلانات المتسلسلة. الإعدادات التلقائية إلى false.
إنشاء عناوين URL لشرائح الإعلانات
استبدِل كل قسم داخل الفاصل الإعلاني بعنوان URL بالتنسيق:
/linear/pods/v1/seg/network/{network_code}/custom_asset/{custom_asset_key}/pod/{pod_id}/profile/{profile_name}/{segment_number}.(ts|mp4|vtt|aac|ac3|eac3)
مَعلمات المسار | |
---|---|
network_code
|
رمز شبكة "مدير الإعلانات 360" لهذه الشبكة. |
custom_asset_key
|
مفتاح مادة عرض البث المباشر المخصّص والمحدد في LiveStreamEventService واجهة برمجة التطبيقات أو على صفحة البث المباشر في واجهة ويب "مدير الإعلانات 360". |
pod_id
|
معرّف الفاصل الإعلاني يجب أن يكون عددًا صحيحًا يبدأ في
1 ويزيد بمقدار واحد لكل فاصل إعلاني.
يجب أن تكون هذه القيمة متطابقة على مستوى جميع المستخدمين الذين يشاهدون الفاصل الإعلاني نفسه في للفعالية الحالية |
profile_name
|
معرّف الملف التجاري المطلوب |
segment_number
|
فهرس هذه الشريحة داخل مجموعة الإعلانات المتسلسلة الحالية، يبدأ من الصفر. عند استخدام حاوية MP4، يمكن طلب شريحة الإعداد من خلال ضبط شريحة_الرقم على "بدء". |
معامِلات طلب البحث | ||
---|---|---|
stream_id
|
مطلوب | تم عرض مَعلمة stream_id للمستخدم من "إنشاء ساحة المشاركات".
طلبك.
|
sd
|
مطلوب | segment_duration
|
so
|
اختياري | segment_offset
في حال عدم توفّر السمة |
pd
|
مطلوب، باستثناء الأحداث التي تم فيها تفعيل فواصل إعلانية بلا مدة | مدة الفاصل الإعلاني (بالمللي ثانية) يُشار إليه أيضًا باسم
ad_pod_duration
|
auth-token
|
مطلوب | ملف موقع وبترميز url رمز HMAC المميز لمجموعة الإعلانات المتسلسلة هذه |
last
|
اختياري | قيمة منطقية تشير إلى المقطع الأخير في الفاصل الإعلاني. وتكون القيمة التلقائية على "خطأ". |
يجب ترميز قيم معلَمات طلب البحث بشكل صحيح لتكون آمنة لعنوان 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/pod/1/profile/devrel4628000/0.ts?sd=5005&so=0&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~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/pod/1/profile/devrel4628000/1.ts?sd=5005&so=5005&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~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/pod/1/profile/devrel4628000/2.ts?sd=5005&so=10010&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~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/pod/1/profile/devrel4628000/3.ts?sd=3000&so=15015&pd=18015&auth-token=custom_asset_key%3DiYdOkYZdQ1KFULXSN0Gi7g~cust_params%3D~exp%3D1489680000~network_code%3D6062~pd%3D180000~pod_id%3D5~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 Inventory API
مصادر بيانات DASH
تتوفر مجموعات بث DASH كملف MPD الذي يحتوي على جميع ترميزات البث في ملف واحد، حيث يتم تمثيل المحتوى كسلسلة من النقاط.
نموذج فترة الطلب
يمكنك طلب نموذج فترة من "مدير إعلانات Google". سيصبح هذا النموذج فترة الفاصل الإعلاني، بعد تعبئة وحدات الماكرو التي تحتوي عليها.
يجب طلب هذا النموذج مرة واحدة فقط لكل جلسة بث، وحفظه في ذاكرة التخزين المؤقت إعادة استخدامها مع كل فاصل إعلاني
نقطة النهاية لطلب نموذج الفترة
GET /linear/pods/v1/dash/network/{network_code}/custom_asset/{custom_asset}/pods.json
Host: dai.google.com
Content-Type: application/json
مَعلمات المسار | |
---|---|
network_code |
رمز شبكة "مدير الإعلانات 360" للناشر. |
custom_asset |
مفتاح مادة العرض المخصّص لحدث البث المباشر في "مدير إعلانات Google" |
معامِلات طلب البحث | |
---|---|
stream_id |
رقم تعريف البث في "مدير الإعلانات" من مشغّل الفيديو للعميل. |
استجابة 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$$ |
المدة المتوقّعة لعرض الإعلانات في هذه المجموعة الإعلانية، مللي ثانية. | 15000 |
$$number-of-repeated-segments$$ |
ويتم احتساب هذه القيمة عن طريق قسمة مدة الفترة الإعلانية ( ملي ثانية) على قيمة segmentation_duration_ms، والتقريب إلى لأقرب عدد صحيح. | 3 |
$$cust_params$$ |
يمكن استبدال وحدة الماكرو هذه بمعلمات الاستهداف المخصصة الفريدة الفاصل الإعلاني الحالي، إذا المقدمة. يجب تنسيق القيمة على النحو التالي الموضحة في "مدير الإعلانات" هذا مقالة مركز المساعدة. في حال عدم الحاجة إلى مَعلمات مخصّصة، يجب استبدال وحدة الماكرو هذه بأخرى فارغة السلسلة. |
&cust_params=section%3Dblog%26anotherKey%3Dvalue1%2Cvalue2
|
$$scte35$$ |
ويجب استبدال وحدة الماكرو هذه بقيمة scte35 فريدة لهذا الفاصل الإعلاني، إذا تم توفير واحد. وإذا لم تكن هناك حاجة إلى معلومات scte35، فيجب بسلسلة فارغة. |
/DAqAAAAAAAA///wDwVAAAT2f0/+ecF1mQABC/8ACgAIQ1VFSQAAAAsuZVlR
|
$$token$$ |
ملف موقع وبترميز url رمز HMAC المميز: هذا الرمز المميّز مطلوب. |
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 Inventory API
مراجع إضافية
- عرض الإعلانات المتسلسلة باستخدام حزمة تطوير البرامج لإعلانات الوسائط التفاعلية:
- البودكاست الذي يعرض إمكانية تشغيل المحتوى باستخدام ميزة "إدراج إعلان ديناميكي" واجهة برمجة التطبيقات