MPVPlayer: Start from playback position

This commit is contained in:
jarnedemeulemeester 2021-09-18 21:11:45 +02:00
parent 64b86f2b40
commit 1d0f2b3358
No known key found for this signature in database
GPG key ID: B61B7B150DB6A6D2
3 changed files with 29 additions and 29 deletions

View file

@ -10,10 +10,6 @@ import dev.jdtech.jellyfin.R
class InitializingFragment : Fragment() { class InitializingFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?

View file

@ -293,6 +293,7 @@ class MPVPlayer(
} }
seekTo(C.TIME_UNSET) seekTo(C.TIME_UNSET)
if (playWhenReady) { if (playWhenReady) {
Log.d("mpv", "Starting playback...")
MPVLib.setPropertyBoolean("pause", false) MPVLib.setPropertyBoolean("pause", false)
} }
for (videoListener in videoListeners) { for (videoListener in videoListeners) {
@ -586,7 +587,8 @@ class MPVPlayer(
* bounds of the list of media items. * bounds of the list of media items.
*/ */
override fun setMediaItems(mediaItems: MutableList<MediaItem>, startWindowIndex: Int, startPositionMs: Long) { override fun setMediaItems(mediaItems: MutableList<MediaItem>, startWindowIndex: Int, startPositionMs: Long) {
TODO("Not yet implemented") internalMediaItems = mediaItems
initialSeekTo = startPositionMs / 1000
} }
/** /**
@ -658,7 +660,7 @@ class MPVPlayer(
trackSelectionArray = TrackSelectionArray() trackSelectionArray = TrackSelectionArray()
playbackParameters = PlaybackParameters.DEFAULT playbackParameters = PlaybackParameters.DEFAULT
initialCommands.clear() initialCommands.clear()
initialSeekTo = 0L //initialSeekTo = 0L
} }
/** Prepares the player. */ /** Prepares the player. */
@ -814,6 +816,7 @@ class MPVPlayer(
val seekTo = if (positionMs != C.TIME_UNSET) positionMs / C.MILLIS_PER_SECOND else initialSeekTo val seekTo = if (positionMs != C.TIME_UNSET) positionMs / C.MILLIS_PER_SECOND else initialSeekTo
if (isPlayerReady) { if (isPlayerReady) {
MPVLib.command(arrayOf("seek", "$seekTo", "absolute")) MPVLib.command(arrayOf("seek", "$seekTo", "absolute"))
initialSeekTo = 0L
} else { } else {
initialSeekTo = seekTo initialSeekTo = seekTo
} }

View file

@ -58,20 +58,30 @@ constructor(
val preferredSubtitleLanguage = sp.getString("subtitle_language", null) ?: "" val preferredSubtitleLanguage = sp.getString("subtitle_language", null) ?: ""
if (useMpv) { if (useMpv) {
val preferredLanguages = mapOf(TrackType.AUDIO to preferredAudioLanguage, TrackType.SUBTITLE to preferredSubtitleLanguage) val preferredLanguages = mapOf(
player = MPVPlayer(application, false, preferredLanguages, sp.getBoolean("mpv_disable_hwdec", false)) TrackType.AUDIO to preferredAudioLanguage,
TrackType.SUBTITLE to preferredSubtitleLanguage
)
player = MPVPlayer(
application,
false,
preferredLanguages,
sp.getBoolean("mpv_disable_hwdec", false)
)
} else { } else {
val renderersFactory = val renderersFactory =
DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON) DefaultRenderersFactory(application).setExtensionRendererMode(
DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON
)
trackSelector.setParameters( trackSelector.setParameters(
trackSelector.buildUponParameters() trackSelector.buildUponParameters()
.setTunnelingEnabled(true) .setTunnelingEnabled(true)
.setPreferredAudioLanguage(preferredAudioLanguage) .setPreferredAudioLanguage(preferredAudioLanguage)
.setPreferredTextLanguage(preferredSubtitleLanguage) .setPreferredTextLanguage(preferredSubtitleLanguage)
) )
player = SimpleExoPlayer.Builder(application, renderersFactory) player = SimpleExoPlayer.Builder(application, renderersFactory)
.setTrackSelector(trackSelector) .setTrackSelector(trackSelector)
.build() .build()
} }
} }
@ -99,18 +109,9 @@ constructor(
Timber.e(e) Timber.e(e)
} }
when (player) { player.setMediaItems(mediaItems, currentWindow, items[0].playbackPosition)
is MPVPlayer -> { player.prepare()
player.setMediaItems(mediaItems) player.play()
player.prepare()
player.play()
}
is SimpleExoPlayer -> {
player.setMediaItems(mediaItems, currentWindow, items[0].playbackPosition)
player.playWhenReady = playWhenReady
player.prepare()
}
}
} }
pollPosition(player) pollPosition(player)
@ -130,11 +131,11 @@ constructor(
} }
} }
playWhenReady = player.playWhenReady playWhenReady = player.playWhenReady
playbackPosition = player.currentPosition playbackPosition = player.currentPosition
currentWindow = player.currentWindowIndex currentWindow = player.currentWindowIndex
player.removeListener(this) player.removeListener(this)
player.release() player.release()
} }
private fun pollPosition(player: BasePlayer) { private fun pollPosition(player: BasePlayer) {