أداة التلاعب ببيانات أحداث البث المباشر

توفّر واجهة برمجة تطبيقات عرض الإعلانات 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 - تاريخ ووقت الانتهاء المجدولان لهذا الحدث هذه السمة مطلوبة إذا كانت القيمة unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` - القيمة المنطقية. راجِع أعلاه.

تلقّي طلبات بيان البث

يجب أن يوفر معالج البيان نقطة نهاية لواجهة برمجة التطبيقات للاستماع إلى البيان الطلبات من تطبيق عميل مشغّل الفيديو. على الأقل، يجب أن تكون نقطة النهاية هذه جمع معرّف مصدر بيانات من تطبيق مشغّل العميل، ويجب أن يعرض معرّفًا مجمّعًا ملف بيان البث. يتم استخدام رقم تعريف مصدر البيانات لتحديد جلسة البث من أجل مدير.

عليك أيضًا جمع بعض المعلومات الأخرى لتحديد الجهة المناسبة مصدر بيانات، مثل Content ID

مثال على نقطة نهاية محتملة لطلب البيان

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
مَعلمات المسار
asset_key معرّف افتراضي يتطابق مع البث المباشر المطلوب في نظامك
format مَعلمة افتراضية تتوافق مع تنسيق البث. يجب استخدام أحد الخيارَين التاليَين:
mpd لأحداث بث MPEG-DASH
m3u8 لبث HLS
معامِلات طلب البحث
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

في حال عدم توفّر السمة so، يُفترض أن تكون جميع المقاطع السابقة لهما نفس المدة ويتم حساب معادلة المقطع من segment_number وsd

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}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id={a-stream-id}&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;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&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;auth_token=$$token$$" media="$RepresentationID$/$Number$.mp4?stream_id=ç√&amp;sd=5000&pd=$$pod-duration$$&amp;cust_params=$$cust_params$$&amp;scte35=$$scte35$$&amp;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&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;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&amp;sd=5000&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;scte35=$$scte35$$" initialization="$RepresentationID$/init.mp4?stream_id=cc59197a-44c0-4be2-a8cc-9a6fdb80158f:DLS&amp;pd=30000&amp;cust_params=&amp;auth-token=&amp;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

مراجع إضافية