Précharger des contenus multimédias

Sélectionnez une plate-forme : HTML5 Android

Le SDK IMA permet de précharger les composants d'annonces vidéo. Vous pouvez activer cette fonctionnalité dans votre intégration SDK pour assurer une transition plus fluide entre les annonces et le contenu. Ce guide présente les détails techniques de l'implémentation du préchargement de contenu multimédia avec le SDK IMA.

Conditions préalables

Le préchargement nécessite la version 3.17.0 ou ultérieure du SDK IMA pour Android.

Activer le préchargement

Pour activer le préchargement, utilisez AdsRenderingSettings.setEnablePreloading() pour définir le préchargement sur "true". Cette opération doit être effectuée dans le rappel onAdsManagerLoaded() :

@Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
  ...
  AdsRenderingSettings adsRenderingSettings =
      ImaSdkFactory.getInstance().createAdsRenderingSettings();
  adsRenderingSettings.setEnablePreloading(true);
  mAdsManager.init(adsRenderingSettings);
}

Prise en charge du préchargement avec un VideoAdPlayer personnalisé

Nous vous recommandons l'extension ExoPlayer-IMA utilisée dans l'exemple d'application Android ExoPlayer. Une fois intégrée, l'extension ExoPlayer-IMA inclut la prise en charge du préchargement et l'active par défaut.

Si vous implémentez le préchargement sans l'extension ExoPlayer-IMA, des modifications supplémentaires sont nécessaires une fois que setEnablePreloading() est appelé. Pour qu'un lecteur vidéo soit compatible avec le préchargement des annonces, il doit suivre les objets AdMediaInfo transmis dans les appels de loadAd() et playAd(), et inclure le AdMediaInfo correct dans les appels AdPlayerCallback. Cela peut nécessiter une structure de données pour gérer les objets AdMediaInfo, étant donné que loadAd() pour un AdMediaInfo ultérieur peut se produire pendant la lecture d'un AdMediaInfo précédent. L'exemple suivant illustre certaines des modifications que vous devrez peut-être apporter à votre application pour qu'elle prenne en charge le préchargement :

// enum for cases of PlayerState.
static enum PlayerState {
  IDLE,
  LOADED,
  PLAYING,
  PAUSED,
}

...

private final List<VideoAdPlayer.VideoAdPlayerCallback> callbacks;
private final ArrayList<AdMediaInfo> mediaInfos = new ArrayList<>();
private PlayerState playerState;
private boolean adCurrentlyLoaded;

...

@Override
public void playAd(AdMediaInfo adMediaInfo) {
  switch (playerState) {
    case LOADED:
      for (VideoAdPlayerCallback callback : callbacks) {
        callback.onPlay(adMediaInfo);
      }
      break;
    case PAUSED:
      for (VideoAdPlayerCallback callback : callbacks) {
        callback.onResume(adMediaInfo);
      }
      break;
    case PLAYING:
      // Intentionally and silently ignore since it is already playing from a prior media item,
      // note that onPlay is triggered by positionDiscontinuity.
      return;
    case IDLE:
      throw new IllegalStateException("Call to playAd when player state is not LOADED.");
  }
  playerState = PlayerState.PLAYING;
  player.setPlayWhenReady(true);
}

@Override
public void loadAd(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) {
  if (adCurrentlyLoaded == true) {
    mediaInfos.add(adMediaInfo);
    return;
  }
  player.stop();
  player.seekTo(0);
  mediaInfos.clear();
  mediaInfos.add(adMediaInfo);
  player.setPlayWhenReady(false);
  player.loadMedia(adMediaInfo.getUrl());
  playerState = PlayerState.LOADED;
  adCurrentlyLoaded = true;
}

@Override
public void stopAd(AdMediaInfo adMediaInfo) {
  if (allAdsInBreakHavePlayed()) {
    if (isFinalAd(adMediaInfo)) {
      // handle clean up after all ads have played.
    } else {
      seekToNextItem(player);
    }
  } else {
    mediaInfos.remove(adMediaInfo);
  }
}

private boolean allAdsInBreakHavePlayed() {
  // Code to determine if all the ads in the current ad break have completed.
}

private boolean isFinalAd(AdMediaInfo adMediaInfo) {
  // Code to determine if this adMediaInfo is the final ad.
}

private void seekToNextItem(YourPlayerClass player) {
  // Code to seek your player to the next media item.
}

Tester les implémentations de préchargement personnalisées

Pour les implémentations de préchargement personnalisées, il est recommandé de tester les cas extrêmes suivants pour vérifier que la configuration du préchargement est correcte :

  • Annonce pre-roll unique
  • Série de trois annonces pre-roll
  • Mid-roll de série d'annonces 3
  • Recherche d'une deuxième annonce mid-roll après le début du préchargement de la première, mais avant sa lecture
  • Lecture des annonces post-roll

Durée

Le tableau suivant récapitule les modifications apportées au timing de l'insertion d'annonces lorsque le préchargement est activé :

Événement Avec préchargement Sans préchargement
Annonce VAST demandée AdsLoader.requestAds() AdsLoader.requestAds()
Pré-roll chargé (annonce unique) AdsManager.init() AdsManager.start()
Annonce pré-roll chargée (VMAP/Règles relatives aux annonces) AdsManager.init() AdsManager.init()
Annonce mid-roll ou post-roll chargée Pour la première annonce d'une coupure publicitaire : huit secondes avant le début de l'annonce. Pour les annonces consécutives, lorsque l'annonce précédente commence à être diffusée. À l'heure de début de l'annonce.

Questions fréquentes

Le préchargement du contenu multimédia charge-t-il la création complète ?
Non, la création n'est généralement pas entièrement chargée lorsque la lecture de l'annonce commence. Le préchargement vise à améliorer l'expérience utilisateur en minimisant le temps de chargement de l'annonce. Il n'est pas conçu pour la diffusion d'annonces hors connexion.
Le préchargement du contenu multimédia doit-il être activé pour le VAST et le contenu multimédia de l'annonce ?
Non, le SDK précharge toujours le VAST de l'annonce, quel que soit ce paramètre de préchargement.