Skip to content

Commit

Permalink
Add preference to delay start of video (jellyfin#4025)
Browse files Browse the repository at this point in the history
* Add setting to adjust video player start delay

* Update PlaybackController to skip video start delay if set to zero.
Update default for video start delay.
Update video start delay string.

* Update mVideoManager null check for delayed start logic.

* Final changes

---------

Co-authored-by: Niels van Velzen <[email protected]>
  • Loading branch information
2 people authored and jumoog committed Oct 4, 2024
1 parent 39ad527 commit 4cb50fe
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,11 @@ class UserPreferences(context: Context) : SharedPreferenceStore(
* Whether items shown in the screensaver are required to have an age rating set.
*/
var screensaverAgeRatingRequired = booleanPreference("screensaver_agerating_required", true)

/**
* Delay when starting video playback after loading the video player.
*/
var videoStartDelay = longPreference("video_start_delay", 0)
}

init {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -624,11 +624,20 @@ private void startItem(BaseItemDto item, long position, StreamInfo response) {
mFragment.onStartItem(item);
}

//wait a beat before attempting to start so the player surface is fully initialized and video is ready
mHandler.postDelayed(() -> {
if (mVideoManager != null)
mVideoManager.start();
}, 750);
// Set video start delay
long videoStartDelay = userPreferences.getValue().get(UserPreferences.Companion.getVideoStartDelay());
if (videoStartDelay > 0) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (mVideoManager != null) {
mVideoManager.start();
}
}
}, videoStartDelay);
} else {
mVideoManager.start();
}

dataRefreshService.getValue().setLastPlayedItem(item);
reportingHelper.getValue().reportStart(item, mbPos);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.constant.getQualityProfiles
import org.jellyfin.androidtv.preference.UserPreferences
import org.jellyfin.androidtv.preference.constant.RefreshRateSwitchingBehavior
import org.jellyfin.androidtv.ui.preference.custom.DurationSeekBarPreference
import org.jellyfin.androidtv.ui.preference.dsl.OptionsFragment
import org.jellyfin.androidtv.ui.preference.dsl.checkbox
import org.jellyfin.androidtv.ui.preference.dsl.enum
import org.jellyfin.androidtv.ui.preference.dsl.list
import org.jellyfin.androidtv.ui.preference.dsl.optionsScreen
import org.jellyfin.androidtv.ui.preference.dsl.seekbar
import org.jellyfin.androidtv.util.TimeUtils
import org.koin.android.ext.android.inject

Expand Down Expand Up @@ -60,6 +62,22 @@ class PlaybackAdvancedPreferencesScreen : OptionsFragment() {
bind(userPreferences, UserPreferences.refreshRateSwitchingBehavior)
}

@Suppress("MagicNumber")
seekbar {
setTitle(R.string.video_start_delay)
min = 0
max = 5_000
increment = 250
valueFormatter = object : DurationSeekBarPreference.ValueFormatter() {
override fun display(value: Int): String = "${value.toDouble() / 1000}s"
}
bind {
get { userPreferences[UserPreferences.videoStartDelay].toInt() }
set { value -> userPreferences[UserPreferences.videoStartDelay] = value.toLong() }
default { UserPreferences.videoStartDelay.defaultValue.toInt() }
}
}

checkbox{
setTitle(R.string.pref_external_player)
bind(userPreferences, UserPreferences.useExternalPlayer)
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@
<string name="past_24_hours">Past 24 hours</string>
<string name="prefer_exoplayer_ffmpeg">Prefer FFmpeg for audio playback</string>
<string name="prefer_exoplayer_ffmpeg_content">Use FFmpeg to decode audio, even if platform codecs are available.</string>
<string name="video_start_delay">Video start delay</string>
<plurals name="seconds">
<item quantity="one">%1$s second</item>
<item quantity="other">%1$s seconds</item>
Expand Down

0 comments on commit 4cb50fe

Please sign in to comment.