تحميل إعلانات ما قبل التشغيل للبث المباشر

اختيار النظام الأساسي: HTML5 Android iOS tvOS

يمكن استخدام حزمة تطوير البرامج للإعلانات التفاعلية لتحقيق الربح من أحداث البث المباشر والفيديوهات عند الطلب. بالنسبة إلى أحداث البث المباشر، عليك إرسال طلب إعلان جديد لكل فاصل إعلاني. يجب ترتيب هذه الطلبات بشكل متسلسل لضمان عدم طلب جميع المشاهدين الإعلانات في الوقت نفسه، ما يؤدي إلى إبطاء خوادم الإعلانات.

للمساعدة في ذلك، تتضمّن حزمة تطوير البرامج لإعلانات الوسائط التفاعلية السمة AdsRequest.liveStreamPrefetchSeconds. تحدّد هذه السمة الحدّ الأقصى لعدد الثواني التي يجب أن ينتظرها حزمة تطوير البرامج (SDK) قبل التواصل مع خادم الإعلانات بعد طلب AdsLoader.requestAds(). سيتم اختيار وقت الطلب الفعلي بشكل عشوائي. على سبيل المثال، إذا ضبطت قيمة AdsRequest.liveStreamPrefetchSeconds على 30، تنتظر حزمة تطوير البرامج (SDK) من 0 إلى 30 ثانية بعد طلب AdsLoader.requestAds() لإرسال الطلب إلى الخادم.

كيفية عمل ميزة "الجلب المُسبَق لبيانات البث المباشر"

ننصحك بجلب فاصل الإعلانات التالي مسبقًا فور اكتمال فاصل الإعلانات. يضمن ذلك توفّر الحد الأقصى لمدة نافذة الجلب المُسبَق. لنفترض أنّ لديك 5 دقائق بين فواصل الإعلانات. عند اكتمال فاصل إعلاني، يمكنك طلب الفاصل الإعلاني التالي باستخدام نافذة الجلب المُسبَق التي تبلغ مدتها 290 ثانية (5 دقائق ناقص 10 ثوانٍ، للتأكّد من أنّ الطلبات المُرسَلة في نهاية نافذة الجلب المُسبَق لديها وقت كافٍ لحلّها):

تعرض مقتطفات الرموز البرمجية هذه كيفية إضافة ميزة "الجلب المسبق للبث المباشر" إلى المثال المتقدّم، ولكن يمكن تطبيق هذا الأسلوب على عمليات تنفيذ أخرى لـ 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);
}