Lbry-desktop: Automatically play free or already purchased content

Created on 19 Sep 2017  路  12Comments  路  Source: lbryio/lbry-desktop

The Issue

Steps to reproduce

  1. Open a claim video / music ( maybe images and gifs too ).
  2. Click on play / open.
  3. Wait for the content...

Expected behaviour

There should be an option in settings to toggle this feature:
I open a claim and then the video starts playing no need to wait or click to play,
same for images or gifs and music.
( content already downloaded / purchased, obviously ) ^^

Also if I left before a video ends, it should trigger autoplay but:

The video should pick up where it left off (e.g. starting at 03:55, instead of at 00:00

Actual behaviour

Nothing, there isn't an autoplay feature :stuck_out_tongue:

Anything Else

I think this is also needed in other issues ,
so I'm connecting: https://github.com/lbryio/lbry-app/issues/491 https://github.com/lbryio/lbry-app/issues/579

ux help wanted 2 improvement

All 12 comments

What do we want to happen if the video costs money? Prompt the user automatically for purchase? Don't do anything?

I know there's also a recent change to allow content under a certain LBC/USD to skip the purchase confirmation screen... Also need to decide if those should autoplay, but my guess is no.

This is my initial idea:

( content already downloaded / purchased, obviously ) ^^

What do we want to happen if the video costs money?

I guess this sounds right to me: Prompt the user automatically for purchase

I know there's also a recent change to allow content under a certain LBC/USD to skip the purchase confirmation screen

One solution could be to force the popup just in this case ( autoplay: on ),
but seems confusing, this needs more thinking ( UX ) ^

@tzarebczan I need it internally so right now the safe / simple way is only for downloaded content

I don't think we need an option or settings for this. People expect content to play.

I'd propose that as a first step, content that is free or already purchased automatically play when rendered by FilePage.

Additionally, if we make this change, I'd like to modify the video loading component to give more of a visual indicator of the content (since you won't see the poster if you simply changed it to autoplay).

I don't think we need an option or settings for this. People expect content to play.

Ok, but disagree with this ( it could be really annoying for some users ), so what if:

  • I click the wrong claim could be nsfw or have annoying music.
  • Volume is at a high level ( 75% - 100% ).
  • I just want to read the description.

I'd propose that as a first step, content that is free or already purchased automatically play when rendered by FilePage.

I think the user should have control of this,
we could set autoplay default to true, but add an option to toggle it ^^

Allow autoplay disable

Allow the user to disable autoplay in a menu or settings screen.

https://developers.google.com/cast/downloads/GoogleCastAutoplayUXGuidelines.pdf

modify the video loading component to give more of a visual indicator of the content

I don't get this one, care to explain ?
Not sure what else is to show besides the video playing...

I'm fine with an option to disable, but autoplay should be the default behavior. And I'd be fine releasing this without an option.

Regarding the loading component, I'd like the loading display for a video to give more feedback about the content itself, especially if autoplay is added. Currently the loading message is white text on a black background. If content autoplays, it will go immediately to this screen, with no display of the poster (the image for the video).

I think we want to probably still display the poster when content is loading if we add autoplay functionality. Additionally, we should make it possible to cancel/pause a video while it is still loading (pretty sure you can't do this).

Discussed @daovist's PR for this issue recently and these are the scenarios he mentioned:
free, not downloaded: play
free, downloaded: play
costs, downloaded: play
costs, not downloaded: do nothing, let them click for purchase modal

Can we first clear up these questions/comments?
1) We only want to autoplay image and video content types, correct?
2) Do we really want the default setting to be on? Autoplay is intrusive on other apps I've used. Maybe we auto play the first time around and then alert the user to the setting? btzr has some good examples when autoplay is not wanted in his comment above. The other concern here is disk space - with each download you get the content + blobs (so 2x the file size) which can add up pretty quickly if just browsing videos in the app without intending to play them.
3) We need the better indication that content is starting to download while leaving the thumbnail on the screen, correct? Then we'd probably want to start playing after a few MB (what's the threshold?) are written to the file for content that supports streaming (i.e. is web optimized), but for content that isn't we'd want to keep the thumbnail up until fully downloaded (normally this would be the "waiting for metadata" state). Also, each blob is 2MB - I've run into issues where larger files has less data in each blob, so the player would start, but then stop because it played quicker than it could get the blobs.
4) While 3) notifies the user the download started, allow user to click cancel by calling the file_delete API - https://lbryio.github.io/lbry/cli/#file_delete (tested - working as expected). The claim page would need to be "refreshed" to reflect that the file stopped (right now it just shows the percentage at which it stopped).

In terms of content that costs money, even if its less than the Purchase Confirmations threshold, I think autoplay should be disabled and not alert the user to purchase the content upon entering the file page.

Here is a rough plan for implementing this feature @liamcardenas

This was if (autoplay) play(uri); in my first PR for this issue but when we factor in downloaded files, cost paid/unpaid, starting downloads before playing, waiting until enough data has been downloaded to start playing, etc. this is much more complex.

1) Get all the selector data (and constants) together for a FilePage component method to be called by DidMount and ReceiveProps. This includes the autoplay setting, fileType, cost, nsfw, isPlaying, downloadProgress, paid, startPlayingThreshold, etc.

2) Get all the actions together in said method, including play, startDownload, and something like setBufferingInfo to be displayed in step #4.

3) Write the component method to check conditions (to be determined in this thread). When a condition is met it calls the proper actions (and possibly returns). With #1 and #2 setup, this method will be simple to adjust based on decisions made here, so I can move forward before this is fully ironed out.

4) Make FilePage and its child components to display information about the download situation to the user along with buttons for pauseDownload and maybe disable Autoplay.

I think there are enough reasonable concerns in this thread that we should just default to autoplay off. Thank you for your thoughtfulness @btzr-io @daovist @tzarebczan

I do support other changes to make it more obvious to the users that this feature exists (e.g. a notification that asks whether they want to turn it on the first time they play a video), as well as giving users more feedback that autoplay can use a lot of disk space.

But let's not get this blocked from shipping over scope creep. Safest thing to do is to just add the feature but have the setting start off.

And it does seem like disk space management should be climbing up the daemon todo, but it's not going to trump performance concerns.

Was this page helpful?
0 / 5 - 0 ratings