Splitting this out of #66 (which kinda turned into the research log) to track the actual extractor implementation.
Docs (how SABR works end to end: protocol, UMP, attestation): https://priveetee.github.io/Docs-PipePipe/developer-guide/introduction
What's in it: the full SABR stack on the extractor side, gated behind a new DeliveryMethod.SABR so it only kicks in on SABR-only videos and stays out of the way otherwise:
- UMP reader + proto codec
VideoPlaybackAbrRequest builder + client profile
- session / state (request number, playback cookie, buffered ranges, player time)
- UMP response decoder (media headers, init metadata, next-request policy, stream protection status)
- format selection by what the device can actually decode in hardware
Status: runs end to end with the client on a real device (Pixel 8). Token, download and decode all work. Memory is bounded (no more OOM on long 4K), and the session survives transient backoff interrupts.
Known limit: sustained playback is currently gated by a client-side player issue (tracked separately on the client repo: InfinityLoop1308/PipePipeClient#42), not by the extractor or the protocol. The extractor side is player-agnostic, so it has no media3 dependency.
PoC PR: #68
Splitting this out of #66 (which kinda turned into the research log) to track the actual extractor implementation.
Docs (how SABR works end to end: protocol, UMP, attestation): https://priveetee.github.io/Docs-PipePipe/developer-guide/introduction
What's in it: the full SABR stack on the extractor side, gated behind a new
DeliveryMethod.SABRso it only kicks in on SABR-only videos and stays out of the way otherwise:VideoPlaybackAbrRequestbuilder + client profileStatus: runs end to end with the client on a real device (Pixel 8). Token, download and decode all work. Memory is bounded (no more OOM on long 4K), and the session survives transient backoff interrupts.
Known limit: sustained playback is currently gated by a client-side player issue (tracked separately on the client repo: InfinityLoop1308/PipePipeClient#42), not by the extractor or the protocol. The extractor side is player-agnostic, so it has no media3 dependency.
PoC PR: #68