From dc5a7d02d0c8b3c3628191fe8e966696adaf18e3 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 1 Oct 2022 10:52:06 +0200 Subject: [PATCH] add loading interval size option --- .../libretube/constants/PreferenceKeys.kt | 1 + .../libretube/ui/fragments/PlayerFragment.kt | 27 +++++++++++++++---- app/src/main/res/values/array.xml | 18 +++++++++++++ app/src/main/res/values/strings.xml | 3 +++ app/src/main/res/xml/audio_video_settings.xml | 9 +++++++ 5 files changed, 53 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt index 38b41d2a0..0b34e4177 100644 --- a/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt +++ b/app/src/main/java/com/github/libretube/constants/PreferenceKeys.kt @@ -78,6 +78,7 @@ object PreferenceKeys { const val PLAYER_RESIZE_MODE = "player_resize_mode" const val SB_SKIP_MANUALLY = "sb_skip_manually_key" const val LIMIT_HLS = "limit_hls" + const val PROGRESSIVE_LOADING_INTERVAL_SIZE = "progressive_loading_interval" /** * Background mode diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt index f07e0f4f3..afc681468 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt @@ -167,6 +167,7 @@ class PlayerFragment : BaseFragment() { private var skipButtonsEnabled = false private var pipEnabled = true private var skipSegmentsManually = false + private var progressiveLoadingIntervalSize = "64" /** * for autoplay @@ -339,6 +340,11 @@ class PlayerFragment : BaseFragment() { PreferenceKeys.SB_SKIP_MANUALLY, false ) + + progressiveLoadingIntervalSize = PreferenceHelper.getString( + PreferenceKeys.PROGRESSIVE_LOADING_INTERVAL_SIZE, + "64" + ) } @SuppressLint("ClickableViewAccessibility") @@ -467,7 +473,7 @@ class PlayerFragment : BaseFragment() { videosNameArray[which] == "LBRY HLS" ) { // set the progressive media source - setProgressiveMediaSource(videosUrlArray[which]) + setHLSMediaSource(videosUrlArray[which]) } else { val videoUri = videosUrlArray[which] val audioUrl = @@ -1192,7 +1198,7 @@ class PlayerFragment : BaseFragment() { /** * Get the name of the currently played chapter - */ + */ private fun getCurrentChapterIndex(): Int { val currentPosition = exoPlayer.currentPosition var chapterIndex = 0 @@ -1211,24 +1217,35 @@ class PlayerFragment : BaseFragment() { videoUri: Uri, audioUrl: String ) { + val checkIntervalSize = when (progressiveLoadingIntervalSize) { + "default" -> ProgressiveMediaSource.DEFAULT_LOADING_CHECK_INTERVAL_BYTES + else -> progressiveLoadingIntervalSize.toInt() * 1024 + } + val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() + val videoItem: MediaItem = MediaItem.Builder() .setUri(videoUri) .setSubtitleConfigurations(subtitle) .build() + val videoSource: MediaSource = - DefaultMediaSourceFactory(dataSourceFactory) + ProgressiveMediaSource.Factory(dataSourceFactory) + .setContinueLoadingCheckIntervalBytes(checkIntervalSize) .createMediaSource(videoItem) + val audioSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) + .setContinueLoadingCheckIntervalBytes(checkIntervalSize) .createMediaSource(fromUri(audioUrl)) + val mergeSource: MediaSource = MergingMediaSource(videoSource, audioSource) exoPlayer.setMediaSource(mergeSource) } - private fun setProgressiveMediaSource(uri: Uri) { + private fun setHLSMediaSource(uri: Uri) { val mediaItem: MediaItem = MediaItem.Builder() .setUri(uri) .setSubtitleConfigurations(subtitle) @@ -1317,7 +1334,7 @@ class PlayerFragment : BaseFragment() { // if default resolution isn't set or available, use hls if available if (streams.hls != null) { - setProgressiveMediaSource(Uri.parse(streams.hls)) + setHLSMediaSource(Uri.parse(streams.hls)) return } diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml index 2a07214b9..573a16bd4 100644 --- a/app/src/main/res/values/array.xml +++ b/app/src/main/res/values/array.xml @@ -408,4 +408,22 @@ 512 + + 1KiB + 16KiB + 64KiB + 128KiB + 256KiB + @string/default_load_interval + + + + 1 + 16 + 64 + 128 + 256 + default + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ad0ac774b..195778668 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -334,6 +334,9 @@ Please select at least one item Trending seems to be unavailable for the current region. Please select another in the settings. Limit HLS to 1080p + Progressive load interval size + A lower value may speed up initial video loading. + Default Download Service diff --git a/app/src/main/res/xml/audio_video_settings.xml b/app/src/main/res/xml/audio_video_settings.xml index c93d0afed..5eaa895a0 100644 --- a/app/src/main/res/xml/audio_video_settings.xml +++ b/app/src/main/res/xml/audio_video_settings.xml @@ -72,6 +72,15 @@ android:title="@string/limit_hls" app:key="limit_hls" /> + +