پخش جریانی زنده از پیش واکشی

از IMA SDK می‌توان برای کسب درآمد از جریان‌های زنده و همچنین ویدیوهای درخواستی استفاده کرد. برای پخش جریانی زنده، باید برای هر وقفه تبلیغاتی یک درخواست آگهی جدید ارائه دهید. این درخواست‌ها را تکان دهید تا مطمئن شوید که همه بینندگان شما به طور هم‌زمان درخواست تبلیغات نمی‌کنند و سرور(های) تبلیغات را دچار مشکل نمی‌کنند.

برای کمک به این امر، IMA SDK دارای ویژگی AdsRequest.liveStreamPrefetchSeconds است. این ویژگی حداکثر ثانیه‌ای را مشخص می‌کند که SDK باید قبل از تماس با سرور آگهی پس از فراخوانی AdsLoader.requestAds() منتظر بماند. زمان واقعی درخواست تصادفی خواهد شد. به عنوان مثال، اگر AdsRequest.liveStreamPrefetchSeconds را روی 30 تنظیم کنید، SDK پس از فراخوانی AdsLoader.requestAds() بین 0 تا 30 ثانیه منتظر می ماند تا در واقع درخواست را به سرور ارسال کند.

پخش زنده از پیش واکشی در عمل

توصیه می کنیم به محض اتمام وقفه آگهی، وقفه آگهی بعدی خود را از قبل واکشی کنید. این تضمین می کند که حداکثر مدت زمان برای پنجره پیش واکشی شما در دسترس است. فرض کنید بین وقفه های تبلیغاتی 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 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);
}