如何使用 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。我必须在一定的时间间隔展示广告。我设法整合了AdsLoaderAdsMediaSource。我正在接收和展示广告。但广告只出现在电影的开头。如何让广告在我希望的时间点展示(例如,每 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.EventListenerAdsMediaSource 可以通过它通知您的广告加载程序的状态。

如果此时你已经知道了广告的信息以及在什么位置播放它们,你可以在播放器连接时调用一次监听器:

    // 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中自动显示广告的倒计时

如何从 ExoPlayer Cast 扩展创建 CastPlayer?

使用 IMASDK、android 暂停广告?

带直播的 Exoplayer 演员扩展

ExoPlayer添加Ffmpeg扩展实现软解功能

如何使用 Exoplayer 播放从 Mediastore 获取的视频