Skip to content

SABR client playback integration (PoC) #42

@Priveetee

Description

@Priveetee

Client side of the SABR work, paired with the extractor integration issue (InfinityLoop1308/PipePipeExtractor#67).

Docs (how SABR works end to end): https://priveetee.github.io/Docs-PipePipe/developer-guide/introduction

What's in it: a custom ExoPlayer source where a single pump thread drives the SABR session and fills a shared buffer, while the audio and video readers just read from it (so neither track starves the other on a network round-trip). The PO token is minted in a headless WebView (BotGuard), shared and pre-warmed, cached per videoId (~6h).

Status: plays end to end on a Pixel 8 (GrapheneOS / Vanadium WebView). The token flips SABR protection back to playable, hardware VP9/H264, no OOM, no overheating.

Known limit (the honest one): sustained playback stalls. Traced it on-device: the extractor downloads + decodes fine (token, segments, H264 1080p decoder all good), but ExoPlayer stops pulling the video track after the first segment while audio races ahead. So it's an asymmetric track stall in the client player wiring (MergingMediaSource / LoadControl), not the SABR protocol, protection, or decoding. That's the next chunk of work, probably cleaner to do on media3.

This is a PoC / reference PR, not merge-ready yet (seek + quality selection + that stall still need proper wiring).

PR: #43

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions