mirror of
https://github.com/devine-dl/devine.git
synced 2025-04-29 17:49:44 +00:00
Validate track languages in HLS.to_tracks
This commit is contained in:
parent
86635f9b7f
commit
7cec16d8ab
@ -16,7 +16,7 @@ from urllib.parse import urljoin
|
|||||||
|
|
||||||
import m3u8
|
import m3u8
|
||||||
import requests
|
import requests
|
||||||
from langcodes import Language
|
from langcodes import Language, tag_is_valid
|
||||||
from m3u8 import M3U8
|
from m3u8 import M3U8
|
||||||
from pywidevine.cdm import Cdm as WidevineCdm
|
from pywidevine.cdm import Cdm as WidevineCdm
|
||||||
from pywidevine.pssh import PSSH
|
from pywidevine.pssh import PSSH
|
||||||
@ -148,12 +148,26 @@ class HLS:
|
|||||||
track_type = Subtitle
|
track_type = Subtitle
|
||||||
codec = Subtitle.Codec.WebVTT # assuming WebVTT, codec info isn't shown
|
codec = Subtitle.Codec.WebVTT # assuming WebVTT, codec info isn't shown
|
||||||
|
|
||||||
|
track_lang = next((
|
||||||
|
Language.get(option)
|
||||||
|
for x in (media.language, language)
|
||||||
|
for option in [(str(x) or "").strip()]
|
||||||
|
if tag_is_valid(option) and not option.startswith("und")
|
||||||
|
), None)
|
||||||
|
if not track_lang:
|
||||||
|
msg = "Language information could not be derived for a media."
|
||||||
|
if language is None:
|
||||||
|
msg += " No fallback language was provided when calling HLS.to_tracks()."
|
||||||
|
elif not tag_is_valid((str(language) or "").strip()) or str(language).startswith("und"):
|
||||||
|
msg += f" The fallback language provided is also invalid: {language}"
|
||||||
|
raise ValueError(msg)
|
||||||
|
|
||||||
tracks.add(track_type(
|
tracks.add(track_type(
|
||||||
id_=md5(str(media).encode()).hexdigest()[0:6], # 6 chars only for filename length
|
id_=md5(str(media).encode()).hexdigest()[0:6], # 6 chars only for filename length
|
||||||
url=urljoin(media.base_uri, media.uri),
|
url=urljoin(media.base_uri, media.uri),
|
||||||
codec=codec,
|
codec=codec,
|
||||||
language=media.language or language, # HLS media may not have language info, fallback if needed
|
language=track_lang, # HLS media may not have language info, fallback if needed
|
||||||
is_original_lang=language and is_close_match(media.language, [language]),
|
is_original_lang=language and is_close_match(track_lang, [language]),
|
||||||
descriptor=Audio.Descriptor.M3U,
|
descriptor=Audio.Descriptor.M3U,
|
||||||
drm=session_drm if media.type == "AUDIO" else None,
|
drm=session_drm if media.type == "AUDIO" else None,
|
||||||
extra=media,
|
extra=media,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user