如何使用 ExoPlayer 的 IMA 扩展在特定点展示广告?
How to show ads at specific points using ExoPlayer's IMA extension?
我正在使用 ExoPlayer 2.7.3
和 IMA 扩展。我必须在特定时间间隔展示广告。我已经成功整合了 AdsLoader
和 AdsMediaSource
。我正在接收和展示广告。但广告只出现在电影的开头。如何让广告在我希望的时间点显示(例如,每 30 分钟)?
我不确定您是将 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
获取更新。
我正在使用 ExoPlayer 2.7.3
和 IMA 扩展。我必须在特定时间间隔展示广告。我已经成功整合了 AdsLoader
和 AdsMediaSource
。我正在接收和展示广告。但广告只出现在电影的开头。如何让广告在我希望的时间点显示(例如,每 30 分钟)?
我不确定您是将 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
获取更新。