این راهنما توسعه یک برنامه کلاینت را برای بارگیری جریان مستقیم HLS یا DASH با API سرویس Pod و دستکاری کننده مانیفست شما پوشش میدهد.
پیش نیازها
قبل از ادامه، باید موارد زیر را داشته باشید:
- یک کلید دارایی سفارشی برای یک رویداد پخش زنده که با نوع DAI - Pod serving redirectپیکربندی شده است. برای به دست آوردن این کلید، موارد زیر را دنبال کنید:- از یک کتابخانه سرویس گیرنده SOAP API برای فراخوانی متد - LiveStreamEventService.createLiveStreamEventsبا یک شی- LiveStreamEventاستفاده کنید و ویژگی- dynamicAdInsertionTypeروی مقدار enum- POD_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) برای بررسی گزارش تاریخی همه رویدادهای تبلیغاتی استفاده کنید. برای جزئیات، به نظارت و عیبیابی پخش زنده مراجعه کنید