如何使用ExoPlayer的IMA扩展程序在特定点展示广告?

时间:2018-04-17 06:34:03

标签: android exoplayer exoplayer2.x

我正在使用ExoPlayer 2.7.3 IMA扩展程序。我必须在一定的时间间隔内展示广告。我设法整合了AdsLoaderAdsMediaSource。我正在接收并展示广告。但广告只出现在电影的开头。如何在我想要的时间点播放广告(例如,每30分钟一次)?

1 个答案:

答案 0 :(得分:0)

我不确定您是使用ImaAdsLoader的IMA扩展程序还是作为核心库一部分的AdsLoader的自定义实现(不需要IMA扩展名):

使用IMA广告代码

如果您使用的是IMA扩展程序,则需要使用来自IMA / DoubleClick(sample tags)的广告代码创建ImaAdsLoader

new ImaAdsLoader(this, adTagUri);

标记指向VMAP / VAST文件,该文件定义播放广告的时间。因此,使用此解决方案,您无法以编程方式告诉玩家广告的位置。而是从广告代码中加载所有这些信息。

自定义AdsLoader实施

您可以创建自己的AdsLoader实现,您可以将其传递给构造函数或AdsMediaSource而不是IMA版本。然后,AdsMediaSource会调用广告加载程序的attachPlayer(player, eventListener, adUiViewGroup)方法。第二个参数是AdsLoader.EventListener,可以通过AdsMediaSource通知广告加载程序的状态。

如果此时您已经拥有了广告的信息以及播放它们的位置,您可以在播放器附加时调用一次听众:

    // create playback state with two ad groups (at 0 and 30 seconds)
    AdPlaybackState adPlaybackState = new AdPlaybackState(0, 30 * C.MICROS_PER_SECOND);
    // add the uri of the first ad of the first ad group
    adPlaybackState = adPlaybackState.withAdUri(0, 0, mp4UriWithAd);
    // add the uri of the first ad of the second ad group
    adPlaybackState = adPlaybackState.withAdUri(1, 0, mp4UriWithAd);
    // add the uri of the second ad of the second ad group
    adPlaybackState = adPlaybackState.withAdUri(1, 1, mp4UriWithAd);
    // pass to AdsLoader.EventListener 
    eventListener.onAdPlaybackState(adPlaybackState);

但是,您可能需要先从网络加载广告信息。在这种情况下,只要您检索到有关广告的新信息,就可以更新播放状态。只需再次致电onAdPlaybackState即可获得更新。