more video cache settings

This commit is contained in:
LagradOst 2022-03-16 22:31:21 +01:00
parent fb78871a94
commit 5b02a37fc1
10 changed files with 170 additions and 31 deletions

View file

@ -339,14 +339,21 @@ abstract class AbstractPlayerFragment(
SubtitlesFragment.applyStyleEvent += ::onSubStyleChanged SubtitlesFragment.applyStyleEvent += ::onSubStyleChanged
try { try {
context?.let { context?.let { ctx ->
val settingsManager = PreferenceManager.getDefaultSharedPreferences( val settingsManager = PreferenceManager.getDefaultSharedPreferences(
it ctx
) )
val currentPrefSize =
settingsManager.getInt(getString(R.string.video_cache_key), 300)
player.cacheSize = currentPrefSize * 1024L * 1024L val currentPrefCacheSize =
settingsManager.getInt(getString(R.string.video_buffer_size_key), 0)
val currentPrefDiskSize =
settingsManager.getInt(getString(R.string.video_buffer_disk_key), 0)
val currentPrefBufferSec =
settingsManager.getInt(getString(R.string.video_buffer_length_key), 0)
player.cacheSize = currentPrefCacheSize * 1024L * 1024L
player.simpleCacheSize = currentPrefDiskSize * 1024L * 1024L
player.videoBufferMs = currentPrefBufferSec * 1000L
} }
} catch (e: Exception) { } catch (e: Exception) {
logError(e) logError(e)

View file

@ -39,8 +39,9 @@ const val TAG = "CS3ExoPlayer"
class CS3IPlayer : IPlayer { class CS3IPlayer : IPlayer {
private var isPlaying = false private var isPlaying = false
private var exoPlayer: ExoPlayer? = null private var exoPlayer: ExoPlayer? = null
var cacheSize = 300L * 1024L * 1024L // 300 mb var cacheSize = 0L
private val simpleCacheSize : Long get() = cacheSize / 2 // idk chosen at random kinda var simpleCacheSize = 0L
var videoBufferMs = 0L
private val seekActionTime = 30000L private val seekActionTime = 30000L
@ -423,6 +424,7 @@ class CS3IPlayer : IPlayer {
playBackSpeed: Float, playBackSpeed: Float,
subtitleOffset: Long, subtitleOffset: Long,
cacheSize: Long, cacheSize: Long,
videoBufferMs: Long,
playWhenReady: Boolean = true, playWhenReady: Boolean = true,
cacheFactory: CacheDataSource.Factory? = null, cacheFactory: CacheDataSource.Factory? = null,
trackSelector: TrackSelector? = null, trackSelector: TrackSelector? = null,
@ -460,10 +462,11 @@ class CS3IPlayer : IPlayer {
) )
.setBufferDurationsMs( .setBufferDurationsMs(
DefaultLoadControl.DEFAULT_MIN_BUFFER_MS, DefaultLoadControl.DEFAULT_MIN_BUFFER_MS,
maxOf( if(videoBufferMs <= 0) {
DefaultLoadControl.DEFAULT_MAX_BUFFER_MS, DefaultLoadControl.DEFAULT_MAX_BUFFER_MS
((cacheSize * 75L) / 32768L).toInt() } else {
), // 500mb = 20min videoBufferMs.toInt()
},
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS, DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS
).build() ).build()
@ -574,6 +577,7 @@ class CS3IPlayer : IPlayer {
playbackPosition, playbackPosition,
playBackSpeed, playBackSpeed,
cacheSize = cacheSize, cacheSize = cacheSize,
videoBufferMs = videoBufferMs,
playWhenReady = isPlaying, // this keep the current state of the player playWhenReady = isPlaying, // this keep the current state of the player
cacheFactory = cacheFactory, cacheFactory = cacheFactory,
subtitleOffset = currentSubtitleOffset subtitleOffset = currentSubtitleOffset

View file

@ -209,21 +209,61 @@ class SettingsFragment : PreferenceFragmentCompat() {
setPreferencesFromResource(R.xml.settings, rootKey) setPreferencesFromResource(R.xml.settings, rootKey)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext()) val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext())
getPref(R.string.video_cache_key)?.setOnPreferenceClickListener { getPref(R.string.video_buffer_length_key)?.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.video_cache_size_names) val prefNames = resources.getStringArray(R.array.video_buffer_length_names)
val prefValues = resources.getIntArray(R.array.video_cache_size_values) val prefValues = resources.getIntArray(R.array.video_buffer_length_values)
val currentPrefSize = val currentPrefSize =
settingsManager.getInt(getString(R.string.video_cache_key), 300) settingsManager.getInt(getString(R.string.video_buffer_length_key), 0)
activity?.showBottomDialog( activity?.showDialog(
prefNames.toList(), prefNames.toList(),
prefValues.indexOf(currentPrefSize), prefValues.indexOf(currentPrefSize),
getString(R.string.video_cache_settings), getString(R.string.video_buffer_length_settings),
true, true,
{}) { {}) {
settingsManager.edit() settingsManager.edit()
.putInt(getString(R.string.video_cache_key), prefValues[it]) .putInt(getString(R.string.video_buffer_length_key), prefValues[it])
.apply()
}
return@setOnPreferenceClickListener true
}
getPref(R.string.video_buffer_size_key)?.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.video_buffer_size_names)
val prefValues = resources.getIntArray(R.array.video_buffer_size_values)
val currentPrefSize =
settingsManager.getInt(getString(R.string.video_buffer_size_key), 0)
activity?.showDialog(
prefNames.toList(),
prefValues.indexOf(currentPrefSize),
getString(R.string.video_buffer_size_settings),
true,
{}) {
settingsManager.edit()
.putInt(getString(R.string.video_buffer_size_key), prefValues[it])
.apply()
}
return@setOnPreferenceClickListener true
}
getPref(R.string.video_buffer_disk_key)?.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.video_buffer_size_names)
val prefValues = resources.getIntArray(R.array.video_buffer_size_values)
val currentPrefSize =
settingsManager.getInt(getString(R.string.video_buffer_disk_key), 0)
activity?.showDialog(
prefNames.toList(),
prefValues.indexOf(currentPrefSize),
getString(R.string.video_buffer_disk_settings),
true,
{}) {
settingsManager.edit()
.putInt(getString(R.string.video_buffer_disk_key), prefValues[it])
.apply() .apply()
} }
return@setOnPreferenceClickListener true return@setOnPreferenceClickListener true

View file

@ -232,7 +232,7 @@
<string name="dont_show_again">لا تظهر مرة أخرى</string> <string name="dont_show_again">لا تظهر مرة أخرى</string>
<string name="update">تحديث</string> <string name="update">تحديث</string>
<string name="watch_quality_pref">جودة المشاهدة المفضلة</string> <string name="watch_quality_pref">جودة المشاهدة المفضلة</string>
<string name="video_cache_settings">حجم ذاكرة التخزين المؤقت للفيديو</string> <string name="video_buffer_size_settings">حجم ذاكرة التخزين المؤقت للفيديو</string>
<string name="dns_pref">DNS فوق HTTPS</string> <string name="dns_pref">DNS فوق HTTPS</string>
<string name="dns_pref_summary">مفيد لتجاوز كتل مزود خدمة الإنترنت</string> <string name="dns_pref_summary">مفيد لتجاوز كتل مزود خدمة الإنترنت</string>

View file

@ -186,7 +186,7 @@
\n%s -&gt; %s</string> \n%s -&gt; %s</string>
<string name="filler" formatted="true">Épisode spécial</string> <string name="filler" formatted="true">Épisode spécial</string>
<string name="watch_quality_pref">Qualité de visionnage préférée</string> <string name="watch_quality_pref">Qualité de visionnage préférée</string>
<string name="video_cache_settings">Taille de la mémoire cache</string> <string name="video_buffer_size_settings">Taille de la mémoire cache</string>
<string name="resize_fill">Étendre</string> <string name="resize_fill">Étendre</string>
<string name="legal_notice">Non-responsabilité</string> <string name="legal_notice">Non-responsabilité</string>
<string name="primary_color_settings">Couleur principale</string> <string name="primary_color_settings">Couleur principale</string>

View file

@ -269,7 +269,7 @@
<string name="dont_show_again">Non mostrare di nuovo</string> <string name="dont_show_again">Non mostrare di nuovo</string>
<string name="update">Aggiorna</string> <string name="update">Aggiorna</string>
<string name="watch_quality_pref">Risoluzione preferita</string> <string name="watch_quality_pref">Risoluzione preferita</string>
<string name="video_cache_settings">Dimensione cache video</string> <string name="video_buffer_size_settings">Dimensione cache video</string>
<string name="dns_pref">DNS over HTTPS</string> <string name="dns_pref">DNS over HTTPS</string>
<string name="dns_pref_summary">Utile per bypassare i blocchi ISP</string> <string name="dns_pref_summary">Utile per bypassare i blocchi ISP</string>

View file

@ -232,7 +232,7 @@
<string name="dont_show_again">Không hiển thị lại</string> <string name="dont_show_again">Không hiển thị lại</string>
<string name="update">Cập nhật</string> <string name="update">Cập nhật</string>
<string name="watch_quality_pref">Tự động chọn chất lượng phim</string> <string name="watch_quality_pref">Tự động chọn chất lượng phim</string>
<string name="video_cache_settings">Kích thước video cache</string> <string name="video_buffer_size_settings">Kích thước video cache</string>
<string name="dns_pref_summary">Rất hữu ích để bỏ chặn ISP</string> <string name="dns_pref_summary">Rất hữu ích để bỏ chặn ISP</string>
<string name="download_path_pref">Đường dẫn tải xuống</string> <string name="download_path_pref">Đường dẫn tải xuống</string>

View file

@ -56,20 +56,88 @@
<item>1</item> <item>1</item>
<item>2</item> <item>2</item>
</array> </array>
<array name="video_cache_size_names">
<item>@string/none</item> <array name="video_buffer_length_names">
<item>@string/automatic</item>
<item>1min</item>
<item>1min 30s</item>
<item>2min</item>
<item>2min 30s</item>
<item>3min</item>
<item>3min 30s</item>
<item>4min</item>
<item>5min</item>
<item>6min</item>
<item>7min</item>
<item>8min</item>
<item>9min</item>
<item>10min</item>
<item>15min</item>
<item>20min</item>
<item>30min</item>
</array>
<array name="video_buffer_length_values">
<item>0</item>
<item>60</item>
<item>90</item>
<item>120</item>
<item>150</item>
<item>180</item>
<item>210</item>
<item>240</item>
<item>300</item>
<item>360</item>
<item>420</item>
<item>480</item>
<item>540</item>
<item>600</item>
<item>900</item>
<item>1200</item>
<item>1800</item>
</array>
<array name="video_buffer_size_names">
<item>@string/automatic</item>
<item>10MB</item>
<item>20MB</item>
<item>30MB</item>
<item>40MB</item>
<item>50MB</item>
<item>60MB</item>
<item>70MB</item>
<item>80MB</item>
<item>90MB</item>
<item>100MB</item> <item>100MB</item>
<item>150MB</item>
<item>200MB</item> <item>200MB</item>
<item>250MB</item>
<item>300MB</item> <item>300MB</item>
<item>350MB</item>
<item>400MB</item> <item>400MB</item>
<item>450MB</item>
<item>500MB</item> <item>500MB</item>
</array> </array>
<array name="video_cache_size_values">
<array name="video_buffer_size_values">
<item>0</item> <item>0</item>
<item>10</item>
<item>20</item>
<item>30</item>
<item>40</item>
<item>50</item>
<item>60</item>
<item>70</item>
<item>80</item>
<item>90</item>
<item>100</item> <item>100</item>
<item>150</item>
<item>200</item> <item>200</item>
<item>250</item>
<item>300</item> <item>300</item>
<item>350</item>
<item>400</item> <item>400</item>
<item>450</item>
<item>500</item> <item>500</item>
</array> </array>

View file

@ -13,7 +13,9 @@
<string name="subtitle_settings_key" translatable="false">subtitle_settings_key</string> <string name="subtitle_settings_key" translatable="false">subtitle_settings_key</string>
<string name="subtitle_settings_chromecast_key" translatable="false">subtitle_settings_chromecast_key</string> <string name="subtitle_settings_chromecast_key" translatable="false">subtitle_settings_chromecast_key</string>
<string name="quality_pref_key" translatable="false">quality_pref_key</string> <string name="quality_pref_key" translatable="false">quality_pref_key</string>
<string name="video_cache_key" translatable="false">video_cache_key</string> <string name="video_buffer_size_key" translatable="false">video_buffer_size_key</string>
<string name="video_buffer_length_key" translatable="false">video_buffer_length_key</string>
<string name="video_buffer_disk_key" translatable="false">video_buffer_disk_key</string>
<string name="prerelease_commit_hash" translatable="false">unknown_prerelease</string> <string name="prerelease_commit_hash" translatable="false">unknown_prerelease</string>
<string name="use_system_brightness_key" translatable="false">use_system_brightness_key</string> <string name="use_system_brightness_key" translatable="false">use_system_brightness_key</string>
<string name="swipe_enabled_key" translatable="false">swipe_enabled_key</string> <string name="swipe_enabled_key" translatable="false">swipe_enabled_key</string>
@ -319,7 +321,11 @@
<string name="dont_show_again">Don\'t show again</string> <string name="dont_show_again">Don\'t show again</string>
<string name="update">Update</string> <string name="update">Update</string>
<string name="watch_quality_pref">Preferred watch quality</string> <string name="watch_quality_pref">Preferred watch quality</string>
<string name="video_cache_settings">Video cache size</string> <string name="video_buffer_size_settings">Video buffer size</string>
<string name="video_buffer_length_settings">Video buffer length</string>
<string name="video_buffer_disk_settings">Video cache on disk</string>
<string name="video_buffer_description">May cause problems on systems with low ram or storage such as Android TV devices or old phones if you set it too high</string>
<string name="dns_pref">DNS over HTTPS</string> <string name="dns_pref">DNS over HTTPS</string>
<string name="dns_pref_summary">Useful for bypassing ISP blocks</string> <string name="dns_pref_summary">Useful for bypassing ISP blocks</string>

View file

@ -20,10 +20,7 @@
android:key="@string/quality_pref_key" android:key="@string/quality_pref_key"
android:title="@string/watch_quality_pref" android:title="@string/watch_quality_pref"
android:icon="@drawable/ic_baseline_hd_24" /> android:icon="@drawable/ic_baseline_hd_24" />
<Preference
android:key="@string/video_cache_key"
android:title="@string/video_cache_settings"
android:icon="@drawable/ic_baseline_storage_24" />
<SwitchPreference <SwitchPreference
android:icon="@drawable/ic_baseline_picture_in_picture_alt_24" android:icon="@drawable/ic_baseline_picture_in_picture_alt_24"
app:key="@string/pip_enabled_key" app:key="@string/pip_enabled_key"
@ -66,6 +63,23 @@
android:title="@string/double_tap_to_pause_settings" android:title="@string/double_tap_to_pause_settings"
android:summary="@string/double_tap_to_pause_settings_des" android:summary="@string/double_tap_to_pause_settings_des"
app:defaultValue="false" /> app:defaultValue="false" />
<Preference
android:key="@string/video_buffer_disk_key"
android:title="@string/video_buffer_disk_settings"
android:summary="@string/video_buffer_description"
android:icon="@drawable/ic_baseline_storage_24" />
<Preference
android:key="@string/video_buffer_size_key"
android:title="@string/video_buffer_size_settings"
android:summary="@string/video_buffer_description"
android:icon="@drawable/ic_baseline_storage_24" />
<Preference
android:key="@string/video_buffer_length_key"
android:title="@string/video_buffer_length_settings"
android:summary="@string/video_buffer_description"
android:icon="@drawable/ic_baseline_storage_24" />
<!-- <!--
<SwitchPreference <SwitchPreference
android:icon="@drawable/ic_baseline_brightness_7_24" android:icon="@drawable/ic_baseline_brightness_7_24"