mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-08 15:50:16 +02:00
Basic track selection
This commit is contained in:
parent
f3688b8417
commit
5f2cf5849c
1 changed files with 58 additions and 41 deletions
|
|
@ -31,6 +31,9 @@ import androidx.media3.common.util.ListenerSet
|
||||||
import androidx.media3.common.util.Size
|
import androidx.media3.common.util.Size
|
||||||
import androidx.media3.common.util.UnstableApi
|
import androidx.media3.common.util.UnstableApi
|
||||||
import androidx.media3.common.util.Util
|
import androidx.media3.common.util.Util
|
||||||
|
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector
|
||||||
|
import androidx.media3.exoplayer.trackselection.TrackSelector
|
||||||
|
import androidx.media3.exoplayer.upstream.DefaultBandwidthMeter
|
||||||
import com.github.damontecres.wholphin.util.mpv.MPVLib.MpvEvent.MPV_EVENT_END_FILE
|
import com.github.damontecres.wholphin.util.mpv.MPVLib.MpvEvent.MPV_EVENT_END_FILE
|
||||||
import com.github.damontecres.wholphin.util.mpv.MPVLib.MpvEvent.MPV_EVENT_FILE_LOADED
|
import com.github.damontecres.wholphin.util.mpv.MPVLib.MpvEvent.MPV_EVENT_FILE_LOADED
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
@ -48,7 +51,8 @@ class MpvPlayer(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
enableHardwareDecoding: Boolean,
|
enableHardwareDecoding: Boolean,
|
||||||
) : BasePlayer(),
|
) : BasePlayer(),
|
||||||
MPVLib.EventObserver {
|
MPVLib.EventObserver,
|
||||||
|
TrackSelector.InvalidationListener {
|
||||||
companion object {
|
companion object {
|
||||||
private const val DEBUG = false
|
private const val DEBUG = false
|
||||||
}
|
}
|
||||||
|
|
@ -66,6 +70,7 @@ class MpvPlayer(
|
||||||
listener.onEvents(this@MpvPlayer, Player.Events(eventFlags))
|
listener.onEvents(this@MpvPlayer, Player.Events(eventFlags))
|
||||||
}
|
}
|
||||||
private val availableCommands: Player.Commands
|
private val availableCommands: Player.Commands
|
||||||
|
private val trackSelector = DefaultTrackSelector(context)
|
||||||
|
|
||||||
private var mediaItem: MediaItem? = null
|
private var mediaItem: MediaItem? = null
|
||||||
private var startPositionMs: Long = 0L
|
private var startPositionMs: Long = 0L
|
||||||
|
|
@ -124,6 +129,7 @@ class MpvPlayer(
|
||||||
// COMMAND_GET_TEXT,
|
// COMMAND_GET_TEXT,
|
||||||
COMMAND_RELEASE,
|
COMMAND_RELEASE,
|
||||||
).build()
|
).build()
|
||||||
|
trackSelector.init(this, DefaultBandwidthMeter.getSingletonInstance(context))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getApplicationLooper(): Looper = looper
|
override fun getApplicationLooper(): Looper = looper
|
||||||
|
|
@ -282,13 +288,44 @@ class MpvPlayer(
|
||||||
|
|
||||||
override fun getTrackSelectionParameters(): TrackSelectionParameters {
|
override fun getTrackSelectionParameters(): TrackSelectionParameters {
|
||||||
if (DEBUG) Timber.v("getTrackSelectionParameters")
|
if (DEBUG) Timber.v("getTrackSelectionParameters")
|
||||||
// TODO
|
|
||||||
return TrackSelectionParameters.Builder().build()
|
return TrackSelectionParameters
|
||||||
|
.Builder()
|
||||||
|
.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setTrackSelectionParameters(parameters: TrackSelectionParameters) {
|
override fun setTrackSelectionParameters(parameters: TrackSelectionParameters) {
|
||||||
if (DEBUG) Timber.v("setTrackSelectionParameters")
|
if (DEBUG) Timber.v("setTrackSelectionParameters")
|
||||||
// TODO
|
val tracks = getTracks()
|
||||||
|
if (C.TRACK_TYPE_TEXT in parameters.disabledTrackTypes) {
|
||||||
|
// Subtitles disabled
|
||||||
|
Timber.v("TrackSelection: disabling subtitles")
|
||||||
|
MPVLib.setPropertyString("sid", "no")
|
||||||
|
}
|
||||||
|
if (C.TRACK_TYPE_AUDIO in parameters.disabledTrackTypes) {
|
||||||
|
// Audio disabled
|
||||||
|
Timber.v("TrackSelection: disabling audio")
|
||||||
|
MPVLib.setPropertyString("aid", "no")
|
||||||
|
}
|
||||||
|
Timber.v("TrackSelection: Got ${parameters.overrides.size} overrides")
|
||||||
|
parameters.overrides.forEach { (trackGroup, trackSelectionOverride) ->
|
||||||
|
tracks.groups.firstOrNull { it.mediaTrackGroup == trackGroup }?.let {
|
||||||
|
val id = it.mediaTrackGroup.getFormat(0).id
|
||||||
|
val splits = id?.split(":")
|
||||||
|
val trackId = splits?.getOrNull(1)
|
||||||
|
val propertyName =
|
||||||
|
when (it.mediaTrackGroup.type) {
|
||||||
|
C.TRACK_TYPE_AUDIO -> "aid"
|
||||||
|
C.TRACK_TYPE_VIDEO -> "vid"
|
||||||
|
C.TRACK_TYPE_TEXT -> "sid"
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
Timber.v("TrackSelection: activating %s %s '%s'", propertyName, trackId, id)
|
||||||
|
if (trackId != null && propertyName != null) {
|
||||||
|
MPVLib.setPropertyString(propertyName, trackId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getMediaMetadata(): MediaMetadata {
|
override fun getMediaMetadata(): MediaMetadata {
|
||||||
|
|
@ -425,9 +462,7 @@ class MpvPlayer(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSurfaceSize(): Size {
|
override fun getSurfaceSize(): Size = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getCurrentCues(): CueGroup = CueGroup.EMPTY_TIME_ZERO
|
override fun getCurrentCues(): CueGroup = CueGroup.EMPTY_TIME_ZERO
|
||||||
|
|
||||||
|
|
@ -437,62 +472,40 @@ class MpvPlayer(
|
||||||
return DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).build()
|
return DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE).build()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDeviceVolume(): Int {
|
override fun getDeviceVolume(): Int = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun isDeviceMuted(): Boolean {
|
override fun isDeviceMuted(): Boolean = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
override fun setDeviceVolume(volume: Int) {
|
override fun setDeviceVolume(volume: Int): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setDeviceVolume(
|
override fun setDeviceVolume(
|
||||||
volume: Int,
|
volume: Int,
|
||||||
flags: Int,
|
flags: Int,
|
||||||
) {
|
): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
override fun increaseDeviceVolume() {
|
override fun increaseDeviceVolume(): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun increaseDeviceVolume(flags: Int) {
|
override fun increaseDeviceVolume(flags: Int): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
override fun decreaseDeviceVolume() {
|
override fun decreaseDeviceVolume(): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun decreaseDeviceVolume(flags: Int) {
|
override fun decreaseDeviceVolume(flags: Int): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
override fun setDeviceMuted(muted: Boolean) {
|
override fun setDeviceMuted(muted: Boolean): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setDeviceMuted(
|
override fun setDeviceMuted(
|
||||||
muted: Boolean,
|
muted: Boolean,
|
||||||
flags: Int,
|
flags: Int,
|
||||||
) {
|
): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun setAudioAttributes(
|
override fun setAudioAttributes(
|
||||||
audioAttributes: AudioAttributes,
|
audioAttributes: AudioAttributes,
|
||||||
handleAudioFocus: Boolean,
|
handleAudioFocus: Boolean,
|
||||||
) {
|
): Unit = throw UnsupportedOperationException()
|
||||||
TODO("Not yet implemented")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun seekTo(
|
override fun seekTo(
|
||||||
mediaItemIndex: Int,
|
mediaItemIndex: Int,
|
||||||
|
|
@ -627,7 +640,7 @@ class MpvPlayer(
|
||||||
val builder =
|
val builder =
|
||||||
Format
|
Format
|
||||||
.Builder()
|
.Builder()
|
||||||
.setId(id)
|
.setId("$idx:$id")
|
||||||
.setCodecs(codec)
|
.setCodecs(codec)
|
||||||
.setSampleMimeType(mimeType)
|
.setSampleMimeType(mimeType)
|
||||||
.setLanguage(lang)
|
.setLanguage(lang)
|
||||||
|
|
@ -651,4 +664,8 @@ class MpvPlayer(
|
||||||
}
|
}
|
||||||
return Tracks(groups)
|
return Tracks(groups)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTrackSelectionsInvalidated() {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue