You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android TV Leanback的ExoPlayer中添加视频控制器及调速功能求助

在简易版ExoPlayer中实现视频控制器与调速功能

一、添加基础视频控制器

ExoPlayer提供了默认的DefaultPlayerControlView,直接关联到PlayerView就能实现播放/暂停、进度条、音量调节等基础控制功能。

1. 布局配置

在布局文件中添加PlayerView和DefaultPlayerControlView(如果不需要自定义控制器位置,也可以直接用PlayerView自带的控制器,跳过手动添加ControlView):

<com.google.android.exoplayer2.ui.PlayerView
    android:id="@+id/playerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 自定义控制器位置,此处固定在底部 -->
    <com.google.android.exoplayer2.ui.DefaultPlayerControlView
        android:id="@+id/controlView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"/>

</com.google.android.exoplayer2.ui.PlayerView>

2. 代码关联播放器

在Activity/Fragment中初始化ExoPlayer,并将其关联到视图组件:

val player = ExoPlayer.Builder(this).build()
val playerView = findViewById<PlayerView>(R.id.playerView)
val controlView = findViewById<DefaultPlayerControlView>(R.id.controlView)

// 关联播放器到视图
playerView.player = player
controlView.player = player

// 加载媒体资源示例
val mediaItem = MediaItem.fromUri("你的视频URL或本地路径")
player.setMediaItem(mediaItem)
player.prepare()
player.play()

如果不需要自定义控制器位置,直接启用PlayerView自带控制器更简洁:

playerView.useController = true // 启用自带控制器
playerView.player = player

二、实现调速功能菜单

通过给控制器添加自定义选项菜单,弹出速度选择对话框即可实现调速功能。

1. 创建菜单资源

在res/menu目录下新建player_menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_speed_setting"
        android:title="播放速度"/>
</menu>

2. 绑定菜单与点击事件

在代码中给控制器启用选项菜单,并监听点击事件:

// 启用控制器的选项菜单
controlView.setShowOptionsMenu(true)
// 若用PlayerView自带控制器,替换为:playerView.setControllerShowOptionsMenu(true)

controlView.setOnOptionsItemSelectedListener { menuItem ->
    when (menuItem.itemId) {
        R.id.menu_speed_setting -> {
            showSpeedSelectionDialog(player)
            true
        }
        else -> super.onOptionsItemSelected(menuItem)
    }
}

3. 实现速度选择对话框

编写弹出对话框的方法,提供多档位速度选择:

private fun showSpeedSelectionDialog(player: ExoPlayer) {
    val speedOptions = arrayOf("0.5x", "0.75x", "1.0x", "1.25x", "1.5x", "2.0x")
    // 获取当前速度对应的索引,默认选中1.0x
    val currentIndex = speedOptions.indexOf("${player.playbackParameters.speed}x")
        .takeIf { it != -1 } ?: 2

    AlertDialog.Builder(this)
        .setTitle("选择播放速度")
        .setSingleChoiceItems(speedOptions, currentIndex) { dialog, which ->
            val selectedSpeed = speedOptions[which].replace("x", "").toFloat()
            // 设置播放速度
            player.setPlaybackParameters(PlaybackParameters(selectedSpeed))
            dialog.dismiss()
        }
        .setNegativeButton("取消", null)
        .show()
}

注意事项

  • 确保项目依赖中包含ExoPlayer UI模块:
    implementation "com.google.android.exoplayer:exoplayer-ui:2.19.1" // 替换为最新版本
    
  • 调速功能支持ExoPlayer 2.X版本,低版本API可能略有差异;
  • 如需个性化控制器样式,可以自定义继承PlayerControlView的视图。

内容的提问来源于stack exchange,提问作者Karthik M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:55:28