From 94454172dd17c96a1ff212fa59b2a1cbf15c8a5f Mon Sep 17 00:00:00 2001 From: Kai <git@seaoflaurels.com> Date: Wed, 8 Jan 2025 20:43:38 -0600 Subject: [PATCH 1/2] Add UI to show when adaptive streams (HLS and DASH) are in auto mode Changelog: added --- .../mainactivity/main/VideoDetailView.kt | 44 ++++++++++++++----- .../views/video/FutoVideoPlayerBase.kt | 14 +++--- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index bc606582..4224d7e0 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -1901,13 +1901,35 @@ class VideoDetailView : ConstraintLayout { return super.onInterceptTouchEvent(ev); } - //Actions private fun showVideoSettings() { Logger.i(TAG, "showVideoSettings") _overlay_quality_selector?.selectOption("video", _lastVideoSource); _overlay_quality_selector?.selectOption("audio", _lastAudioSource); _overlay_quality_selector?.selectOption("subtitles", _lastSubtitleSource); + + if (_lastVideoSource is IDashManifestSource || _lastVideoSource is IHLSManifestSource) { + + val videoTracks = + _player.exoPlayer?.player?.currentTracks?.groups?.firstOrNull { it.mediaTrackGroup.type == C.TRACK_TYPE_VIDEO } + + var selectedQuality: Format? = null + + if (videoTracks != null) { + for (i in 0 until videoTracks.mediaTrackGroup.length) { + if (videoTracks.mediaTrackGroup.getFormat(i).height == _player.targetTrackVideoHeight) { + selectedQuality = videoTracks.mediaTrackGroup.getFormat(i) + } + } + } + + if (selectedQuality != null) { + _overlay_quality_selector?.selectOption("video", selectedQuality) + } else { + _overlay_quality_selector?.selectOption("video", "auto") + } + } + val currentPlaybackRate = (if (_isCasting) StateCasting.instance.activeDevice?.speed else _player.getPlaybackRate()) ?: 1.0 _overlay_quality_selector?.groupItems?.firstOrNull { it is SlideUpMenuButtonList && it.id == "playback_rate" }?.let { (it as SlideUpMenuButtonList).setSelected(currentPlaybackRate.toString()) @@ -2081,17 +2103,15 @@ class VideoDetailView : ConstraintLayout { call = { handleSelectSubtitleTrack(it) }) }.toList().toTypedArray()) else null, - if(liveStreamVideoFormats?.isEmpty() == false) - SlideUpMenuGroup(this.context, context.getString(R.string.stream_video), "video", - *liveStreamVideoFormats - .map { - SlideUpMenuItem(this.context, - R.drawable.ic_movie, - it.label ?: it.containerMimeType ?: it.bitrate.toString(), - "${it.width}x${it.height}", - tag = it, - call = { _player.selectVideoTrack(it.height) }); - }.toList().toTypedArray()) + if (liveStreamVideoFormats?.isEmpty() == false) SlideUpMenuGroup( + this.context, context.getString(R.string.stream_video), "video", (listOf( + SlideUpMenuItem(this.context, R.drawable.ic_movie, "Auto", tag = "auto", call = { _player.selectVideoTrack(-1) }) + ) + (liveStreamVideoFormats.map { + SlideUpMenuItem(this.context, R.drawable.ic_movie, it.label + ?: it.containerMimeType + ?: it.bitrate.toString(), "${it.width}x${it.height}", tag = it, call = { _player.selectVideoTrack(it.height) }); + })) + ) else null, if(liveStreamAudioFormats?.isEmpty() == false) SlideUpMenuGroup(this.context, context.getString(R.string.stream_audio), "audio", diff --git a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt index 9ca559ca..fd30f685 100644 --- a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt +++ b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt @@ -110,8 +110,10 @@ abstract class FutoVideoPlayerBase : RelativeLayout { private var _didCallSourceChange = false; private var _lastState: Int = -1; - private var _targetTrackVideoHeight = -1; - private var _targetTrackAudioBitrate = -1; + + var targetTrackVideoHeight = -1 + private set + var _targetTrackAudioBitrate = -1 private var _toResume = false; @@ -278,7 +280,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout { //TODO: Temporary solution, Implement custom track selector without using constraints fun selectVideoTrack(height: Int) { - _targetTrackVideoHeight = height; + targetTrackVideoHeight = height; updateTrackSelector(); } fun selectAudioTrack(bitrate: Int) { @@ -288,10 +290,10 @@ abstract class FutoVideoPlayerBase : RelativeLayout { @OptIn(UnstableApi::class) private fun updateTrackSelector() { var builder = DefaultTrackSelector.Parameters.Builder(context); - if(_targetTrackVideoHeight > 0) { + if(targetTrackVideoHeight > 0) { builder = builder - .setMinVideoSize(0, _targetTrackVideoHeight - 10) - .setMaxVideoSize(9999, _targetTrackVideoHeight + 10); + .setMinVideoSize(0, targetTrackVideoHeight - 10) + .setMaxVideoSize(9999, targetTrackVideoHeight + 10); } if(_targetTrackAudioBitrate > 0) { -- GitLab From 978f76ffb6c5dac36ba7b8d674415fc904f2ed35 Mon Sep 17 00:00:00 2001 From: Kai <git@seaoflaurels.com> Date: Fri, 10 Jan 2025 14:38:54 -0600 Subject: [PATCH 2/2] Added current quality to auto item Changelog: added --- .../fragment/mainactivity/main/VideoDetailView.kt | 11 ++++++++++- .../views/overlays/slideup/SlideUpMenuGroup.kt | 9 +++++++++ .../views/overlays/slideup/SlideUpMenuItem.kt | 4 ++++ .../platformplayer/views/video/FutoVideoPlayerBase.kt | 2 +- 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 4224d7e0..2c38fd0d 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -171,7 +171,6 @@ import kotlinx.coroutines.withContext import userpackage.Protocol import java.time.OffsetDateTime import kotlin.math.abs -import kotlin.math.max import kotlin.math.roundToLong @UnstableApi @@ -1923,9 +1922,19 @@ class VideoDetailView : ConstraintLayout { } } + var videoMenuGroup: SlideUpMenuGroup? = null + for (view in _overlay_quality_selector!!.groupItems) { + if (view is SlideUpMenuGroup && view.groupTag == "video") { + videoMenuGroup = view + } + } + if (selectedQuality != null) { + videoMenuGroup?.getItem("auto")?.setSubText("") _overlay_quality_selector?.selectOption("video", selectedQuality) } else { + videoMenuGroup?.getItem("auto") + ?.setSubText("${_player.exoPlayer?.player?.videoFormat?.width}x${_player.exoPlayer?.player?.videoFormat?.height}") _overlay_quality_selector?.selectOption("video", "auto") } } diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuGroup.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuGroup.kt index 9f19018d..606c8746 100644 --- a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuGroup.kt +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuGroup.kt @@ -61,6 +61,15 @@ class SlideUpMenuGroup : LinearLayout { return didSelect; } + fun getItem(tag: Any?): SlideUpMenuItem? { + for(item in items) { + if(item.itemTag == tag){ + return item + } + } + return null + } + private fun addItems(items: List<SlideUpMenuItem>) { for (item in items) { item.setParentClickListener { parentClickListener?.invoke() } diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuItem.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuItem.kt index 8e5da990..29699ecd 100644 --- a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuItem.kt +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuItem.kt @@ -82,6 +82,10 @@ class SlideUpMenuItem : ConstraintLayout { return isSelected; } + fun setSubText(subText: String) { + _subtext.text = subText + } + fun setParentClickListener(listener: (()->Unit)?) { _parentClickListener = listener; } diff --git a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt index fd30f685..739da3c3 100644 --- a/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt +++ b/app/src/main/java/com/futo/platformplayer/views/video/FutoVideoPlayerBase.kt @@ -113,7 +113,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout { var targetTrackVideoHeight = -1 private set - var _targetTrackAudioBitrate = -1 + private var _targetTrackAudioBitrate = -1 private var _toResume = false; -- GitLab