diff --git a/yt_dlp/extractor/youtube/_base.py b/yt_dlp/extractor/youtube/_base.py index ac11f9ad2c..2cb8d5087b 100644 --- a/yt_dlp/extractor/youtube/_base.py +++ b/yt_dlp/extractor/youtube/_base.py @@ -77,6 +77,12 @@ class SubsPoTokenPolicy(BasePoTokenPolicy): not_required_for_premium=True, not_required_with_player_token=False, ), + StreamingProtocol.SABR: GvsPoTokenPolicy( + required=True, + recommended=True, + not_required_for_premium=True, + not_required_with_player_token=False, + ), StreamingProtocol.DASH: GvsPoTokenPolicy( required=True, recommended=True, @@ -147,6 +153,12 @@ class SubsPoTokenPolicy(BasePoTokenPolicy): not_required_for_premium=True, not_required_with_player_token=False, ), + StreamingProtocol.SABR: GvsPoTokenPolicy( + required=True, + recommended=True, + not_required_for_premium=True, + not_required_with_player_token=False, + ), StreamingProtocol.DASH: GvsPoTokenPolicy( required=True, recommended=True, @@ -176,6 +188,12 @@ class SubsPoTokenPolicy(BasePoTokenPolicy): not_required_for_premium=True, not_required_with_player_token=False, ), + StreamingProtocol.SABR: GvsPoTokenPolicy( + required=True, + recommended=True, + not_required_for_premium=True, + not_required_with_player_token=False, + ), StreamingProtocol.DASH: GvsPoTokenPolicy( required=True, recommended=True, @@ -209,6 +227,11 @@ class SubsPoTokenPolicy(BasePoTokenPolicy): recommended=True, not_required_with_player_token=True, ), + StreamingProtocol.SABR: GvsPoTokenPolicy( + required=True, + recommended=True, + not_required_with_player_token=True, + ), StreamingProtocol.DASH: GvsPoTokenPolicy( required=True, recommended=True, @@ -260,6 +283,11 @@ class SubsPoTokenPolicy(BasePoTokenPolicy): recommended=True, not_required_with_player_token=True, ), + StreamingProtocol.SABR: GvsPoTokenPolicy( + required=True, + recommended=True, + not_required_with_player_token=True, + ), # HLS Livestreams require POT 30 seconds in # TODO: Rolling out StreamingProtocol.HLS: GvsPoTokenPolicy( @@ -290,6 +318,12 @@ class SubsPoTokenPolicy(BasePoTokenPolicy): not_required_for_premium=True, not_required_with_player_token=False, ), + StreamingProtocol.SABR: GvsPoTokenPolicy( + required=True, + recommended=True, + not_required_for_premium=True, + not_required_with_player_token=False, + ), StreamingProtocol.DASH: GvsPoTokenPolicy( required=True, recommended=True, diff --git a/yt_dlp/extractor/youtube/_video.py b/yt_dlp/extractor/youtube/_video.py index 071223ea29..9b96c23116 100644 --- a/yt_dlp/extractor/youtube/_video.py +++ b/yt_dlp/extractor/youtube/_video.py @@ -3626,6 +3626,9 @@ def process_https_formats(): po_token = ( gvs_pots.get(client_name) or fetch_po_token_func(required=require_po_token or pot_policy.recommended)) + if po_token: + if client_name not in gvs_pots: + gvs_pots[client_name] = po_token fmt = process_format_stream(fmt_stream, proto, missing_pot=require_po_token and not po_token) if not fmt: @@ -3662,8 +3665,6 @@ def process_https_formats(): if po_token: fmt_url = update_url_query(fmt_url, {'pot': po_token}) - if client_name not in gvs_pots: - gvs_pots[client_name] = po_token fmt['url'] = fmt_url