remove some jerkyness during video playback fastforward/rewind

This commit is contained in:
tibbi 2019-01-04 11:27:53 +01:00
parent ed4d870261
commit 80d3bf4cea

View file

@ -32,6 +32,8 @@ import kotlinx.android.synthetic.main.activity_video_player.*
import kotlinx.android.synthetic.main.bottom_video_time_holder.* import kotlinx.android.synthetic.main.bottom_video_time_holder.*
open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListener, TextureView.SurfaceTextureListener { open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListener, TextureView.SurfaceTextureListener {
private val PLAY_WHEN_READY_DRAG_DELAY = 100L
private var mIsFullscreen = false private var mIsFullscreen = false
private var mIsPlaying = false private var mIsPlaying = false
private var mWasVideoStarted = false private var mWasVideoStarted = false
@ -45,6 +47,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
private var mUri: Uri? = null private var mUri: Uri? = null
private var mExoPlayer: SimpleExoPlayer? = null private var mExoPlayer: SimpleExoPlayer? = null
private var mTimerHandler = Handler() private var mTimerHandler = Handler()
private var mPlayWhenReadyHandler = Handler()
private var mTouchDownX = 0f private var mTouchDownX = 0f
private var mTouchDownY = 0f private var mTouchDownY = 0f
@ -97,7 +100,12 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
if (!isChangingConfigurations) { if (!isChangingConfigurations) {
cleanup() pauseVideo()
video_curr_time.text = 0.getFormattedDuration()
releaseExoPlayer()
video_seekbar.progress = 0
mTimerHandler.removeCallbacksAndMessages(null)
mPlayWhenReadyHandler.removeCallbacksAndMessages(null)
} }
} }
@ -485,6 +493,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
newProgress = Math.max(Math.min(mExoPlayer!!.duration.toFloat(), newProgress), 0f) newProgress = Math.max(Math.min(mExoPlayer!!.duration.toFloat(), newProgress), 0f)
val newSeconds = (newProgress / 1000).toInt() val newSeconds = (newProgress / 1000).toInt()
setPosition(newSeconds) setPosition(newSeconds)
resetPlayWhenReady()
} }
} }
MotionEvent.ACTION_UP -> { MotionEvent.ACTION_UP -> {
@ -511,12 +520,12 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
} }
} }
private fun cleanup() { private fun resetPlayWhenReady() {
pauseVideo() mExoPlayer?.playWhenReady = false
video_curr_time.text = 0.getFormattedDuration() mPlayWhenReadyHandler.removeCallbacksAndMessages(null)
releaseExoPlayer() mPlayWhenReadyHandler.postDelayed({
video_seekbar.progress = 0 mExoPlayer?.playWhenReady = true
mTimerHandler.removeCallbacksAndMessages(null) }, PLAY_WHEN_READY_DRAG_DELAY)
} }
private fun releaseExoPlayer() { private fun releaseExoPlayer() {
@ -530,6 +539,7 @@ open class VideoPlayerActivity : SimpleActivity(), SeekBar.OnSeekBarChangeListen
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
if (mExoPlayer != null && fromUser) { if (mExoPlayer != null && fromUser) {
setPosition(progress) setPosition(progress)
resetPlayWhenReady()
} }
} }