diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index 1f0f06f739b2..6bd5be386339 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.3 + +* Rate limited `seekTo` calls for ExoPlayer. + ## 2.3.2 * Updates ExoPlayer to 2.17.0. diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java index dc7c88144583..a0dbb105ab44 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java @@ -153,6 +153,8 @@ private MediaSource buildMediaSource( } } + boolean readyToSeek = false; + private void setupVideoPlayer( EventChannel eventChannel, TextureRegistry.SurfaceTextureEntry textureEntry) { eventChannel.setStreamHandler( @@ -191,6 +193,10 @@ public void onPlaybackStateChanged(final int playbackState) { setBuffering(true); sendBufferingUpdate(); } else if (playbackState == Player.STATE_READY) { + readyToSeek = true; // indicate that seeking the video is now possible + if (futureLocation != -1) { + seekTo(futureLocation); + } if (!isInitialized) { isInitialized = true; sendInitialized(); @@ -255,8 +261,19 @@ void setPlaybackSpeed(double value) { exoPlayer.setPlaybackParameters(playbackParameters); } + int futureLocation = -1; + void seekTo(int location) { - exoPlayer.seekTo(location); + // Try to set the location, if the player is currently buffering because + // of a previous seekTo, save the futureLocation to be seeked when the + // player will be readyToSeek + if (readyToSeek) { + readyToSeek = false; + futureLocation = -1; + exoPlayer.seekTo(location); + } else { + futureLocation = location; + } } long getPosition() { diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml index aa288ed71eac..bc69fd41369a 100644 --- a/packages/video_player/video_player_android/pubspec.yaml +++ b/packages/video_player/video_player_android/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_android description: Android implementation of the video_player plugin. repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.3.2 +version: 2.3.3 environment: sdk: ">=2.14.0 <3.0.0"