jellyfin / jellyfin-androidtv

Android TV Client for Jellyfin
https://jellyfin.org
GNU General Public License v2.0
2.78k stars 475 forks source link

Left/Right on Chromecast voice remote directional pad pauses playback (Android TV) #1391

Open RobAnt opened 2 years ago

RobAnt commented 2 years ago

Describe the feature you'd like

Running the current version 0.12.3 on Google Chromecast with Android TV. Using the Left/Right on the remote's directional pad skips backward/forward as expected but also pauses playback. The OK (middle) button must be pressed to unpause and resume playing. The expected behaviour (like other apps on Android TV) would be to skip backward/forward and resume regular playing after the skip.

mueslimak3r commented 2 years ago

Which other apps have this feature? I don't have many other apps on my android tv. Youtube doesn't, and it behaves like this app.

I tested adding this feature in a branch on my fork.

I do like how it allows for skipping forward/back quickly, and how it allows for 1:1 button press - skip (without this the first button press opens the overlay).

imo this could create a UX issue for people who want to hunt around for the exact timestamp they're looking for. For those people, they would have to press "up" to open the overlay, and then they can scrobble without it automatically seeking. This is why I didn't open a PR.

If more people give their opinions about this, and the consensus is positive, the code is ready.

For anyone who wants to try it: https://github.com/mueslimak3r/jellyfin-androidtv/tree/dpad-skipping-when-overlay-hidden

DavidFair commented 2 years ago

I'm going to ask a dangerous question... @mueslimak3r Could we have this configurable? Since I could see different options such as:

then letting a user select their favourite

mueslimak3r commented 2 years ago

I'm going to ask a dangerous question... @mueslimak3r Could we have this configurable? Since I could see different options such as:

  • Press engages a fast forward mode (like VHS) until "play" is pressed
  • Each press skips forwards a proportion and continues playing (allowing you to scrub through commercials quickly)
  • Each press skips forward a proportion and pauses

then letting a user select their favourite

I like those ideas. I thought about it a bit and an implementation might look like: Click and hold (or rapidly click), and while subsequent clicks are within a given window, apply a multiplier to the scrub amount.

The multiplier could be x1.25 every 5 seconds with a cap of 5x or something like that.

This would also allow for the base scrub interval to be way lower - maybe 5 seconds instead of 30. So being able to do more granular adjustment would be a nice byproduct.

The d-pad LR to skip would probably be disabled by default but have a setting to toggle it.

DavidFair commented 2 years ago

The multiplier could be x1.25 every 5 seconds with a cap of 5x or something like that.

The playback speed controls can be reused for this to in effect fast-forward (we'd want to disable sound) for this purpose

This would also allow for the base scrub interval to be way lower - maybe 5 seconds instead of 30. So being able to do more granular adjustment would be a nice byproduct.

The DVR I currently have skips forwards in 20s intervals, then skips back in 5 seconds. This asymmetry allows you to get through say advertisements rapidly then go backwards to fine-tune if you've missed something.

The d-pad LR to skip would probably be disabled by default but have a setting to toggle it.

👍

mueslimak3r commented 2 years ago

The multiplier could be x1.25 every 5 seconds with a cap of 5x or something like that.

The playback speed controls can be reused for this to in effect fast-forward (we'd want to disable sound) for this purpose

imo seeking should never be done by playing the video faster. There are plenty of reasons why that will slow down or break playback (network and decoding constraints are good examples). Instead, the position the player will seek to is calculated, and the seek is performed once.

An example of this is the rework of the skip handler I did recently:

1325

This asymmetry allows you to get through say advertisements rapidly then go backwards to fine-tune if you've missed something.

Yeah that sounds like a good way to do it

RobAnt commented 2 years ago

The DVR I currently have skips forwards in 20s intervals, then skips back in 5 seconds. This asymmetry allows you to get through say advertisements rapidly then go backwards to fine-tune if you've missed something.

That is the behaviour I also prefer in all the apps I use on my Chromecast for watching video. I can't recall right now which app but it is 30s forward or 7s back each click.

TtuxX commented 1 year ago

Hi there! :)

I'm also having the pause issue, on a Shield TV.

The behavior of pausing the playback when going backward or forward on a video that is currently playing is quite disturbing to me and is not like most media players we use (YouTube, SmartTubeNext, Cloudstream or most of the web video players we use on any platform for example).

Whenever I want to quickly go to a specific time inside Jellyfin, I always expect playback to continue once it's done and not pause, as otherwise I would have paused the video before changing the time line.

Would it be possible to change this default behavior or add an option? :)

glat commented 1 year ago

+1