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
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