تحميل فواصل إعلانية مسبقًا لأحداث البث

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

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

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