Livestream-Prefetch

Mit dem IMA SDK können sowohl Livestreams als auch On-Demand-Videos monetarisiert werden. Bei Livestreams müssen Sie für jede Werbeunterbrechung eine neue Anzeigenanfrage stellen. Verteilen Sie diese Anfragen, damit nicht alle Betrachter gleichzeitig Anzeigen anfordern und die Ad-Server zum Stillstand bringen.

Das IMA SDK unterstützt Sie dabei mit der Property AdsRequest.liveStreamPrefetchSeconds. Diese Eigenschaft gibt die maximale Anzahl von Sekunden an, die das SDK warten soll, bevor es nach dem Aufruf von AdsLoader.requestAds() eine Anfrage an den Ad-Server schickt. Die tatsächliche Anfragezeit wird zufällig festgelegt. Wenn Sie beispielsweise AdsRequest.liveStreamPrefetchSeconds auf 30 setzen, wartet das SDK nach dem Aufruf von AdsLoader.requestAds() 0 bis 30 Sekunden, um die Anfrage an den Server zu senden.

Livestream-Prefetch in der Praxis

Wir empfehlen, die nächste Werbeunterbrechung vorab abzurufen, sobald eine Werbeunterbrechung abgeschlossen ist. Dadurch wird die maximale Zeitdauer sichergestellt, die für Ihr Prefetch-Fenster verfügbar ist. Angenommen, du hast zwischen den Werbeunterbrechungen fünf Minuten Zeit. Wenn eine Werbeunterbrechung abgeschlossen ist, kannst du die nächste Werbeunterbrechung mit einem Prefetch-Fenster von 290 Sekunden (5 Minuten minus 10 Sekunden) anfordern, damit die Anfragen, die am Ende des Prefetch-Fensters gesendet werden, genügend Zeit zum Verarbeiten haben:

Diese Code-Snippets zeigen, wie Sie dem erweiterten Beispiel einen Livestream-Prefetch hinzufügen. Dieser Ansatz kann jedoch auch auf andere IMA-Implementierungen angewendet werden.

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);
}