SmartSync - preload engine for Up Next (and expanded buffering control)

This piggybacks off of the youtube-style buffering, but I have done my best to go into much more detail about usage and function as well as proposing an entirely new feature: SmartSync.

I’d like a clear set of controls in the settings panel on the player app (Shield TV 2015 for me) that allows me to set the “buffer ahead” value to anything from 30 seconds to infinite (buffer all). This is talked about in another thread here

Couple that with a setting to “pre-buffer Up Next” which would use extra bandwidth when the player is not active, or after the currently playing video has fully buffered to download/buffer the next X number of episodes from the Up Next list. Perhaps give me a setting that lets me control “preload 3 episodes for the top 4 shows.” Also, add it as an option when you select a video (episode, movie) in the …/more menu to “preload this content.” The UI for the player could then easily display these movies/show tiles in the “Continue Watching” section, perhaps with a thin border around the tile, or a corner badge to show that it has been preloaded.

Of course, if you are setting pre-load options you should also include “buffer quality” as a control there. Maybe you want to call it SmartSync instead of preload or pre-buffer.

My proposed additions to the Settings inside the Player app

Settings/SmartSync

  • Quality = [original, 4k60, 4k30, 1080p60, 1080p30, 720p60, 720p30]
    what quality to preload
  • Episodes = [0,1,2,3…All]
    how many episodes to preload for a show
  • Show Count = [0,1,2,3…All]
    how many TV Shows from the Up Next row to preload
  • Disk Usage = [n/a, 500GB, 400GB, 200GB, 50GB…off]
    how much disk space should be used to preload content, if space limit is reached, do not preload any more content. User requested preload will trump a SmartSync auto-preload and data in the SS cache will be replaced
  • Movies = [0,2,4,6]
    how many movies to preload. half of this amount should be from the most recently added movies, the other half could be some smart algorithm, or from unfinished movies
  • Expiry = [1week, 3week, 2month, none]
    how long does a video stay in the SS cache before automatically expiring and being removed from the cache. If the SS brain decides the same content should stick around after expiry, that’s fine, but it should be refreshed from the source, to check for higher quality, or if that content no longer meets the SS criteria

Settings/Buffer

  • Quality = [original, 4k60, 4k30, 1080p60, 1080p30, 720p60, 720p30]
    what quality to buffer during playback, this is probably just the same as whatever other play-quality setting is used
  • Read-Ahead = [auto, 30s, 60s, 5m, 15m, 30m, 60m, full]
    length of future time to load into the buffer ranging from the current ‘auto’ to a ‘full’ buffer of the entire video
  • Block Screen = [on, off, stickaround]
    on: Allow paused video to block the screen until the buffer is full before triggering the menu-return timeout
    off: use standard menu-return timeout
    stickaround: Allow paused video to block and do not clear the buffer cache when menu-return timeout triggers – the buffer is expecting the user to come back and begin playback after the buffer is full

I would like to suggest a much simplified implementation of this. Simply pre-load the next episode when watching tv series. Especially now that we have skip intro, one has to wait twice as much, once to wait for the next episode to buffer before it plays, and again to wait after skip into is pressed, again for it to buffer. Just pre-load the next episode a bit so this does not happen.

It’s also a part of managing resources, When content is pre-loaded one can use a more limited connection to get a better result. Can watch at a higher quality etc. Or can have more people using the same server at the same time. That’s because although there is more bandwidth being used, it’s used at a lower priority. eg. if my content is already pre-loaded ahead a bit, then when jonny stars watching his video, I have slack in my connection that can be taken up before its noticed on my end.

So in contrast with the original suggestion, I would like suggest something similar, but instead of lots of settings and a feature name, it happen invisibly behind the scenes to “just deliver” content in a smarter way to avoid a download/upload choke for remote resources. This would probably only need to be implemented for remote streams.

1 Like