如何使用 ExoPlayer 的 IMA 扩展在特定点展示广告?
Posted
技术标签:
【中文标题】如何使用 ExoPlayer 的 IMA 扩展在特定点展示广告?【英文标题】:How to show ads at specific points using ExoPlayer's IMA extension? 【发布时间】:2018-09-27 00:31:23 【问题描述】:我正在使用带有 IMA 扩展名的 ExoPlayer 2.7.3
。我必须在一定的时间间隔展示广告。我设法整合了AdsLoader
和AdsMediaSource
。我正在接收和展示广告。但广告只出现在电影的开头。如何让广告在我希望的时间点展示(例如,每 30 分钟一次)?
【问题讨论】:
【参考方案1】:我不确定您是使用 IMA 扩展程序和 ImaAdsLoader 还是您的 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
以获取更新。
【讨论】:
您好,我关注了您的回答,但来自create your own implementation of AdsLoader
,您对广告处理有何建议?我尝试阅读 ImaAdsLoader
实现,但无法理解它如何显示 vmap 广告,例如当 exoplayer 不显示经过时间时它如何以正确的时间间隔运行广告?我只想制作一些这样的 AdLoader,但有大量广告,即MyAdsLoader
需要手动时间间隔(0,15 等),但没有大量标签。每当时间间隔到来时(例如在第 15 秒),它应该触发一个事件,向观察者请求 VastAdTag Url
嗨,我正在使用 IMA,但我找不到任何听众知道广告何时加载。你能帮忙吗?
这很棒,正是我们拥有的用例。但是我是 Exoplayer 的新手,并且从上面的代码 sn-ps 无法拼凑出如何配置所有内容以确保广告在我们指定的时间播放。上面可以提供更完整的代码示例吗?
我有问题中提到的相同要求,但无法使用 IMA 扩展来做到这一点。我正在开发一个 android 电视应用程序并将 exoplayer 用于 hls。您能否提供任何自定义加载器实现代码示例?因为我不知道自定义广告加载器。任何形式的帮助将不胜感激。谢谢
有人找到解决办法了吗?以上是关于如何使用 ExoPlayer 的 IMA 扩展在特定点展示广告?的主要内容,如果未能解决你的问题,请参考以下文章
带有ima扩展的android exoplayer无法在react native中自动显示广告的倒计时