mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-07 21:48:14 -08:00
fix: Small change to native player prev/next
This commit is contained in:
parent
a99e869c08
commit
311b647286
1 changed files with 32 additions and 39 deletions
|
|
@ -5,6 +5,7 @@ import VideoPlayerApi
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import androidx.core.os.postDelayed
|
||||||
import androidx.media3.common.MediaItem
|
import androidx.media3.common.MediaItem
|
||||||
import androidx.media3.common.MimeTypes
|
import androidx.media3.common.MimeTypes
|
||||||
import androidx.media3.common.Player
|
import androidx.media3.common.Player
|
||||||
|
|
@ -18,6 +19,7 @@ import nl.jknaapen.fladder.utility.getAudioTracks
|
||||||
import nl.jknaapen.fladder.utility.getSubtitleTracks
|
import nl.jknaapen.fladder.utility.getSubtitleTracks
|
||||||
import nl.jknaapen.fladder.utility.setInternalAudioTrack
|
import nl.jknaapen.fladder.utility.setInternalAudioTrack
|
||||||
import nl.jknaapen.fladder.utility.setInternalSubtitleTrack
|
import nl.jknaapen.fladder.utility.setInternalSubtitleTrack
|
||||||
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
class VideoPlayerImplementation(
|
class VideoPlayerImplementation(
|
||||||
) : VideoPlayerApi {
|
) : VideoPlayerApi {
|
||||||
|
|
@ -36,53 +38,44 @@ class VideoPlayerImplementation(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun open(url: String, play: Boolean) {
|
override fun open(url: String, play: Boolean) {
|
||||||
try {
|
Handler(Looper.getMainLooper()).postDelayed(delayInMillis = 1.seconds.inWholeMilliseconds) {
|
||||||
playbackData.value?.let {
|
try {
|
||||||
VideoPlayerObject.setAudioTrackIndex(it.defaultAudioTrack.toInt(), true)
|
playbackData.value?.let {
|
||||||
VideoPlayerObject.setSubtitleTrackIndex(it.defaultSubtrack.toInt(), true)
|
VideoPlayerObject.setAudioTrackIndex(it.defaultAudioTrack.toInt(), true)
|
||||||
}
|
VideoPlayerObject.setSubtitleTrackIndex(it.defaultSubtrack.toInt(), true)
|
||||||
|
}
|
||||||
|
|
||||||
|
val subTitles = playbackData.value?.subtitleTracks ?: listOf()
|
||||||
|
val mediaItem = MediaItem.Builder()
|
||||||
|
.setUri(url)
|
||||||
|
.setTag(playbackData.value?.title)
|
||||||
|
.setMediaId(playbackData.value?.id ?: "")
|
||||||
|
.setSubtitleConfigurations(
|
||||||
|
subTitles.filter { it.external && !it.url.isNullOrEmpty() }.map { sub ->
|
||||||
|
MediaItem.SubtitleConfiguration.Builder(sub.url!!.toUri())
|
||||||
|
.setMimeType(guessSubtitleMimeType(sub.url))
|
||||||
|
.setLanguage(sub.languageCode)
|
||||||
|
.setLabel(sub.name)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.build()
|
||||||
|
|
||||||
val subTitles = playbackData.value?.subtitleTracks ?: listOf()
|
|
||||||
val mediaItem = MediaItem.Builder().apply {
|
|
||||||
setUri(url)
|
|
||||||
setTag(playbackData.value?.title)
|
|
||||||
setMediaId(playbackData.value?.id ?: "")
|
|
||||||
setSubtitleConfigurations(
|
|
||||||
subTitles.filter { it.external && !it.url.isNullOrEmpty() }.map { sub ->
|
|
||||||
MediaItem.SubtitleConfiguration.Builder(sub.url!!.toUri())
|
|
||||||
.setMimeType(guessSubtitleMimeType(sub.url))
|
|
||||||
.setLanguage(sub.languageCode)
|
|
||||||
.setLabel(sub.name)
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}.build()
|
|
||||||
|
|
||||||
//Ensure correct thread when calling from the main activity
|
|
||||||
Handler(Looper.getMainLooper()).post {
|
|
||||||
player?.stop()
|
player?.stop()
|
||||||
player?.clearMediaItems()
|
player?.clearMediaItems()
|
||||||
player?.setMediaItem(mediaItem)
|
player?.setMediaItem(mediaItem)
|
||||||
player?.prepare()
|
player?.prepare()
|
||||||
}
|
|
||||||
|
|
||||||
//Wait for player to be ready before "starting" playback
|
val startPosition = playbackData.value?.startPosition ?: 0L
|
||||||
val listener = object : Player.Listener {
|
if (startPosition > 0) {
|
||||||
override fun onPlaybackStateChanged(state: Int) {
|
player?.seekTo(startPosition)
|
||||||
if (state == Player.STATE_READY) {
|
|
||||||
player?.removeListener(this) // remove listener immediately
|
player?.playWhenReady = play
|
||||||
val startPosition = playbackData.value?.startPosition ?: 0L
|
|
||||||
if (startPosition > 0) {
|
|
||||||
player?.seekTo(startPosition)
|
|
||||||
}
|
|
||||||
player?.playWhenReady = play
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
println("Error playing video $e")
|
||||||
}
|
}
|
||||||
player?.addListener(listener)
|
|
||||||
|
|
||||||
} catch (e: Exception) {
|
|
||||||
println("Error playing video $e")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -163,4 +156,4 @@ fun ExoPlayer.properlySetSubAndAudioTracks(playableData: PlayableData) {
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue