از «کیت توسعه نرمافزار IMA» میتوان برای درآمدزایی از جاریسازیهای زنده و همچنین ویدیو درخواستی استفاده کرد. برای جاریسازیهای زنده، باید برای هر وقفه آگهی درخواست آگهی جدیدی ایجاد کنید. این درخواستها را بهصورت متناوب ارسال کنید تا مطمئن شوید که همه بینندگان شما بهطور همزمان درخواست آگهی نمیکنند و سرور(های) آگهی را تحت فشار قرار نمیدهند.
برای کمک به این موضوع، IMA SDK دارای ویژگی AdsRequest.liveStreamPrefetchSeconds است. این ویژگی حداکثر تعداد ثانیههایی را که کیت توسعه نرمافزار باید پساز فراخوانی AdsLoader.requestAds() منتظر بماند تا با سرور آگهی تماس بگیرد مشخص میکند. زمان درخواست واقعی تصادفی خواهد بود. برای مثال، اگر AdsRequest.liveStreamPrefetchSeconds را روی ۳۰ تنظیم کنید،
«کیت توسعه نرمافزار» پساز اینکه AdsLoader.requestAds() را فراخوانی کردید،
بین ۰ تا ۳۰ ثانیه صبر میکند تا درخواست را به سرور ارسال کند.
پیشواکشی جاریسازی زنده در عمل
توصیه میکنیم بهمحض اینکه وقفه آگهی تکمیل شد، وقفه آگهی بعدی را پیشدریافت کنید. این کار تضمین میکند که حداکثر زمان برای پنجره پیشواکشی شما دردسترس باشد. فرض کنید ۵ دقیقه بین وقفههای آگهی فاصله دارید. وقتی وقفه آگهی تکمیل میشود، میتوانید وقفه آگهی بعدیتان را با پنجره پیشواکشی ۲۹۰ ثانیهای درخواست کنید (۵ دقیقه منهای ۱۰ ثانیه، برای اطمینان از اینکه درخواستهای ارسالشده در پایان پنجره پیشواکشی زمان کافی برای حلوفصل داشته باشند):
این تکهکدهای کد نشان میدهند که چگونه پیشدریافت جاریسازی زنده را به مثال پیشرفته اضافه کنید، اما این رویکرد را میتوان برای سایر پیادهسازیهای IMA نیز اعمال کرد.
VideoPlayerController.java
/** Ads logic for handling the IMA SDK integration code and events. */ public class VideoPlayerController { // 5 minutes == 300 seconds. Include a 10 second buffer private float AD_INTERVAL = 290; private double AD_TIMEOUT = 300; ... adsManager.addAdEventListener( new AdEvent.AdEventListener() { /** Responds to AdEvents. */ @Override public void onAdEvent(AdEvent adEvent) { ... case ALL_ADS_COMPLETED: if (adsManager != null) { adsManager.destroy(); adsManager = null; } // When pre-fetching for live streams, be sure to destroy the current AdsManager, // in case the tag you requested previously contains post-rolls // (you don't want to play those now). // Pre-fetch the next ad break. // Play those ads in ~5 minutes. In a real-world implementation, // this will likely be done as the result of a message from your // streaming server, not a through the playAdsAfterThisTime parameter // of requestAndPlayAds(). requestAndPlayAds(AD_TIMEOUT); break; default: break; } } ... public void requestAndPlayAds(double playAdsAfterThisTime) { if (currentAdTagUrl == null || currentAdTagUrl == "") { log("No VAST ad tag URL specified"); resumeContent(); return; } // Since you're switching to a new video, tell the SDK the previous video is finished. if (adsManager != null) { adsManager.destroy(); } playButton.setVisibility(View.GONE); // Create the ads request. AdsRequest request = sdkFactory.createAdsRequest(); request.setAdTagUrl(currentAdTagUrl); request.setContentProgressProvider(videoPlayerWithAdPlayback.getContentProgressProvider()); request.setLiveStreamPrefetchSeconds(AD_INTERVAL); playAdsAfterTime = playAdsAfterThisTime; // Request the ad. After the ad is loaded, onAdsManagerLoaded() will be called. adsLoader.requestAds(request); }