این راهنما توسعه یک برنامه کلاینت را برای بارگیری جریان مستقیم HLS یا DASH با API سرویس Pod و دستکاری کننده مانیفست شما پوشش میدهد.
پیش نیازها
قبل از ادامه، باید موارد زیر را داشته باشید:
یک کلید دارایی سفارشی برای یک رویداد پخش زنده که با نوع DAI
Pod serving redirectپیکربندی شده است. برای به دست آوردن این کلید، موارد زیر را دنبال کنید:از یک کتابخانه سرویس گیرنده SOAP API برای فراخوانی متد
LiveStreamEventService.createLiveStreamEventsبا یک شیLiveStreamEventاستفاده کنید و ویژگیdynamicAdInsertionTypeروی مقدار enumPOD_SERVING_REDIRECTتنظیم شده است. برای همه کتابخانه های سرویس گیرنده، کتابخانه های مشتری و کد نمونه را ببینید.
تعیین کنید که آیا SDK تبلیغات رسانه تعاملی (IMA) برای پلتفرم شما موجود است یا خیر. توصیه می کنیم از IMA SDK برای افزایش درآمد استفاده کنید. برای جزئیات، به تنظیم IMA SDk برای DAI مراجعه کنید.
درخواست پخش جریانی بدهید
هنگامی که کاربر شما یک جریان را انتخاب می کند، موارد زیر را انجام دهید:
یک درخواست
POSTبه روش سرویس پخش زنده ارسال کنید. برای جزئیات، روش: جریان را ببینید.پارامترهای هدف گذاری تبلیغات را در قالب های
application/x-www-form-urlencodedیاapplication/jsonارسال کنید. این درخواست یک جلسه جریان را با Google DAI ثبت می کند.مثال زیر یک درخواست جریان ایجاد می کند:
رمزگذاری فرم
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const params = new URLSearchParams({ cust_params: 'section=sports&page=golf,tennis' }).toString(); const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: params }); console.log(await response.json());رمزگذاری JSON
const url = `https://dai.google.com/ssai/pods/api/v1/` + `network/NETWORK_CODE/custom_asset/CUSTOM_ASSET_KEY/stream`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cust_params: { section: 'sports', page: 'golf,tennis' } }) }); console.log(await response.json());در صورت موفقیت آمیز بودن، خروجی مشابه زیر را مشاهده می کنید:
{ "stream_id": "8d2b2292-6356-4c0e-94be-cece01d2df2e:DLS", "media_verification_url": "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/", "metadata_url": "https://dai.google.com/linear/pods/hls/.../metadata", "session_update_url": "https://dai.google.com/linear/.../session", "polling_frequency": 10 }در پاسخ JSON، شناسه جلسه جریان را بیابید و سایر داده ها را برای مراحل بعدی ذخیره کنید.
فراداده آگهی نظرسنجی
برای نظرسنجی فراداده تبلیغات، موارد زیر را انجام دهید:
مقدار
metadata_urlرا از پاسخ ثبت جریان بخوانید.یک درخواست
GETبه نقطه پایانی ارسال کنید. برای جزئیات، به روش: ابرداده مراجعه کنید.مثال زیر فراداده تبلیغات را واکشی می کند:
const response = await fetch(metadata_url); console.log(await response.json());در صورت موفقیت آمیز بودن، پاسخ PodMetadata را برای وقفه های تبلیغاتی فعلی و آتی دریافت می کنید:
{ "tags":{ "google_5555555555":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"firstquartile" }, "google_1234567890123456789":{ "ad":"0000229834_ad1", "ad_break_id":"0000229834", "type":"progress" }, ... }, "ads":{ "0000229834_ad1":{ "ad_break_id":"0000229834", "position":1, "duration":15, "clickthrough_url":"https://.../", ... }, ... }, "ad_breaks":{ "0000229834":{ "type":"mid", "duration":15, "ads":1 }, ... } }شی
tagsرا برای مراحل بعدی ذخیره کنید.یک تایمر با استفاده از مقدار
polling_frequencyتنظیم کنید تا مرتباً برای همه وقفههای تبلیغاتی متوالی درخواست ابرداده کنید.
جریان را در پخش کننده ویدیو خود بارگیری کنید
پس از دریافت شناسه جلسه از پاسخ ثبت نام، شناسه را به دستکاری کننده مانیفست خود ارسال کنید، یا یک URL مانیفست برای بارگیری جریان در پخش کننده ویدیو بسازید.
برای ارسال شناسه جلسه، به مستندات دستکاری کننده مانیفست خود مراجعه کنید. اگر دستکاریکننده مانیفست را توسعه میدهید، برای پخش زنده به دستکاری مانیفست مراجعه کنید.
مثال زیر یک URL مانیفست را جمع آوری می کند:
https://<your_manifest_manipulator_url>/manifest.m3u8?DAI_stream_ID=SESSION_ID&network_code=NETWORK_CODE&DAI_custom_asset_key=CUSTOM_ASSET_KEY"
وقتی پخش کننده شما آماده شد، پخش را شروع کنید.
به رویدادهای تبلیغاتی گوش دهید
قالب کانتینر جریان خود را برای فراداده های زمان بندی شده بررسی کنید:
جریانهای HLS با کانتینرهای انتقال جریان (TS) از برچسبهای ID3 زمانبندیشده برای حمل ابردادههای زماندار استفاده میکنند. برای جزئیات، درباره قالب برنامه کاربردی رسانه رایج با HTTP Live Streaming (HLS) را ببینید.
جریانهای DASH از عناصر
EventStreamبرای مشخص کردن رویدادها در مانیفست استفاده میکنند.جریانهای DASH از عناصر
InbandEventStreamزمانی استفاده میکنند که بخشها حاوی جعبههای پیام رویداد (emsg) برای دادههای بار، از جمله برچسبهای ID3 هستند. برای جزئیات، InbandEventStream را ببینید.جریان های CMAF، از جمله DASH و HLS، از جعبه های
emsgحاوی برچسب های ID3 استفاده می کنند.
برای بازیابی برچسب های ID3 از جریان خود، به راهنمای پخش کننده ویدیوی خود مراجعه کنید. برای جزئیات، به راهنمای فراداده زمانبندیشده Handle مراجعه کنید
برای بازیابی شناسه رویداد تبلیغاتی از برچسبهای ID3، موارد زیر را انجام دهید:
- رویدادها را بر اساس
scheme_id_uriباurn:google:dai:2018یاhttps://aomedia.org/emsg/ID3فیلتر کنید. آرایه بایت را از قسمت
message_dataاستخراج کنید.مثال زیر داده های
emsgرا به JSON رمزگشایی می کند:{ "scheme_id_uri": "https://developer.apple.com/streaming/emsg-id3", "presentation_time": 27554, "timescale": 1000, "message_data": "ID3TXXXgoogle_1234567890123456789", ... }برچسبهای ID3 را با قالب
TXXXgoogle_{ad_event_ID}فیلتر کنید:TXXXgoogle_1234567890123456789
نمایش دادههای رویداد تبلیغاتی
برای یافتن شیء TagSegment ، موارد زیر را انجام دهید:
شیء
tagsفراداده آگهی را از فراداده آگهی نظرسنجی بازیابی کنید. شیtagsآرایه ای از اشیاءTagSegmentاست.از شناسه کامل رویداد آگهی برای یافتن یک شیء
TagSegmentبا نوعprogressاستفاده کنید.از 17 نویسه اول شناسه رویداد تبلیغاتی برای یافتن یک شی
TagSegmentاز انواع دیگر استفاده کنید.بعد از اینکه
TagSegmentرا داشتید، از ویژگیad_break_idبه عنوان کلید برای یافتن شیAdBreakدر آبجکتad_breaksابرداده ad استفاده کنید.مثال زیر یک شی
AdBreakرا پیدا می کند:{ "type":"mid", "duration":15, "ads":1 }از دادههای
TagSegmentوAdBreakبرای نشان دادن اطلاعات در مورد موقعیت آگهی در وقفه تبلیغاتی استفاده کنید. به عنوان مثال،Ad 1 of 3.
پینگ های تایید رسانه را ارسال کنید
برای هر رویداد تبلیغاتی، به جز نوع progress ، یک پینگ تأیید رسانه ارسال کنید. Google DAI رویدادهای progress را نادیده می گیرد و ارسال مکرر این رویدادها ممکن است بر عملکرد برنامه شما تأثیر بگذارد.
برای ایجاد URL تأیید رسانه کامل یک رویداد تبلیغاتی، موارد زیر را انجام دهید:
از پاسخ جریان، شناسه کامل رویداد آگهی را به مقدار
media_verification_urlاضافه کنید.با URL کامل درخواست
GETکنید:// media_verification_url: "https://dai.google.com/view/.../event/c14aZDWtQg-ZwQaEGl6bYA/media/" const completeUrl = `${media_verification_url}google_5555555555123456789`; const response = await fetch(completeUrl);در صورت موفقیت آمیز بودن، پاسخ وضعیت کد
202را دریافت می کنید. در غیر این صورت کد خطای404دریافت می کنید.
میتوانید از نظارت بر فعالیت جریان (SAM) برای بررسی گزارش تاریخی همه رویدادهای تبلیغاتی استفاده کنید. برای جزئیات، به نظارت و عیبیابی پخش زنده مراجعه کنید