Add fix if HLS and DASH url is missing in VIDO

This commit is contained in:
FairTrade 2025-12-03 16:45:57 +01:00
parent 08d937c1c1
commit 4f27e67d51

View File

@ -21,7 +21,7 @@ from datetime import datetime, timezone
class VIDO(Service): class VIDO(Service):
""" """
Vidio.com service, Series and Movies, login required. Vidio.com service, Series and Movies, login required.
Version: 2.2.0 Version: 2.3.0
Supports URLs like: Supports URLs like:
https://www.vidio.com/premier/2978/giligilis (Series) https://www.vidio.com/premier/2978/giligilis (Series)
@ -355,22 +355,29 @@ class VIDO(Service):
widevine_data = custom_data.get("widevine") if isinstance(custom_data, dict) else None widevine_data = custom_data.get("widevine") if isinstance(custom_data, dict) else None
license_url = license_servers.get("drm_license_url") if isinstance(license_servers, dict) else None license_url = license_servers.get("drm_license_url") if isinstance(license_servers, dict) else None
# Get stream URLs # Get stream URLs, check all possible HLS and DASH fields
# HLS URLs (prefer in this order)
hls_url = (
stream.get("stream_hls_url") or
stream.get("stream_token_hls_url") or
stream.get("stream_token_url") # This is also HLS (m3u8)
)
# DASH URLs
dash_url = stream.get("stream_dash_url") or stream.get("stream_token_dash_url") dash_url = stream.get("stream_dash_url") or stream.get("stream_token_dash_url")
hls_url = stream.get("stream_hls_url") or stream.get("stream_token_hls_url")
has_drm = widevine_data and license_url and dash_url and isinstance(widevine_data, str) has_drm = widevine_data and license_url and dash_url and isinstance(widevine_data, str)
if has_drm: if has_drm:
# DRM content: use DASH # DRM content: must use DASH
self.log.info("Widevine DRM detected, using DASH") self.log.info("Widevine DRM detected, using DASH")
self.custom_data = widevine_data self.custom_data = widevine_data
self.license_url = license_url self.license_url = license_url
tracks = DASH.from_url(dash_url, session=self.session).to_tracks(language=title.language) tracks = DASH.from_url(dash_url, session=self.session).to_tracks(language=title.language)
elif hls_url: elif hls_url:
# Non-DRM: use HLS for video/audio # Non-DRM: prefer HLS (H.264, proper frame_rate metadata)
self.log.info("No DRM detected, using HLS for video/audio") self.log.info("No DRM detected, using HLS")
self.custom_data = None self.custom_data = None
self.license_url = None self.license_url = None
tracks = HLS.from_url(hls_url, session=self.session).to_tracks(language=title.language) tracks = HLS.from_url(hls_url, session=self.session).to_tracks(language=title.language)
@ -380,7 +387,7 @@ class VIDO(Service):
self.log.debug("Clearing HLS subtitles (incompatible format)") self.log.debug("Clearing HLS subtitles (incompatible format)")
tracks.subtitles.clear() tracks.subtitles.clear()
# Get subtitles from DASH manifest (plain VTT) # Get subtitles from DASH manifest (plain VTT) if available
if dash_url: if dash_url:
self.log.debug("Extracting subtitles from DASH manifest") self.log.debug("Extracting subtitles from DASH manifest")
manual_subs = self._extract_subtitles_from_mpd(dash_url) manual_subs = self._extract_subtitles_from_mpd(dash_url)
@ -390,8 +397,8 @@ class VIDO(Service):
self.log.info(f"Added {len(manual_subs)} subtitle tracks from DASH") self.log.info(f"Added {len(manual_subs)} subtitle tracks from DASH")
elif dash_url: elif dash_url:
# Fallback to DASH # Fallback to DASH only if no HLS available
self.log.warning("No HLS available, using DASH (VP9 codec)") self.log.warning("No HLS available, using DASH (VP9 codec - may have issues)")
self.custom_data = None self.custom_data = None
self.license_url = None self.license_url = None
tracks = DASH.from_url(dash_url, session=self.session).to_tracks(language=title.language) tracks = DASH.from_url(dash_url, session=self.session).to_tracks(language=title.language)
@ -442,3 +449,4 @@ class VIDO(Service):
raise Exception(f"License request failed ({response.status_code}): {error_summary}") raise Exception(f"License request failed ({response.status_code}): {error_summary}")
return response.content return response.content