أداة معالجة البيان لأحداث البث عند الطلب

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

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

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

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

عليك أيضًا جمع بعض المعلومات الأخرى لتحديد مجرى المحتوى المناسب، مثل رقم تعريف المحتوى.

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

GET /api/stream_id/{stream_id}/video/{content_id}.{format}
Host: {your_domain}
مَعلمات المسار
stream_id معرّف البث في "مدير الإعلانات" من تطبيق مشغّل الفيديو على الجهاز
content_id رقم تعريف افتراضي يتوافق مع فيديو المحتوى في نظامك
format مَعلمة افتراضية تتوافق مع تنسيق البث أحد الخيارَين التاليَين:
mpd بالنسبة إلى أحداث البث باستخدام MPEG-DASH
m3u8 لأحداث البث المباشر وفق بروتوكول HTTP ‏(HLS)

استرداد مجموعة بث المحتوى

استخدِم رقم تعريف المحتوى الذي تم جمعه من طلب البيان لاختيار محتوى البث الذي تريد دمجه مع الإعلانات.

طلب ملفات بيان مجموعات الإعلانات

لطلب الإعلانات من "مدير إعلانات Google"، يجب أن يُرسل خادمك طلب POST إلى نقطة نهاية ad pods، مع تمرير الملفات الشخصية المطلوبة لتشفير البيانات وعلامة الإعلان. يتضمّن هذا الطلب أيضًا معرّف البث الذي جمعته في الخطوة 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 قائمة بنقاط البدء ضمن بث المحتوى التي سيتم فيها إدراج الفواصل الإعلانية أثناء التشغيل يتم قياس نقاط الربط بالثواني العشرية.

مطلوب فقط لاستجابات 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

مثال: avc1.4d000c

bitrate Required عدد صحيح يمثّل الحد الأقصى لمعدّل نقل بيانات الفيديو لهذا الملف الشخصي بالبايت في الثانية
frames_per_second Required عدد اللقطات في الثانية بالتنسيق العشري للفيديو
resolution Required قيمة بترميز JSON تحتوي على "عرض" الفيديو و"ارتفاعه" بالبكسل

مثال: {"width": 640, "height": 320}

إعدادات الصوت
codec Required سلسلة ترميز RFC6381

مثال: mp4a.40.5

bitrate Required عدد صحيح يمثّل الحد الأقصى لمعدل نقل البيانات الصوتي لهذا الملف الشخصي بالبايت في الثانية.

مثال: 300000

channels Required عدد صحيح يمثّل عدد قنوات الصوت، بما في ذلك قنوات التردد المنخفض
sample_rate Required عدد صحيح يمثّل معدّل أخذ العينات الصوتية بالهرتز

مثال: 4800

إعدادات الترجمة
format Required تنسيق الملف المستخدَم للترجمة والشرح المضمّنين في الفيديو والقيمتان المسموح بإدراجهما هما webvtt أو ttml.
language Optional لغة الترجمة والشرح بتنسيق سلسلة لغة RFC5646 في حال توفّر هذه القيمة، لا تُستخدَم إلا لعرض DASH.

مثال: en-us

خيارات إدراج الإعلانات الديناميكية
dash_profile Optional الملف الشخصي لتنسيق MPEG-DASH الذي سيتم تطبيقه على ملفات بيان مجموعات الإعلانات يُستخدَم هذا الإعداد لملفات بيان DASH فقط. القيم المسموح بها هي live أو on-demand. تكون القيمة التلقائية on-demand.

تتوافق القيمة live مع ملف تعريف MPEG-DASH "urn:mpeg:dash:profile:isoff-live:2011".

تتوافق القيمة on-demand مع ملف تعريف MPEG-DASH urn:mpeg:dash:profile:isoff-on-demand:2011.

ad_pod_timeout Optional الحدّ الأقصى للوقت الذي يمكن قضاؤه في اختيار الإعلانات وإنشاء مجموعات إعلانية، بالثواني المتغيرة بعد انقضاء هذه الفترة، يعرض "مدير إعلانات Google" أيّ إعلانات تم اختيارها من قبل في استجابة ad_pods ويتوقف عن المعالجة.
sam_id Optional يحدِّد مفتاح تصحيح أخطاء بديلاً يمكن استخدامه للبحث عن الجلسات في مراقب activity.

الردّ

مَعلمات الاستجابة
valid_for المدة التي تكون فيها قوائم تشغيل مجموعات الإعلانات هذه صالحة بتنسيق dhms (أي الأيام أو الساعات أو الدقائق أو الثواني).
valid_until التاريخ والوقت اللذان تظلّ قوائم تشغيل مجموعات الإعلانات هذه صالحة لهما بصفتها سلسلة وقت وتاريخ ISO8601 بتنسيق yyyy-MM-dd'T'hh:mm:ss.sssssssss[+|-]hh:mm.
ad_pods قائمة بمجموعات الإعلانات المتسلسلة التي تم اختيارها لهذا البث
مجموعة إعلانات متسلسلة
manifest_uris لأحداث البث المباشر وفق بروتوكول HTTP ‏(HLS) فقط. تعيين أرقام تعريف الملفات الشخصية لتشفير الفيديو إلى معرّفات الموارد المنتظمة لملفات بيان HLS
mpd_uri لأحداث البث باستخدام بروتوكول DASH فقط. معرّف الموارد المنتظم (URI) لملف وصف "البث الديناميكي التكيُّفي عبر HTTP" (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
    }
  ]
}

دمج مجموعات الإعلانات في المحتوى

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

مصادر البث المباشر وفق بروتوكول HTTP

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

تكرار الملفات التجارية لتشفير الفيديوهات

لكل ملفّ تعريف ترميز، اجمع جميع ملفات بيان مجموعات الإعلانات المرتبطة من استجابة "مدير إعلانات Google"، بالإضافة إلى أوقات البدء المرتبطة بها. بالنسبة إلى مجموعات الإعلانات المتسلسلة التي تظهر قبل التشغيل، اضبط وقت البدء على 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) وhosting at 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
{...}

إنشاء قائمة تشغيل تتضمّن عدّة صيغ

اجمع عناوين شبكة توصيل المحتوى لكل بيان خيار مكتمل، بالإضافة إلى تفاصيل ملف التعريف المطابق لتشفير الفيديو، وجمِّع النتائج في بيان متعدّد الخيارات جديد. يتم عرض بيان المستخدم هذا كردّ على طلب البيان الذي تلقّيته في الخطوة 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.

يجب أن يتألّف ملف وصف عرض الوسائط (MPD) بتنسيق MPEG DASH المُعدّ بشكل صحيح من عدّة فترات، تحتوي كلّ منها على عدّة تمثيلات. يجب أن يتطابق كل تمثيل مع أحد ملفات ترميزك. كل مجموعة إعلانية مُدرَجة من "مدير إعلانات Google" هي أيضًا ملف MPD يحتوي على تسلسل فترات مع ممثّلات مطابقة.

لدمج ملفات MPD هذه معًا، ابدأ بتسجيل أوقات بدء كل مجموعة إعلانية. بالنسبة إلى إعلانات ما قبل التشغيل، يجب إدراج فترات مجموعات إعلانات ما قبل التشغيل قبل أي محتوى فترة. بالنسبة إلى إعلانات ما بعد التشغيل، أدرِج فترات مجموعات الإعلانات المتسلسلة بعد انتهاء كل فترات المحتوى. يمكنك تكرار الفترات في ملف 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 لمجموعة الإعلانات

[{
  "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>

مراجع إضافية