From ca86cb17681a5410cc8c88686404ac87ed4e0123 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 1 Oct 2022 10:21:16 +0200 Subject: [PATCH 1/2] =?UTF-8?q?code=20cleanup=C3=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libretube/ui/fragments/PlayerFragment.kt | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) 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 1a0434cd3..f07e0f4f3 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 @@ -466,12 +466,8 @@ class PlayerFragment : BaseFragment() { videosNameArray[which] == getString(R.string.hls) || videosNameArray[which] == "LBRY HLS" ) { - // no need to merge sources if using hls - val mediaItem: MediaItem = MediaItem.Builder() - .setUri(videosUrlArray[which]) - .setSubtitleConfigurations(subtitle) - .build() - exoPlayer.setMediaItem(mediaItem) + // set the progressive media source + setProgressiveMediaSource(videosUrlArray[which]) } else { val videoUri = videosUrlArray[which] val audioUrl = @@ -1194,7 +1190,9 @@ class PlayerFragment : BaseFragment() { } } - // get the name of the currently played chapter + /** + * Get the name of the currently played chapter + */ private fun getCurrentChapterIndex(): Int { val currentPosition = exoPlayer.currentPosition var chapterIndex = 0 @@ -1230,6 +1228,14 @@ class PlayerFragment : BaseFragment() { exoPlayer.setMediaSource(mergeSource) } + private fun setProgressiveMediaSource(uri: Uri) { + val mediaItem: MediaItem = MediaItem.Builder() + .setUri(uri) + .setSubtitleConfigurations(subtitle) + .build() + exoPlayer.setMediaItem(mediaItem) + } + private fun getAvailableResolutions(): Pair, Array> { if (!this::streams.isInitialized) return Pair(arrayOf(), arrayOf()) @@ -1311,11 +1317,7 @@ class PlayerFragment : BaseFragment() { // if default resolution isn't set or available, use hls if available if (streams.hls != null) { - val mediaItem: MediaItem = MediaItem.Builder() - .setUri(streams.hls) - .setSubtitleConfigurations(subtitle) - .build() - exoPlayer.setMediaItem(mediaItem) + setProgressiveMediaSource(Uri.parse(streams.hls)) return } From dc5a7d02d0c8b3c3628191fe8e966696adaf18e3 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sat, 1 Oct 2022 10:52:06 +0200 Subject: [PATCH 2/2] 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" /> + +