a6df2ff7f4
client: prefer iOS over Android in default order
...
Android-only path requires Google device attestation (po_token /
botguard signing). iOS path has neither attestation nor sig deobf
requirements, so it's the cleanest "just works" default. Keep
Android in the rotation only when botguard is wired.
2026-05-24 11:50:56 -07:00
765a90e808
client: skip player.js deobf for Android + prefer Android-first client order
...
YouTube's Android InnerTube path returns pre-signed stream URLs (no `s=`
cipher param, no `n=` throttling param) just like the iOS path. Mark
Android as deobf-exempt and put it first in the default player client
order so the typical playback path stops fetching player.js entirely.
Avoids the `could not extract sig fn name` failure on YouTube's newer
player.js shapes (eg. c2f7551f).
Desktop stays in the rotation behind botguard for completeness; it
will still try to deobf and may fail, but it's only consulted as a
fallback for botguard-signed sessions now.
2026-05-24 11:50:15 -07:00
ThetaDev
be6da5e7e3
feat: player: handle VPN ban and captcha required error messages
2025-04-23 21:21:23 +02:00
ThetaDev
187bf1c9a0
fix: switch client if no adaptive stream URLs were returned
2025-03-26 02:44:08 +01:00
ThetaDev
07db7b1166
fix: handle player returning no adaptive stream URLs
2025-03-24 01:28:07 +01:00
ThetaDev
4ce6746be5
fix: extract deobf data with global strings variable
2025-03-24 01:12:01 +01:00
ThetaDev
63a6f50a8b
fix: always skip failed clients
2025-03-16 16:51:43 +01:00
ThetaDev
8342caeb0f
fix: desktop client: generate PO token from user_syncid when authenticated
2025-03-16 01:56:29 +01:00
ThetaDev
c04b60604d
fix: simplify get_player_from_clients logic
2025-03-16 01:24:54 +01:00
ThetaDev
3a2370b97c
feat: add timezone query option
2025-02-07 04:13:43 +01:00
ThetaDev
8e35358c89
feat: log failed player fetch attempts with player_from_clients
2025-02-06 14:04:01 +01:00
ThetaDev
a0d850f8e0
fix: output full request body in reports, clean up get_player_po_token
2025-02-06 03:56:11 +01:00
ThetaDev
b72b501b6d
feat: add session po token cache
2025-02-06 00:48:37 +01:00
ThetaDev
29c854b20d
fix: allow player data to be fetched without botguard
2025-02-05 15:56:15 +01:00
ThetaDev
b90a252a5e
feat: add support for rustypipe-botguard to get PO tokens
2025-02-05 15:56:14 +01:00
ThetaDev
2b891ca078
fix: a/v streams incorrectly recognized as video-only
2025-01-22 01:59:01 +01:00
ThetaDev
9c512c3c4d
fix: player_from_clients method not send/sync
2025-01-16 04:23:02 +01:00
ThetaDev
0432477451
docs: update README
2025-01-16 03:45:12 +01:00
ThetaDev
d5abee2753
feat: add DRM and audio channel number filtering to StreamFilter
2025-01-16 00:47:49 +01:00
ThetaDev
2af4001c75
feat: extract player DRM data
2025-01-13 03:22:37 +01:00
ThetaDev
2b2b4af0b2
fix: only use auth-enabled clients for fetching player with auth option enabled
2025-01-13 03:22:37 +01:00
ThetaDev
14e399594f
feat: add functions to fetch a user's history and subscriptions
2025-01-05 05:50:58 +01:00
ThetaDev
5ce84c44a6
fix: error 400 when fetching player with login
2024-12-20 03:06:03 +01:00
ThetaDev
1b60c97a18
fix: update client versions, enable Opus audio with iOS client
2024-12-18 19:44:42 +01:00
ThetaDev
a846b729e3
fix: disable Android client
2024-11-25 15:48:04 +01:00
ThetaDev
0919cbd0df
fix: fetch unlocalized player data to interpret errors correctly; regression introduced with v0.6.0
2024-11-09 03:08:00 +01:00
ThetaDev
1cc3f9ad74
feat: add OAuth user login to access age-restricted videos
2024-10-23 23:02:32 +02:00
ThetaDev
7c4f44d09c
feat!: generate random visitorData, remove RustyPipeQuery::get_context and YTContext<'a> from public API
2024-10-23 01:51:16 +02:00
ThetaDev
9e835c8f38
feat!: remove TvHtml5Embed client as it got disabled
2024-10-23 01:42:02 +02:00
ThetaDev
b589061a40
fix: fetch artist albums continuation
2024-10-22 23:56:59 +02:00
ThetaDev
71d3ec65dd
feat: add mobile client
2024-10-13 05:16:06 +02:00
ThetaDev
d0ae7961ba
fix: player_from_clients: fall back to TvHtml5Embed client
2024-08-17 00:21:47 +02:00
ThetaDev
da39c64f30
fix: detect ip-ban error message
2024-08-10 16:26:43 +02:00
ThetaDev
97904d7737
feat: change default player client order
2024-08-10 03:03:15 +02:00
ThetaDev
9da3b25be2
fix: set tracing instrumentation level to Error
2024-08-10 00:06:56 +02:00
ThetaDev
e608811e5f
feat!: add TV client
2024-07-30 01:55:24 +02:00
ThetaDev
72b5dfec69
feat: add player_from_clients function to specify client order
2024-07-29 18:03:31 +02:00
ThetaDev
8152ce6b08
fix: improve deobfuscator (support multiple nsig name matches, error if mapping all streams fails)
...
Since YouTube keeps changing the nsig function signature and a generic regex may match at multiple places, I changed the extraction logic to search for multiple matches if necessary and test the extracted deobfuscation functions.
I also found out that if the deobfuscation fails for all streams, fetching the player still returns a successful result with no streams, suggesting that the video is not available. So I changed the mapper to throw an ExtractionError if no streams are mapped successfully.
2024-07-29 14:45:52 +02:00
ThetaDev
90540c6aaa
feat: add client_type to VideoPlayer, simplify MapResponse trait
...
The MapResponse trait needed too many arguments, so I added the MapRespCtx object.
Also added the client_type to the context, so it can be added to the extracted player data.
This is necessary to be able to download videos with the correct user agent
2024-07-27 02:30:24 +02:00
ThetaDev
dd0565ba98
fix!: extracting nsig function, remove field throttled from Video/Audio stream model
2024-07-15 20:41:20 +02:00
ThetaDev
94e8d24c68
refactor!: rename VideoItem/VideoPlayerDetails.length to duration for consistency
2024-06-16 22:42:11 +02:00
ThetaDev
401d4e8255
feat: add UnavailabilityReason: IpBan
2024-06-16 22:24:59 +02:00
ThetaDev
45b9f2a627
chore: fix clippy lints
2024-05-02 19:39:48 +02:00
ThetaDev
a8fb337fae
fix: remove Innertube API keys, update android player params
2024-04-16 15:18:29 +02:00
ThetaDev
1a22dc835a
fix: handle age restricted channels
...
refactor! rename ExtractionError::VideoUnavailable to ExtractionError::Unavailable
2023-11-05 22:43:04 +01:00
ThetaDev
b25e9ebbb7
fix: send visitor data for YTM playlists
2023-09-28 01:00:00 +02:00
ThetaDev
1d1dcd622f
feat: add tracing
2023-09-22 03:22:38 +02:00
ThetaDev
ac25490435
chore: fix clippy lints
2023-08-30 22:05:18 +02:00
ThetaDev
9d385e8e9b
fix: player from android client
2023-07-30 17:00:47 +02:00
ThetaDev
32b4800b46
fix!: remove possible panic from client builder
...
fix: simplify integer divisions
2023-05-31 12:14:11 +02:00