如何在ExoPlayer中设置视频时长?需将缩略视频设为5秒并循环
解决ExoPlayer限制播放时长为5秒并循环的问题
核心思路:通过两种方式实现仅播放视频前5秒并循环的效果——要么主动监听播放进度截断跳转,要么直接裁剪视频片段限制播放范围。
方案一:进度监听+主动跳转
针对已实现循环但无法限制时长的情况,通过监听播放位置,当到达5秒时强制跳回开头,配合循环模式实现需求:// 先开启单循环模式 exoPlayer.repeatMode = Player.REPEAT_MODE_ONE // 注册播放进度监听 exoPlayer.addListener(object : Player.Listener { override fun onPositionChanged(position: Long, bufferedPosition: Long, playbackSpeed: Float, isPlaying: Boolean) { super.onPositionChanged(position, bufferedPosition, playbackSpeed, isPlaying) val targetDuration = 5000L // 目标时长5秒,单位毫秒 if (isPlaying && position >= targetDuration) { exoPlayer.seekTo(0) // 跳回开头,继续循环前5秒 } } })方案二:直接裁剪视频片段(更高效)
通过ClippingConfiguration直接指定播放的时间范围,播放器只会加载并播放该片段,无需额外监听:// 构建仅包含前5秒的媒体片段配置 val clipConfig = ClippingConfiguration.Builder() .setStartPositionMs(0) .setEndPositionMs(5000L) .build() val mediaItem = MediaItem.Builder() .setUri(videoUri) // 替换为你的视频地址 .setClippingConfiguration(clipConfig) .build() exoPlayer.setMediaItem(mediaItem) exoPlayer.repeatMode = Player.REPEAT_MODE_ONE // 开启单循环 exoPlayer.prepare() exoPlayer.play()关于seek(duration)无效的原因
seek(duration)只是让播放器跳转到指定时间点,不会阻止后续播放,因此无法实现“只播放前5秒”的限制,必须通过主动截断或片段裁剪的方式实现。
内容的提问来源于stack exchange,提问作者Katarina Zivkovic
相关产品推荐
相关产品推荐

