Skip to content

Phase 2: streaming audio, speed, skips and auto-advance - #7

Merged
madeofpendletonwool merged 3 commits into
mainfrom
feat/audio-streaming
Oct 17, 2026
Merged

madeofpendletonwool merged 3 commits into
mainfrom
feat/audio-streaming

Conversation

@madeofpendletonwool

Copy link
Copy Markdown
Owner

Episodes now stream with range requests instead of downloading first, with pitch-preserving speed, server-detected ad/silence skipping, intro/outro skip, reconnects after network drops, and the next queued episode playing when one ends.

Speed and intro/outro skip from get_play_episode_details, detected silence and ad
ranges from episode_skip_segments, the per-podcast trim-silence setting, and the
/stream URL for server-side copies. Episode audio gets its own HTTP client with no
overall timeout and no compression.
Episodes now stream: a range reader downloads into a temp file and restarts at the
seek point when a read needs bytes far from the download, so playback starts in a
second or two and a seek anywhere costs one request. Servers that ignore ranges
(including PinePods' own /stream today) fall back to a sequential download.

Decoding moves to a per-track thread that keeps about a second of audio queued, so
the device callback never waits on the network. That thread also applies
pitch-preserving speed (Signalsmith Stretch) and jumps over server-detected ads and
silence, and over each podcast's intro and outro.

The controller picks the playback URL by the mobile app's rule, applies the
podcast's speed and intro skip from the start, reopens dropped audio where the
listener was, and plays the next queued episode when one ends.
[ and ] change speed, = resets it, and t toggles the podcast's trim-silence setting.
The player and micro-player show the speed, buffering and reconnect states, how many
ads and silences will be skipped, and a short note after each jump.
@madeofpendletonwool
madeofpendletonwool merged commit 4916bc1 into main Oct 17, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant