توفّر واجهة برمجة التطبيقات 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
- تاريخ ووقت انتهاء هذا الحدث المُجدوَلَين تكون هذه السمة مطلوبة إذا كانت قيمةunlimitedEndDateTime
is false and ignored if
unlimitedEndDateTimeis true.
unlimitedEndDateTime` هي "صحيح/خطأ". راجِع أعلاه.
تلقّي طلبات بيان أحداث البث
يجب أن يوفّر أداة التحكّم في ملف البيان نقطة نهاية لواجهة برمجة التطبيقات لتلقّي طلبات ملف البيان من تطبيق عميل مشغّل الفيديو. على الأقل، يجب أن تجمع نقطة النهاية هذه معرّف البث من تطبيق عميل مشغّل الفيديو، ويجب أن تعرِض بيان بث مُدمَجًا. يُستخدَم معرّف البث لتحديد جلسة البث في "مدير إعلانات Google".
عليك أيضًا جمع بعض المعلومات الأخرى لتحديد الجهة المناسبة مصدر بيانات، مثل Content ID
مثال على نقطة نهاية محتملة لطلب البيان
GET /api/video/{asset_key}/manifest.{format}
Host: {your_domain}
مَعلمات المسار | |||||
---|---|---|---|---|---|
asset_key |
معرّف افتراضي يتطابق مع البث المباشر المطلوب في نظامك | ||||
format |
مَعلمة افتراضية تتوافق مع تنسيق البث. أحد الخيارَين التاليَين:
|
معامِلات طلب البحث | |
---|---|
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}
المعرّف الرقمي للفاصل الإعلاني الحالي. أرقام تعريف مجموعات الإعلانات المتسلسلة هي
محددة بشكل تدريجي لكل حدث فاصل إعلاني، بدءًا من
ad_break_id/{string}
معرّف السلسلة للفاصل الإعلاني الحالي. |
profile_name
|
معرّف الملف التجاري المطلوب |
segment_number
|
فهرس هذا المقطع ضمن مجموعة الإعلانات المتسلسلة الحالية، بدءًا من الصفر. عند استخدام حاوية MP4، يمكن طلب مقطع الإعداد من خلال ضبط segment_number على "init". |
معامِلات طلب البحث | ||
---|---|---|
stream_id
|
مطلوب | مَعلمة stream_id الخاصة بالمستخدم التي تم عرضها من طلب إنشاء البث
|
sd
|
مطلوب | segment_duration
|
so
|
اختياري | segment_offset
إذا لم يكن هناك |
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}&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$$ |
يتم احتساب هذه القيمة من خلال قسمة مدة مدة عرض الإعلان (بالمليثواني) على قيمة 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&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.
مراجع إضافية
- عرض الإعلانات المتسلسلة باستخدام حزمة تطوير البرامج لإعلانات الوسائط التفاعلية:
- تشغيل عرض البودكاست باستخدام واجهة برمجة التطبيقات DAI