Embed Player
Current problems
- Whenever a user clicks the play button the file is handled by an External program
Goals & use cases
- Users need to listen to episodes without having to switch applications
- Integrated Queue/Playlist
- MPRIS Integration
- Streaming capabilities
- Keep track of the playback position of episodes
- Smart Play/Pause. If playback is resumed it should rewind a small interval.
- Smart marking of episodes as played/listened. Ex if an episode is listen 85-90% or less than 30-60-XXseconds are remaining.
- Rewind and fast-forward
- Non-audio types should still be proxied to an external player
Requirements
- Gstreamer knowledge
- Database restructure for the queue and playback position
- TBD preferences
Relevant art
Gnome Music
The player in Music is a separate toolbar/actionbar widget at the bottom of the window. It's hidden at startup and only shown when an audio Stream is queue. After that it can't be hidden again.
Lollypop
In lollypop the player is integrated as part of the headerbar.
Vocal
Vocal also implements the player as part of the headerbar.
Proposal & plan
@bertob 's notes:
the desktop, we can just have all the controls in the action bar, and open the episode detail page when you click the artwork or something, could be a separate button on the right, but it's really not that important
@bertob 's notes:
however, on mobile we'll need a separate "now playing screen with a proper slider, so there you'd have a button in the headerbar (the one with the text lines) that sends you to the episode details page with show notes and stuff and a button to go directly to the queue in the bottom right.
Also, I think it makes sense to move the queue into the headerbar stack switcher, since it's one of the main "areas" of the app, though I guess that makes it harder to access in some cases on the desktop, so not sure.
Also, the relationship between podcast detail screen and "now playing" screen is kinda murky
Priority is the embedded player which will mark the 0.4.0
release series.
MPRIS support can be added later and does not need to land with the player.
Streaming and the Episode Queue are the lowest priorities. Implementing streaming might be easy given how powerfull gstreamer is. The Queue is going to be challenging though from both a design and an Implementation POV.