【发布时间】:2018-03-16 06:40:48
【问题描述】:
我正在使用ExoPlayer 2.7.1。我必须在一定的时间间隔展示广告。这些时间间隔以毫秒为单位。如何在 ExoPlayer 控制器中显示广告标记?
【问题讨论】:
标签: android exoplayer exoplayer2.x
我正在使用ExoPlayer 2.7.1。我必须在一定的时间间隔展示广告。这些时间间隔以毫秒为单位。如何在 ExoPlayer 控制器中显示广告标记?
【问题讨论】:
标签: android exoplayer exoplayer2.x
要集成您自己的广告解决方案,我一般建议查看 ExoPlayer 库的 AdsMediaSource 和 AdsLoader,它们提供了将您的广告很好地集成到内容媒体源的方法。通过这种方式,播放器可以感知广告播放并确保不能跳过广告、显示标记等。
AdsMediaSource 用于实现 ExoPlayer 的 IMA extension,但您可以将这些用于您的解决方案。
要回答您关于广告标记的具体问题:
PlayerControlView 有一个方法可以让您设置广告标记位置和布尔值来指示广告是否已显示:
playerControlView.setExtraAdGroupMarkers(
new long[]{10 * 1000, 120 * 1000},
new boolean[]{false, false});
但是,如果您使用的是开箱即用的 PlayerView,则访问播放器视图以编程方式插入的 PlaybackControlView 有点困难。因此,您不能使用 findById 并且恐怕 PlayerView 没有为控制器提供 getter。
因此,如果您使用 PlayerView,我看到的唯一方法是提供您自己的布局文件 exo_player_view.xml,您可以在其中设置自定义控制器:
在您的项目中创建文件 res/layout/exo_player_view.xml 并将layout file from here 复制到其中。
在此布局文件中搜索 ID 为 exo_controller_placeholder 的视图元素。用这个元素替换它:
<com.google.android.exoplayer2.ui.PlayerControlView android:id="@id/exo_controller"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在 onCreate 中查找播放器控件视图:
playerControlView = findViewById(R.id.exo_controller);
每当您想更新您调用的标记时:
playerControlView.setExtraAdGroupMarkers(
new long[]{10 * 1000, 120 * 1000},
new boolean[]{true, false});
第二个参数让您将广告标记为显示。
【讨论】: