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
try {
context?.let {
context?.let { ctx ->
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) {
logError(e)

View file

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

View file

@ -209,21 +209,61 @@ class SettingsFragment : PreferenceFragmentCompat() {
setPreferencesFromResource(R.xml.settings, rootKey)
val settingsManager = PreferenceManager.getDefaultSharedPreferences(requireContext())
getPref(R.string.video_cache_key)?.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.video_cache_size_names)
val prefValues = resources.getIntArray(R.array.video_cache_size_values)
getPref(R.string.video_buffer_length_key)?.setOnPreferenceClickListener {
val prefNames = resources.getStringArray(R.array.video_buffer_length_names)
val prefValues = resources.getIntArray(R.array.video_buffer_length_values)
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(),
prefValues.indexOf(currentPrefSize),
getString(R.string.video_cache_settings),
getString(R.string.video_buffer_length_settings),
true,
{}) {
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()
}
return@setOnPreferenceClickListener true

View file

@ -232,7 +232,7 @@
<string name="dont_show_again">لا تظهر مرة أخرى</string>
<string name="update">تحديث</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_summary">مفيد لتجاوز كتل مزود خدمة الإنترنت</string>

View file

@ -186,7 +186,7 @@
\n%s -&gt; %s</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="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="legal_notice">Non-responsabilité</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="update">Aggiorna</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_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="update">Cập nhật</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="download_path_pref">Đường dẫn tải xuống</string>

View file

@ -56,20 +56,88 @@
<item>1</item>
<item>2</item>
</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>150MB</item>
<item>200MB</item>
<item>250MB</item>
<item>300MB</item>
<item>350MB</item>
<item>400MB</item>
<item>450MB</item>
<item>500MB</item>
</array>
<array name="video_cache_size_values">
<array name="video_buffer_size_values">
<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>150</item>
<item>200</item>
<item>250</item>
<item>300</item>
<item>350</item>
<item>400</item>
<item>450</item>
<item>500</item>
</array>

View file

@ -13,7 +13,9 @@
<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="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="use_system_brightness_key" translatable="false">use_system_brightness_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="update">Update</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_summary">Useful for bypassing ISP blocks</string>

View file

@ -20,10 +20,7 @@
android:key="@string/quality_pref_key"
android:title="@string/watch_quality_pref"
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
android:icon="@drawable/ic_baseline_picture_in_picture_alt_24"
app:key="@string/pip_enabled_key"
@ -66,6 +63,23 @@
android:title="@string/double_tap_to_pause_settings"
android:summary="@string/double_tap_to_pause_settings_des"
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
android:icon="@drawable/ic_baseline_brightness_7_24"