Netflix changes, add delay for subs

This commit is contained in:
chu23465 2025-04-29 12:35:39 +05:30
parent fca2266d33
commit 46fb3e7adf
6 changed files with 96 additions and 5 deletions

View File

@ -505,6 +505,8 @@ def result(ctx, service, quality, closest_resolution, range_, wanted, alang, sla
if service: if service:
save_cookies(service_name, service, ctx.obj.profile) save_cookies(service_name, service, ctx.obj.profile)
if isinstance(track, TextTrack):
time.sleep(5) # Sleep 5 seconds before downloading each subtitle track to avoid 403 errors
track.download(directories.temp, headers=service.session.headers, proxy=proxy) track.download(directories.temp, headers=service.session.headers, proxy=proxy)
log.info(" + Downloaded") log.info(" + Downloaded")
if isinstance(track, VideoTrack) and track.needs_ccextractor_first and not no_subs: if isinstance(track, VideoTrack) and track.needs_ccextractor_first and not no_subs:

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -18,7 +18,6 @@ from vinetrimmer.utils.MSL import MSL
from vinetrimmer.utils.MSL.schemes import KeyExchangeSchemes, EntityAuthenticationSchemes from vinetrimmer.utils.MSL.schemes import KeyExchangeSchemes, EntityAuthenticationSchemes
from vinetrimmer.utils.MSL.schemes.UserAuthentication import UserAuthentication from vinetrimmer.utils.MSL.schemes.UserAuthentication import UserAuthentication
from vinetrimmer.utils.gen_esn import chrome_esn_generator, android_esn_generator, playready_esn_generator from vinetrimmer.utils.gen_esn import chrome_esn_generator, android_esn_generator, playready_esn_generator
from vinetrimmer.utils.widevine.device import LocalDevice, RemoteDevice
from vinetrimmer.vendor.pymp4.parser import Box from vinetrimmer.vendor.pymp4.parser import Box
from vinetrimmer.utils.gen_esn import chrome_esn_generator from vinetrimmer.utils.gen_esn import chrome_esn_generator
@ -185,7 +184,7 @@ class Netflix(BaseService):
is_android_l3 = False is_android_l3 = False
try: try:
if hasattr(self.cdm, 'device') and hasattr(self.cdm.device, 'security_level') and hasattr(self.cdm.device, 'type'): if hasattr(self.cdm, 'device') and hasattr(self.cdm.device, 'security_level') and hasattr(self.cdm.device, 'type'):
is_android_l3 = (self.cdm.device.security_level == 3 and self.cdm.device.type == LocalDevice.Types.ANDROID) is_android_l3 = (self.cdm.device.security_level == 3 and self.cdm.device.type == DeviceTypes.ANDROID)
except AttributeError: except AttributeError:
pass pass

View File

@ -26,7 +26,6 @@ from vinetrimmer.utils.MSL.schemes import KeyExchangeSchemes
from vinetrimmer.utils.MSL.schemes.EntityAuthentication import EntityAuthentication from vinetrimmer.utils.MSL.schemes.EntityAuthentication import EntityAuthentication
from vinetrimmer.utils.MSL.schemes.PlayReadyKeyExchangeScheme import PlayReady as PlayReadyScheme from vinetrimmer.utils.MSL.schemes.PlayReadyKeyExchangeScheme import PlayReady as PlayReadyScheme
from vinetrimmer.utils.MSL.schemes.KeyExchangeRequest import KeyExchangeRequest from vinetrimmer.utils.MSL.schemes.KeyExchangeRequest import KeyExchangeRequest
from vinetrimmer.utils.widevine.device import RemoteDevice
from vinetrimmer.utils.gen_esn import chrome_esn_generator, android_esn_generator, playready_esn_generator from vinetrimmer.utils.gen_esn import chrome_esn_generator, android_esn_generator, playready_esn_generator
from requests.adapters import HTTPAdapter from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager from requests.packages.urllib3.poolmanager import PoolManager
@ -194,6 +193,7 @@ class MSL:
key_data = key_response_data["keydata"] key_data = key_response_data["keydata"]
if scheme == KeyExchangeSchemes.Widevine: if scheme == KeyExchangeSchemes.Widevine:
from vinetrimmer.utils.widevine.device import RemoteDevice
if isinstance(cdm.device, RemoteDevice): if isinstance(cdm.device, RemoteDevice):
msl_keys.encryption, msl_keys.sign = cdm.device.exchange( msl_keys.encryption, msl_keys.sign = cdm.device.exchange(
cdm.sessions[msl_keys.cdm_session], cdm.sessions[msl_keys.cdm_session],

View File

@ -52,4 +52,94 @@ def edge_esn_generator():
with open(esn_file, 'r') as f: with open(esn_file, 'r') as f:
esn = f.read() esn = f.read()
return esn return esn
def playready_esn_generator():
# Lista di modelli di TV e dispositivi PlayReady
tv_models = [
"HE55A7000EUWTS", # Hisense
"KD55X85J", # Sony
"UN55TU7000", # Samsung
"OLED55C1", # LG
"55PUS7805", # Philips
"55R635", # TCL
"L55M5-Z2", # Xiaomi
]
# Lista di produttori
manufacturers = [
"HISENSE",
"SONY",
"SAMSUNG",
"LG",
"PHILIPS",
"TCL",
"XIAOMI"
]
# Scegli un produttore e un modello casualmente
manufacturer = random.choice(manufacturers)
model = random.choice(tv_models)
esn_file = '.esn_playready'
def gen_file():
# Crea un ESN nel formato NFANDROID1-PRN-[MANUFACTURER]-[MODEL]
esn = f"NFANDROID1-PRN-{manufacturer}-{model}"
with open(esn_file, 'w') as file:
file.write(esn)
if not os.path.isfile(esn_file):
log.warning("Generating a new PlayReady ESN")
gen_file()
file_datetime = datetime.fromtimestamp(os.path.getmtime(esn_file))
time_diff = datetime.now() - file_datetime
if time_diff > timedelta(hours=6):
log.warning("Old ESN detected, Generating a new PlayReady ESN")
gen_file()
with open(esn_file, 'r') as f:
esn = f.read()
return esn
def android_esn_generator():
# Parametri per dispositivi Android
manufacturers = ["SAMSUNG", "ONEPLUS", "XIAOMI", "MOTOROLA", "GOOGLE", "NVIDIA"]
models = [
"SM-T865", "SM-G975F", "SM-N975F", # Samsung
"IN2020", "KB2000", "LE2100", # OnePlus
"M2007J3SG", "M2004J19C", "M2102J20SG", # Xiaomi
"Pixel 5", "Pixel 6 Pro", "Pixel 7", # Google
"SHIELD Android TV", "SHIELD Pro" # NVIDIA
]
# Genera una stringa casuale alfanumerica per l'ID del dispositivo
device_id = "".join(random.choice("0123456789ABCDEF") for _ in range(16))
esn_file = '.esn_android'
def gen_file():
manufacturer = random.choice(manufacturers)
model = random.choice(models)
# Formato ESN per Android: NFANDROID1-PRV-[build info]-[device ID]-[model]
esn = f"NFANDROID1-PRV-{manufacturer[:4]}{random.randint(1000,9999)}-{device_id}-{model}"
with open(esn_file, 'w') as file:
file.write(esn)
if not os.path.isfile(esn_file):
log.warning("Generating a new Android ESN")
gen_file()
file_datetime = datetime.fromtimestamp(os.path.getmtime(esn_file))
time_diff = datetime.now() - file_datetime
if time_diff > timedelta(hours=6):
log.warning("Old ESN detected, Generating a new Android ESN")
gen_file()
with open(esn_file, 'r') as f:
esn = f.read()
return esn