PLUTO -> v1.0.1
Set DASH to be prioritized over HLS to get potential 1080p video. Add --hls flag to force HLS.
This commit is contained in:
parent
7563dcd236
commit
7dad7eea39
@ -23,12 +23,12 @@ class PLUTO(Service):
|
|||||||
Credit to @wks_uwu for providing an alternative API, making the codebase much cleaner
|
Credit to @wks_uwu for providing an alternative API, making the codebase much cleaner
|
||||||
|
|
||||||
\b
|
\b
|
||||||
Version: 1.0.0
|
Version: 1.0.1
|
||||||
Author: stabbedbybrick
|
Author: stabbedbybrick
|
||||||
Authorization: None
|
Authorization: None
|
||||||
Robustness:
|
Robustness:
|
||||||
Widevine:
|
Widevine:
|
||||||
L3: 720p, AAC2.0
|
L3: 1080p, AAC2.0
|
||||||
|
|
||||||
\b
|
\b
|
||||||
Tips:
|
Tips:
|
||||||
@ -37,11 +37,14 @@ class PLUTO(Service):
|
|||||||
EPISODE: /series/65ce4e5003fa740013793127/season/1/episode/662c2af0a9f2d200131ba731
|
EPISODE: /series/65ce4e5003fa740013793127/season/1/episode/662c2af0a9f2d200131ba731
|
||||||
MOVIE: /movies/635c1e430888bc001ad01a9b/details
|
MOVIE: /movies/635c1e430888bc001ad01a9b/details
|
||||||
- Use --lang LANG_RANGE option to request non-English tracks
|
- Use --lang LANG_RANGE option to request non-English tracks
|
||||||
|
- Use --hls to request HLS instead of DASH:
|
||||||
|
devine dl pluto URL --hls
|
||||||
|
|
||||||
\b
|
\b
|
||||||
Notes:
|
Notes:
|
||||||
- Both DASH(widevine) and HLS(AES) are looked for in the API
|
- Both DASH(widevine) and HLS(AES) are looked for in the API.
|
||||||
- HLS is prioritized over DASH, because the DASH version will sometimes have sync issues
|
- DASH is prioritized over HLS since the latter doesn't have 1080p. If DASH has audio/subtitle issues,
|
||||||
|
you can try using HLS with the --hls flag.
|
||||||
- Pluto use transport streams for HLS, meaning the video and audio are a part of the same stream
|
- Pluto use transport streams for HLS, meaning the video and audio are a part of the same stream
|
||||||
As a result, only videos are listed as tracks. But the audio will be included as well.
|
As a result, only videos are listed as tracks. But the audio will be included as well.
|
||||||
- With the variations in manifests, and the inconsistency in the API, the language is set as "en" by default
|
- With the variations in manifests, and the inconsistency in the API, the language is set as "en" by default
|
||||||
@ -62,14 +65,16 @@ class PLUTO(Service):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@click.command(name="PLUTO", short_help="https://pluto.tv/", help=__doc__)
|
@click.command(name="PLUTO", short_help="https://pluto.tv/", help=__doc__)
|
||||||
|
@click.option("--hls", is_flag=True, help="Request HLS instead of DASH")
|
||||||
@click.argument("title", type=str)
|
@click.argument("title", type=str)
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
def cli(ctx, **kwargs):
|
def cli(ctx, **kwargs):
|
||||||
return PLUTO(ctx, **kwargs)
|
return PLUTO(ctx, **kwargs)
|
||||||
|
|
||||||
def __init__(self, ctx, title):
|
def __init__(self, ctx, title, hls=False):
|
||||||
self.title = title
|
|
||||||
super().__init__(ctx)
|
super().__init__(ctx)
|
||||||
|
self.title = title
|
||||||
|
self.force_hls = hls
|
||||||
|
|
||||||
def authenticate(
|
def authenticate(
|
||||||
self,
|
self,
|
||||||
@ -216,17 +221,7 @@ class PLUTO(Service):
|
|||||||
hls = next((x.get("file") for x in sources if x.get("type").lower() == "hls"), None)
|
hls = next((x.get("file") for x in sources if x.get("type").lower() == "hls"), None)
|
||||||
dash = next((x.get("file") for x in sources if x.get("type").lower() == "dash"), None)
|
dash = next((x.get("file") for x in sources if x.get("type").lower() == "dash"), None)
|
||||||
|
|
||||||
if hls:
|
if dash and not self.force_hls:
|
||||||
self.license = None
|
|
||||||
m3u8_url = hls.replace("https://siloh.pluto.tv", "http://silo-hybrik.pluto.tv.s3.amazonaws.com")
|
|
||||||
manifest = self.clean_manifest(self.session.get(m3u8_url).text)
|
|
||||||
tracks = HLS.from_text(manifest, m3u8_url).to_tracks(language=title.language)
|
|
||||||
|
|
||||||
# Remove separate AD audio tracks
|
|
||||||
for track in tracks.audio:
|
|
||||||
tracks.audio.remove(track)
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.license = self.config["endpoints"]["license"]
|
self.license = self.config["endpoints"]["license"]
|
||||||
manifest = dash.replace("https://siloh.pluto.tv", "http://silo-hybrik.pluto.tv.s3.amazonaws.com")
|
manifest = dash.replace("https://siloh.pluto.tv", "http://silo-hybrik.pluto.tv.s3.amazonaws.com")
|
||||||
tracks = DASH.from_url(manifest, self.session).to_tracks(language=title.language)
|
tracks = DASH.from_url(manifest, self.session).to_tracks(language=title.language)
|
||||||
@ -236,6 +231,16 @@ class PLUTO(Service):
|
|||||||
if role is not None and role.get("value") in ["description", "alternative", "alternate"]:
|
if role is not None and role.get("value") in ["description", "alternative", "alternate"]:
|
||||||
track.descriptive = True
|
track.descriptive = True
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.license = None
|
||||||
|
m3u8_url = hls.replace("https://siloh.pluto.tv", "http://silo-hybrik.pluto.tv.s3.amazonaws.com")
|
||||||
|
manifest = self.clean_manifest(self.session.get(m3u8_url).text)
|
||||||
|
tracks = HLS.from_text(manifest, m3u8_url).to_tracks(language=title.language)
|
||||||
|
|
||||||
|
# Remove separate AD audio tracks
|
||||||
|
for track in tracks.audio:
|
||||||
|
tracks.audio.remove(track)
|
||||||
|
|
||||||
return tracks
|
return tracks
|
||||||
|
|
||||||
def get_chapters(self, title: Title_T) -> Chapters:
|
def get_chapters(self, title: Title_T) -> Chapters:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user