From e3e2f9b1dc449433aed382c9855a09aa47e3aa23 Mon Sep 17 00:00:00 2001 From: girst Date: Tue, 15 Aug 2023 09:30:58 +0000 Subject: [PATCH] surface n-sig throttling to ui on watch?show=raw, this is treated as a fatal error. --- app/common/common.py | 9 +++++++-- app/youtube/__init__.py | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/common/common.py b/app/common/common.py index f268577..4a3e775 100644 --- a/app/common/common.py +++ b/app/common/common.py @@ -297,7 +297,7 @@ def get_video_info(video_id, *, metaOnly=False, _agegate_bypass=False): _, _, metadata_embed, error_embed, errormsg_embed = get_video_info(video_id, _agegate_bypass=True) if error_embed == "player": # agegate bypass failed? return None, None, metadata, 'agegated', player_error - elif not error_embed or error_embed in ('livestream','geolocked','scrambled'): + elif not error_embed or error_embed in ('livestream','geolocked','scrambled', 'throttled'): metadata = metadata_embed else: return None, None, metadata, error_embed, errormsg_embed @@ -324,17 +324,22 @@ def get_video_info(video_id, *, metaOnly=False, _agegate_bypass=False): try: url = sorted(formats, key=lambda k: k['height'], reverse=True)[0]['url'] + query = parse_qs(urlparse(url).query) # ip-locked videos can be recovered if the proxy module is loaded: - is_geolocked = 'gcr' in parse_qs(urlparse(url).query) + is_geolocked = 'gcr' in query + # "n-signature" requires javascript descrambling (not implemented): + is_throttled = 'ns' in query except: url = None is_geolocked = False + is_throttled = False is_drm = formats and 'signatureCipher' in formats[0] nonfatal = 'livestream' if is_live \ else 'geolocked' if is_geolocked \ else 'scrambled' if is_drm \ + else 'throttled' if is_throttled \ else None return url, stream_map, metadata, nonfatal, None diff --git a/app/youtube/__init__.py b/app/youtube/__init__.py index 4b99dcd..d0f5db9 100644 --- a/app/youtube/__init__.py +++ b/app/youtube/__init__.py @@ -112,6 +112,7 @@ def watch(): 'malformed': "Video ID is invalid.", 'geolocked': f"This video is geolocked. {proxy_msg}", 'livestream': f"Livestreams disabled. {proxy_msg}", + 'throttled': "Stream is severely throttled.", 'agegated': "Unable to bypass age-restriction.", 'scrambled': "VEVO style cyphering not supported.", 'no-url': "No muxed stream available.", -- 2.39.3