MPVPlayer: Start from playback position
This commit is contained in:
parent
64b86f2b40
commit
1d0f2b3358
3 changed files with 29 additions and 29 deletions
|
@ -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?
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue