Set starting playback position

This commit is contained in:
Jarne Demeulemeester 2021-07-12 13:26:51 +02:00
parent fd4fbc7ee5
commit be8402fb37
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
5 changed files with 37 additions and 23 deletions

View file

@ -34,7 +34,7 @@ class PlayerActivity : AppCompatActivity() {
})
if (viewModel.player.value == null) {
viewModel.initializePlayer(args.itemId, args.mediaSourceId)
viewModel.initializePlayer(args.itemId, args.mediaSourceId, args.playbackPosition)
}
hideSystemUI()
}

View file

@ -34,7 +34,8 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
binding.playButton.setOnClickListener {
viewModel.mediaSources.value?.get(0)?.id?.let { mediaSourceId ->
navigateToPlayerActivity(args.episodeId,
mediaSourceId
mediaSourceId,
viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
)
}
}
@ -55,11 +56,12 @@ class EpisodeBottomSheetFragment : BottomSheetDialogFragment() {
return binding.root
}
private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) {
private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String, playbackPosition: Long) {
findNavController().navigate(
EpisodeBottomSheetFragmentDirections.actionEpisodeBottomSheetFragmentToPlayerActivity(
itemId,
mediaSourceId
mediaSourceId,
playbackPosition
)
)
}

View file

@ -55,7 +55,13 @@ class MediaInfoFragment : Fragment() {
})
viewModel.navigateToPlayer.observe(viewLifecycleOwner, { mediaSource ->
mediaSource.id?.let { navigateToPlayerActivity(args.itemId, it) }
mediaSource.id?.let {
navigateToPlayerActivity(
args.itemId,
it,
viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
)
}
})
binding.trailerButton.setOnClickListener {
@ -87,7 +93,8 @@ class MediaInfoFragment : Fragment() {
} else {
navigateToPlayerActivity(
args.itemId,
viewModel.mediaSources.value!![0].id!!
viewModel.mediaSources.value!![0].id!!,
viewModel.item.value!!.userData!!.playbackPositionTicks.div(10000)
)
}
}
@ -116,11 +123,16 @@ class MediaInfoFragment : Fragment() {
)
}
private fun navigateToPlayerActivity(itemId: UUID, mediaSourceId: String) {
private fun navigateToPlayerActivity(
itemId: UUID,
mediaSourceId: String,
playbackPosition: Long
) {
findNavController().navigate(
MediaInfoFragmentDirections.actionMediaInfoFragmentToPlayerActivity(
itemId,
mediaSourceId
mediaSourceId,
playbackPosition
)
)
}

View file

@ -7,7 +7,6 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.android.exoplayer2.*
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.jdtech.jellyfin.repository.JellyfinRepository
import kotlinx.coroutines.launch
@ -33,31 +32,29 @@ constructor(
playbackStateListener = PlaybackStateListener()
}
fun initializePlayer(itemId: UUID, mediaSourceId: String) {
if (player.value == null) {
val trackSelector = DefaultTrackSelector(application)
val renderersFactory = DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
trackSelector.parameters.buildUpon().setMaxVideoSizeSd()
_player.value = SimpleExoPlayer.Builder(application, renderersFactory)
.setTrackSelector(trackSelector)
.build()
}
fun initializePlayer(itemId: UUID, mediaSourceId: String, playbackPosition: Long) {
val renderersFactory =
DefaultRenderersFactory(application).setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON)
val player = SimpleExoPlayer.Builder(application, renderersFactory)
.build()
player.value?.addListener(playbackStateListener)
player.addListener(playbackStateListener)
viewModelScope.launch {
val streamUrl = jellyfinRepository.getStreamUrl(itemId, mediaSourceId)
Log.d("PlayerActivity", streamUrl)
val mediaItem =
MediaItem.Builder()
.setMediaId(itemId.toString())
.setUri(streamUrl)
.build()
player.value?.setMediaItem(mediaItem)
player.setMediaItem(mediaItem, playbackPosition)
}
player.value?.playWhenReady = playWhenReady
player.value?.seekTo(currentWindow, playbackPosition)
player.value?.prepare()
player.playWhenReady = playWhenReady
player.prepare()
_player.value = player
}
private fun releasePlayer() {

View file

@ -143,5 +143,8 @@
<argument
android:name="mediaSourceId"
app:argType="string" />
<argument
android:name="playbackPosition"
app:argType="long" />
</activity>
</navigation>