Android中如何编程跳转至Exoplayer DefaultTimeBar的指定进度位置
实现方法
DefaultTimeBar仅负责播放进度的UI展示,跳转进度核心是操作与其绑定的ExoPlayer实例,具体实现步骤如下:
- 首先完成DefaultTimeBar和ExoPlayer的绑定,绑定后进度变化会自动同步到UI
- 等播放器完成媒体资源加载后,计算目标进度对应的毫秒值,调用
seekTo方法跳转即可
Kotlin 代码示例
// 初始化控件和播放器实例 val exoProgress = findViewById<DefaultTimeBar>(R.id.exo_progress) val exoPlayer = ExoPlayer.Builder(this).build() // 绑定播放器和进度条,后续进度自动同步 exoProgress.setPlayer(exoPlayer) // 跳转50%进度的逻辑,建议在播放器STATE_READY状态回调中执行 val totalDuration = exoPlayer.duration if (totalDuration != C.TIME_UNSET) { // 计算50%进度对应的毫秒值 val targetPosition = (totalDuration * 0.5).toLong() // 执行跳转 exoPlayer.seekTo(targetPosition) }
Java 代码示例
// 初始化控件和播放器实例 DefaultTimeBar exoProgress = findViewById(R.id.exo_progress); ExoPlayer exoPlayer = new ExoPlayer.Builder(this).build(); // 绑定播放器和进度条,后续进度自动同步 exoProgress.setPlayer(exoPlayer); // 跳转50%进度的逻辑,建议在播放器STATE_READY状态回调中执行 long totalDuration = exoPlayer.getDuration(); if (totalDuration != C.TIME_UNSET) { // 计算50%进度对应的毫秒值 long targetPosition = (long) (totalDuration * 0.5); // 执行跳转 exoPlayer.seekTo(targetPosition); }
注意:必须等播放器回调
onPlaybackStateChanged方法、状态为STATE_READY之后再获取总时长,否则拿到的是无效值,跳转不会生效。如果播放的是多段媒体资源,可以调用seekTo(mediaItemIndex, targetPosition)指定对应媒体片段的跳转位置。
内容的提问来源于stack exchange,提问作者Devrath
相关产品推荐
相关产品推荐

