Précharger des contenus multimédias

Sélectionnez la plate-forme : HTML5 Android

Le SDK IMA est compatible avec le préchargement des éléments d'annonce vidéo. Vous pouvez activer cette fonctionnalité dans votre intégration du 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 contenus multimédias 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);
}

Compatibilité 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 est activée par défaut et inclut une compatibilité intégrée avec le préchargement.

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 approprié 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 pour que votre application soit compatible avec 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 afin de vérifier que la configuration du préchargement est correcte :

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

Durée

Le tableau suivant récapitule les modifications apportées à la durée de chargement des annonces lorsque le préchargement est activé :

Événement Avec préchargement Sans préchargement
VAST d'annonce demandé AdsLoader.requestAds() AdsLoader.requestAds()
Annonce pré-roll chargée (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 l'heure de début de l'annonce. Pour les annonces consécutives, lorsque la lecture de l'annonce précédente commence. À l'heure de début de l'annonce.

Questions fréquentes

Le préchargement de contenus multimédias 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 est destiné à améliorer l'expérience utilisateur en réduisant le temps de chargement de l'annonce. Il n'est pas destiné à être compatible avec la diffusion d'annonces hors connexion.
Le préchargement de contenus multimédias doit-il être activé pour le VAST de l'annonce ainsi que pour les contenus multimédias ?
Non, le SDK précharge toujours le VAST de l'annonce, quel que soit ce paramètre de préchargement.