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

توفّر واجهة برمجة التطبيقات Pod Display API إمكانية الوصول إلى شرائح الإعلانات المشفَّرة والمشروطة يتم إعدادها بطريقة يمكن دمجها مباشرةً في بروتوكول HLS موجَّه للمستخدمين أو قائمة تشغيل وسائط MPEG-DASH. بالنسبة إلى MPEG-DASH، توفّر واجهة برمجة تطبيقات Pod serve API أيضًا نموذج البيان لتوفير معلومات وسياقات إضافية لهذه الإعلانات الأقسام.

يركز هذا الدليل على تنفيذ ملف بيان أساسي لخدمة وحدات Pod وخادم لأحداث البث المباشر.

شرط أساسي: ضبط أحداث البث المباشر في "مدير إعلانات Google"

قبل تقديم أي طلبات من واجهة برمجة التطبيقات لعرض مجموعة الإعلانات، يجب إنشاء حدث بث مباشر في Ad Manager لكل بث تعالج بياناته. يمكنك إنشاء حدث بث مباشر باستخدام LiveStreamEventService API أو واجهة الويب في "مدير إعلانات Google".

لاستخدام حدث بث مباشر مع واجهة برمجة التطبيقات لعرض مجموعة المقاطع الصوتية، عليك preenchimentof عدة سمات لحدثك:

  • customAssetKey - معرّف مخصّص سيتم استخدامه لهذا الحدث يجب أن يكون فريدة عبر جميع أحداث الشبكة.
  • adTags - عنوان URL لعلامة الإعلان الأساسية التي يتم إنشاؤها من خلال عدد الزيارات في "مدير الإعلانات" سير العمل.
  • dynamicAdInsertionType: يجب ضبطه على POD_SERVING_REDIRECT.
  • streamingFormat: اضبط القيمة على HLS أو DASH وفقًا لذلك.
  • segmentUrlAuthenticationKeyIds - واحد على الأقل مفتاح HMAC يُستخدم للتوقيع على طلبات شرائح الإعلان.
  • daiEncodingProfileIds - قائمة بمعرّفات DAIEncodingProfile المفعّلة لهذا الحدث
  • startDateTime - تاريخ ووقت بدء الحدث
  • endDateTime - تاريخ ووقت انتهاء هذا الحدث المُجدوَلَين تكون هذه السمة مطلوبة إذا كانت قيمة unlimitedEndDateTimeis false and ignored ifunlimitedEndDateTimeis true.unlimitedEndDateTime` هي "صحيح/خطأ". راجِع أعلاه.

تلقّي طلبات بيان أحداث البث

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

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

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

GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
مَعلمات المسار
asset_key معرّف افتراضي يتطابق مع البث المباشر المطلوب في نظامك
format مَعلمة افتراضية تتوافق مع تنسيق البث. أحد الخيارَين التاليَين:
mpd بالنسبة إلى أحداث البث باستخدام MPEG-DASH
m3u8 لبث HLS
معامِلات طلب البحث
stream_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: فهرس التقسيم ضمن مجموعة الإعلانات المتسلسلة، بدءًا من صفر. أو "init" لقسم mp4 لبدء التشغيل
  • segment_duration: مدة المقطع الحالي بالمللي ثانية هذا النمط يجب أن تكون القيمة هي نفسها لجميع الأجزاء باستثناء القيمة الأخيرة في المجموعة.
  • segment_offset: بدء المقطع الذي يتم احتسابه من خلال إضافة مدة المقطع السابق إلى بدء المقطع بالملي ثانية
  • last: قيمة منطقية تحدّد الشريحة الأخيرة في مجموعة إعلانات متسلسلة. الإعدادات التلقائية إلى false.

إنشاء عناوين 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 رمز شبكة "مدير الإعلانات 360" لهذه الشبكة.
custom_asset_key مفتاح مادة عرض البث المباشر المخصّصة المحدّد في واجهة برمجة التطبيقات LiveStreamEventService أو في صفحة البث المباشر في واجهة ويب "مدير إعلانات Google‏ 360"
pod_identifier

تتوفّر التنسيقات التالية:

pod/{integer}

المعرّف الرقمي للفاصل الإعلاني الحالي. أرقام تعريف مجموعات الإعلانات المتسلسلة هي محددة بشكل تدريجي لكل حدث فاصل إعلاني، بدءًا من 1

ad_break_id/{string}

معرّف السلسلة للفاصل الإعلاني الحالي.

profile_name معرّف الملف التجاري المطلوب
segment_number فهرس هذا المقطع ضمن مجموعة الإعلانات المتسلسلة الحالية، بدءًا من الصفر.
عند استخدام حاوية MP4، يمكن طلب مقطع الإعداد من خلال ضبط segment_number على "init".
معامِلات طلب البحث
stream_id مطلوب مَعلمة stream_id الخاصة بالمستخدم التي تم عرضها من طلب إنشاء البث
sd مطلوب segment_duration
so اختياري segment_offset

إذا لم يكن هناك so، يتم افتراض أنّ جميع الشرائح السابقة لها المدة نفسها ويتم احتساب بدء الشريحة من segment_number وsd.

pd مطلوب، باستثناء الأحداث التي تم فيها تفعيل فواصل إعلانية بلا مدة مدة الفاصل الإعلاني (بالمللي ثانية) يُشار إليه أيضًا باسم ad_pod_duration.
auth-token مطلوب رمز HMAC موقَّع ومُشفَّر بتنسيق عنوان URL لهذا الحِزمة الإعلانية.
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/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". سيصبح هذا النموذج هو فترة الفاصل الإعلاني، بعد تعبئة الوحدات النمطية التي يحتوي عليها.

يجب طلب هذا النموذج مرة واحدة فقط لكل جلسة بث، وحفظه في ذاكرة التخزين المؤقت لإعادة استخدامه مع كل فاصل إعلاني.

نقطة نهاية طلب نموذج الفترةhjf
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$$ يتم احتساب هذه القيمة من خلال قسمة مدة مدة عرض الإعلان (بالمليثواني) على قيمة segment_duration_ms، ثم تقريبها إلى أقرب عدد صحيح. 3
$$cust_params$$ يمكن استبدال وحدة الماكرو هذه بمعلمات الاستهداف المخصصة الفريدة الفاصل الإعلاني الحالي، إذا المقدمة. يجب تنسيق القيمة على النحو описан في مقالة مركز المساعدة الخاصة بمدير إعلانات Google هذه. إذا لم تكن هناك حاجة إلى مَعلمات مخصّصة، يجب استبدال هذا الماكرو بسلسلة فارغة. &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&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 Serving API.

مراجع إضافية