[Enhancement]: Unify streaming and pre-downloading #1072

Open
opened 2026-04-24 23:47:51 +02:00 by adam · 2 comments
Owner

Originally created by @Keavon on GitHub (Nov 10, 2024).

Describe the Feature/Enhancement

Currently, the app has two separate concepts: pre-downloading and streaming. This arbitrary distinction leads to a confusing user experience. There are also major bugs/limitations in the current implementations of both concepts. This enhancement would solve all those problems by unifying the concepts in a manner more similar to, for example, Audible's app.

Why would this be helpful?

Pre-downloading has the following issues:

  • You have to wait for the full download to complete before beginning to listen.
  • If done over the internet, it can take a while.
  • You're forced to pick a specific file location on the phone file system as part of the setup process, which isn't relevant to most users if you're already only planning to listen in-app.
  • The playback state often gets out of sync with the server, meaning you can have listening progress that never gets synced with the server, and you can even complete a whole book and it doesn't ever inform the server about that fact.

Streaming has the following issue:

  • The current implementation performs very badly in real-world scenarios involving spotty internet connections, like when driving in mountainous areas with limited cellular coverage.
  • If it hasn't buffered far enough to stay ahead of the playback, it will pause (as expected). But then, when connection is restored, it often will not resume and it has to be manually restarted (hazardous when driving). And often, when restarted, it won't actually resume where it paused. Instead, it will resume several minutes or more earlier, sometimes at the position when the listening session started.
  • The app may choose to only buffer a certain duration ahead of the playback, when in reality I would like it to buffer as much of the book as it can handle up until the whole book is downloaded.
  • If I'm listening to part of the book and decide to go back a few seconds (either with the button or by scrubbing the timeline), it seems to always require an internet connection to re-buffer that time. This means that the data is purged from memory as soon as it's played, and I must be online to go back in time.

Both of these modes are deeply frustrating, and make the otherwise superb app feel borderline unusable.

The situation could be improved by replacing the concept of temporarily buffering to memory when streaming, and the concept of pre-downloading the MP3 files to a chosen folder in the file system, with a unified concept similar to the Audible app:

  • Just hit play. It starts downloading/buffering to the app's internal storage while playing and goes all the way until the full book is downloaded.
  • There's also still a button to download without beginning playback.
  • Anything that has been downloaded/buffered stays on-device until I'm done listening and tell it to delete the audiobook.
  • If playback reaches a point that hasn't been downloaded/buffered yet, a spinning animation shows over the pause/play button which becomes grayed out until a connection is restored.
  • If I jump ahead to a part of the book that hasn't been downloaded/buffered yet, it should reprioritize that portion of the book (plus the several preceding minutes) and finish downloading the rest of the book onwards from that point, before returning to the earlier parts that it hadn't reached yet, until the full book is acquired.

Future Implementation (Screenshot)

The UI would look essentially the same as today.

Audiobookshelf App Version

Android App - 0.9.77

Current Implementation (Screenshot)

No response

Originally created by @Keavon on GitHub (Nov 10, 2024). ### Describe the Feature/Enhancement Currently, the app has two separate concepts: pre-downloading and streaming. This arbitrary distinction leads to a confusing user experience. There are also major bugs/limitations in the current implementations of both concepts. This enhancement would solve all those problems by unifying the concepts in a manner more similar to, for example, Audible's app. ### Why would this be helpful? Pre-downloading has the following issues: - You have to wait for the full download to complete before beginning to listen. - If done over the internet, it can take a while. - You're forced to pick a specific file location on the phone file system as part of the setup process, which isn't relevant to most users if you're already only planning to listen in-app. - The playback state often gets out of sync with the server, meaning you can have listening progress that never gets synced with the server, and you can even complete a whole book and it doesn't ever inform the server about that fact. Streaming has the following issue: - The current implementation performs very badly in real-world scenarios involving spotty internet connections, like when driving in mountainous areas with limited cellular coverage. - If it hasn't buffered far enough to stay ahead of the playback, it will pause (as expected). But then, when connection is restored, it often will not resume and it has to be manually restarted (hazardous when driving). And often, when restarted, it won't actually resume where it paused. Instead, it will resume several minutes or more earlier, sometimes at the position when the listening session started. - The app may choose to only buffer a certain duration ahead of the playback, when in reality I would like it to buffer as much of the book as it can handle up until the whole book is downloaded. - If I'm listening to part of the book and decide to go back a few seconds (either with the button or by scrubbing the timeline), it seems to always require an internet connection to re-buffer that time. This means that the data is purged from memory as soon as it's played, and I must be online to go back in time. Both of these modes are deeply frustrating, and make the otherwise superb app feel borderline unusable. The situation could be improved by replacing the concept of temporarily buffering to memory when streaming, and the concept of pre-downloading the MP3 files to a chosen folder in the file system, with a unified concept similar to the Audible app: - Just hit play. It starts downloading/buffering to the app's internal storage while playing and goes all the way until the full book is downloaded. - There's also still a button to download without beginning playback. - Anything that has been downloaded/buffered stays on-device until I'm done listening and tell it to delete the audiobook. - If playback reaches a point that hasn't been downloaded/buffered yet, a spinning animation shows over the pause/play button which becomes grayed out until a connection is restored. - If I jump ahead to a part of the book that hasn't been downloaded/buffered yet, it should reprioritize that portion of the book (plus the several preceding minutes) and finish downloading the rest of the book onwards from that point, before returning to the earlier parts that it hadn't reached yet, until the full book is acquired. ### Future Implementation (Screenshot) The UI would look essentially the same as today. ### Audiobookshelf App Version Android App - 0.9.77 ### Current Implementation (Screenshot) _No response_
adam added the enhancementandroid labels 2026-04-24 23:47:51 +02:00
Author
Owner

@kanine commented on GitHub (Nov 23, 2024):

Agree with most of this sentiment but do think an auto delete of fully played media would be a good option. To make it customisable I think that should include a toggle to delete automatically and also a time frame (eg On Completion, or xx days after completion).

Also playlist functionality seems a little off at the moment.

In the absence of a play next queue it would be good to have some options to autoplay a next book.

Suggestions for configuration could be by Author, Series, Genre and fallback to a random selection.

@kanine commented on GitHub (Nov 23, 2024): Agree with most of this sentiment but do think an auto delete of fully played media would be a good option. To make it customisable I think that should include a toggle to delete automatically and also a time frame (eg On Completion, or xx days after completion). Also playlist functionality seems a little off at the moment. In the absence of a play next queue it would be good to have some options to autoplay a next book. Suggestions for configuration could be by Author, Series, Genre and fallback to a random selection.
Author
Owner

@politas commented on GitHub (Jan 19, 2025):

It shouldn't need to be said, but this should also be done for podcast episodes. At the very least, an option that means hitting play on a playlist entry when that book/episode has already been manually downloaded plays the local copy rather than starting to stream from the server.

@politas commented on GitHub (Jan 19, 2025): It shouldn't need to be said, but this should also be done for podcast episodes. At the very least, an option that means hitting play on a playlist entry when that book/episode has already been manually downloaded plays the local copy rather than starting to stream from the server.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf-app#1072