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

ExoPlayer调用seek相关接口后视频缩放功能异常求助

ExoPlayer HLS流seek后视频缩放异常问题

使用ExoPlayer 2.18.3播放HLS流时,初始加载显示正常,但调用seekBack、seekForward或seekTo接口后,视频缩放功能出现异常。

初始显示效果:
初始显示效果

seek后异常显示效果:
seek后显示效果

布局代码

<com.google.android.exoplayer2.ui.PlayerView
    android:id="@+id/exoPlayer"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:resize_mode="fit"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:use_controller="false"/>

初始化代码

init {
    exoPlayer = ExoPlayer.Builder(context).build()
    exoPlayer.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT
    exoPlayer.addListener(this)
}

解决方案尝试

  1. seek完成后强制刷新缩放配置
    在onSeekComplete回调中手动重置PlayerView的resize模式,触发缩放逻辑重新计算:
override fun onSeekComplete(playbackState: PlaybackState) {
    super.onSeekComplete(playbackState)
    playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
    exoPlayer.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT
}
  1. 禁用自适应分辨率切换
    若HLS流包含多分辨率分片,seek后可能触发分辨率切换导致缩放异常,可固定播放分辨率:
val trackSelector = DefaultTrackSelector(context)
trackSelector.setParameters(
    trackSelector.buildUponParameters()
        .setVideoSizeConstraints(
            /* maxWidth = */ 1280,
            /* maxHeight = */ 720,
            /* maxPixelCount = */ 1280 * 720
        )
)
exoPlayer = ExoPlayer.Builder(context)
    .setTrackSelector(trackSelector)
    .build()
  1. 升级ExoPlayer版本
    2.18.3存在部分已知的seek相关渲染bug,建议升级至2.20.x及以上稳定版本,官方后续版本已修复类似的缩放适配问题。

  2. 监听视频尺寸变化并重设缩放
    通过VideoListener监听视频尺寸变更,在回调中强制设置缩放模式:

exoPlayer.addVideoListener(object : VideoListener {
    override fun onVideoSizeChanged(videoSize: VideoSize) {
        exoPlayer.videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT
        playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
    }

    override fun onRenderedFirstFrame() {}
    override fun onVideoEnabledChanged(isEnabled: Boolean) {}
})

内容的提问来源于stack exchange,提问作者Stephan Pepper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 07:34:58