يمكن استخدام حزمة تطوير البرامج لإعلانات الوسائط التفاعلية لتحقيق الربح من أحداث البث المباشر والفيديوهات عند الطلب. بالنسبة إلى أحداث البث المباشر، عليك تقديم طلب إعلان جديد لكل فاصل إعلاني. نظِّم هذه الطلبات للتأكّد من أنّ كلّ المشاهدين لا يطلبون المساعدة. الإعلانات في الوقت نفسه وعرقلة خادم(خوادم) الإعلانات.
للمساعدة في هذا الأمر، تحتوي حزمة تطوير البرامج لإعلانات الوسائط التفاعلية على AdsRequest.liveStreamPrefetchSeconds
الموقع. تحدّد هذه السمة الحدّ الأقصى لعدد الثواني التي تستغرقها حزمة SDK.
عليك الانتظار قبل التواصل مع خادم الإعلانات بعد الاتصال
AdsLoader.requestAds()
وسيتم توزيع وقت الطلب الفعلي عشوائيًا. بالنسبة
على سبيل المثال، إذا ضبطت AdsRequest.liveStreamPrefetchSeconds
على 30، ستتم إضافة حزمة SDK
ينتظر لمدة تتراوح بين 0 و30 ثانية بعد استدعاء AdsLoader.requestAds()
تقديم الطلب إلى الخادم.
الجلب المسبق للبث المباشر: التطبيق العملي
ننصحك بجلب الفاصل الإعلاني التالي مسبقًا فور اكتمال الفاصل الإعلاني. يضمن ذلك إتاحة أقصى مدة زمنية لنافذة الجلب المسبق. لنفرض أن لديك 5 دقائق بين الفواصل الإعلانية. عند اكتمال فاصل إعلاني يمكنك طلب الفاصل الإعلاني التالي من خلال فترة جلب مسبق تبلغ 290 ثانية (5 دقائق مطروحًا منها 10 ثوانٍ، للتأكد من إرسال الطلبات في نهاية فترة الجلب المسبق كافية لحلها):
توضّح مقتطفات الرمز هذه كيفية إضافة ميزة الجلب المسبق للبث المباشر إلى مثال متقدم ، ولكن يمكن تطبيق هذا المنهج على عمليات تنفيذ إعلانات الوسائط التفاعلية الأخرى.
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 via 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); }