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



我正在使用带有IMA扩展的ExoPlayer 2.7.3。我必须按一定的时间间隔展示广告。我已经设法整合了AdsLoaderAdsMediaSource.我正在接收并显示广告。但广告只出现在电影的开头。如何使广告在我希望的时间点展示(例如每 30 分钟一次)?

我不确定您是将 IMA 扩展与 ImaAdsLoader 一起使用,还是将 AdsLoader 的自定义实现(无需 IMA 扩展):

使用 IMA 广告代码

如果您使用的是 IMA 扩展程序,则需要使用 IMA/DoubleClick 的广告代码创建ImaAdsLoader(示例代码):

new ImaAdsLoader(this, adTagUri);

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

自定义广告加载工具实现

您可以创建自己的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以获取更新。

相关内容

  • 没有找到相关文章

最新更新