Set starting playback position
This commit is contained in:
parent
fd4fbc7ee5
commit
be8402fb37
5 changed files with 37 additions and 23 deletions
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -143,5 +143,8 @@
|
|||
<argument
|
||||
android:name="mediaSourceId"
|
||||
app:argType="string" />
|
||||
<argument
|
||||
android:name="playbackPosition"
|
||||
app:argType="long" />
|
||||
</activity>
|
||||
</navigation>
|
Loading…
Reference in a new issue