forked from recloudstream/cloudstream
		
	more video cache settings
This commit is contained in:
		
							parent
							
								
									fb78871a94
								
							
						
					
					
						commit
						5b02a37fc1
					
				
					 10 changed files with 170 additions and 31 deletions
				
			
		|  | @ -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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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> | ||||
| 	 | ||||
|  |  | |||
|  | @ -186,7 +186,7 @@ | |||
| \n%s -> %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> | ||||
|  |  | |||
|  | @ -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> | ||||
| 
 | ||||
|  |  | |||
|  | @ -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> | ||||
|  |  | |||
|  | @ -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> | ||||
| 
 | ||||
|  |  | |||
|  | @ -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> | ||||
| 
 | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue