diff --git a/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt b/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt index 19ecce6..02adb6c 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/NewPlayer.kt @@ -52,8 +52,6 @@ interface NewPlayer { fun prepare() fun play() fun pause() - fun fastSeek(steps: Int) - fun seekTo(millisecond: Long) fun addToPlaylist(newItem: String) fun addListener(callbackListener: Listener) @@ -85,9 +83,15 @@ class NewPlayerImpl(override val internal_player: Player, override val repositor private var callbackListeners: MutableList = ArrayList() - override val duartion: Long = internal_player.duration - override val bufferedPercentage: Int = internal_player.bufferedPercentage - override var currentPosition: Long = internal_player.currentPosition + override val duartion: Long + get() = internal_player.duration + + override val bufferedPercentage: Int + get() = internal_player.bufferedPercentage + override var currentPosition: Long + get() = internal_player.currentPosition + set(value) {internal_player.seekTo(value)} + override var fastSeekAmountSec: Int = 10 override var playBackMode: PlayMode = PlayMode.EMBEDDED_VIDEO override var playList: MutableList = ArrayList() @@ -114,15 +118,6 @@ class NewPlayerImpl(override val internal_player: Player, override val repositor internal_player.pause() } - override fun fastSeek(steps: Int) { - val currentPosition = internal_player.currentPosition - internal_player.seekTo(currentPosition + fastSeekAmountSec * 1000 * steps) - } - - override fun seekTo(millisecond: Long) { - internal_player.seekTo(millisecond) - } - override fun addToPlaylist(newItem: String) { Log.d(TAG, "Not implemented add to playlist") } diff --git a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt index cae48a7..1b1870f 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt @@ -29,7 +29,7 @@ import net.newpipe.newplayer.ui.ContentScale interface VideoPlayerViewModel { var newPlayer: NewPlayer? - val player: Player? + val internalPlayer: Player? val uiState: StateFlow var minContentRatio: Float var maxContentRatio: Float diff --git a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt index 8993200..315cc3b 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt @@ -65,12 +65,11 @@ class VideoPlayerViewModelImpl @Inject constructor( set(value) { field = value installExoPlayer() - mutableUiState.update { it.copy(fastseekSeconds = field?.fastSeekAmountSec ?: 10) } } override val uiState = mutableUiState.asStateFlow() - override val player: Player? + override val internalPlayer: Player? get() = newPlayer?.internal_player override var minContentRatio: Float = 4F / 3F @@ -109,7 +108,7 @@ class VideoPlayerViewModelImpl @Inject constructor( } private fun installExoPlayer() { - player?.let { player -> + internalPlayer?.let { player -> Log.d(TAG, "Install player: ${player.videoSize.width}") player.addListener(object : Player.Listener { @@ -228,9 +227,9 @@ class VideoPlayerViewModelImpl @Inject constructor( } private fun updateProgressOnce() { - val progress = player?.currentPosition ?: 0 - val duration = player?.duration ?: 1 - val bufferedPercentage = (player?.bufferedPercentage?.toFloat() ?: 0f) / 100f + val progress = internalPlayer?.currentPosition ?: 0 + val duration = internalPlayer?.duration ?: 1 + val bufferedPercentage = (internalPlayer?.bufferedPercentage?.toFloat() ?: 0f) / 100f val progressPercentage = progress.toFloat() / duration.toFloat() mutableUiState.update { @@ -259,8 +258,8 @@ class VideoPlayerViewModelImpl @Inject constructor( override fun seekingFinished() { resetHideUiDelayedJob() val seekerPosition = mutableUiState.value.seekerPosition - val seekPositionInMs = (player?.duration?.toFloat() ?: 0F) * seekerPosition - newPlayer?.seekTo(seekPositionInMs.toLong()) + val seekPositionInMs = (internalPlayer?.duration?.toFloat() ?: 0F) * seekerPosition + newPlayer?.currentPosition = seekPositionInMs.toLong() Log.i(TAG, "Seek to Ms: $seekPositionInMs") } @@ -282,7 +281,9 @@ class VideoPlayerViewModelImpl @Inject constructor( override fun fastSeekFinished() { val fastSeekAmount = mutableUiState.value.fastseekSeconds - newPlayer?.fastSeek(fastSeekAmount) + Log.d(TAG, "$fastSeekAmount") + + newPlayer?.currentPosition = (newPlayer?.currentPosition ?: 0) + (fastSeekAmount * 1000) mutableUiState.update { it.copy(fastseekSeconds = 0) } @@ -306,7 +307,7 @@ class VideoPlayerViewModelImpl @Inject constructor( } private fun getEmbeddedUiRatio() = - player?.let { player -> + internalPlayer?.let { player -> val videoRatio = VideoSize.fromMedia3VideoSize(player.videoSize).getRatio() return (if (videoRatio.isNaN()) currentContentRatio @@ -320,7 +321,7 @@ class VideoPlayerViewModelImpl @Inject constructor( companion object { val dummy = object : VideoPlayerViewModel { override var newPlayer: NewPlayer? = null - override val player: Player? = null + override val internalPlayer: Player? = null override val uiState = MutableStateFlow(VideoPlayerUIState.DEFAULT) override var minContentRatio = 4F / 3F override var maxContentRatio = 16F / 9F diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt index d205349..680ff8d 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt @@ -62,7 +62,7 @@ fun VideoPlayerUI( ) { if (viewModel == null) { VideoPlayerLoadingPlaceholder() - } else if (viewModel.player == null) { + } else if (viewModel.internalPlayer == null) { VideoPlayerLoadingPlaceholder(viewModel.uiState.collectAsState().value.embeddedUiRatio) } else { val uiState by viewModel.uiState.collectAsState() @@ -136,7 +136,7 @@ fun VideoPlayerUI( ) { Box(contentAlignment = Alignment.Center) { PlaySurface( - player = viewModel.player, + player = viewModel.internalPlayer, lifecycle = lifecycle, fitMode = uiState.contentFitMode, uiRatio = if (uiState.fullscreen) screenRatio else uiState.embeddedUiRatio,