Move song m3u8 lookup into stream info

This commit is contained in:
glomatico
2026-07-08 14:32:31 -03:00
parent 487d0dba6c
commit c93f6df18c
+23 -21
View File
@@ -212,21 +212,16 @@ class AppleMusicSongInterface:
async def _get_m3u8_master_url_from_assets(
self,
song_metadata: dict,
media_id: str,
) -> str | None:
log = logger.bind(
action="get_m3u8_master_url_from_assets",
song_id=song_metadata["id"],
song_id=media_id,
)
if song_metadata["attributes"]["playParams"].get("isLibrary"):
log.debug("library_song_no_m3u8_master_url")
return None
play_params = song_metadata["attributes"].get("playParams", {})
assets = await self.base.apple_music_api.get_assets(
play_params.get("id") or song_metadata["id"],
play_params.get("kind", "song"),
media_id,
"song",
)
asset = next(
@@ -248,32 +243,44 @@ class AppleMusicSongInterface:
return None
async def get_m3u8_master_url(
async def _get_m3u8_master_url(
self,
media_id: str,
playback: dict | None,
song_metadata: dict | None,
) -> str | None:
if playback:
return self._get_m3u8_from_playback(playback)
else:
return await self._get_m3u8_master_url_from_assets(song_metadata)
m3u8_master_url = self._get_m3u8_from_playback(playback)
if m3u8_master_url:
return m3u8_master_url
return await self._get_m3u8_master_url_from_assets(media_id)
async def get_stream_info(
self,
media_id: str,
is_library: bool,
m3u8_master_url: str | None = None,
webplayback: dict | None = None,
playback: dict | None = None,
) -> StreamInfoAv:
stream_info = None
if is_library:
stream_info = await self._get_library_stream_info(webplayback)
else:
m3u8_master_url = None
fetched_m3u8_master_url = False
for codec in self.codec_priority:
if codec.is_web:
stream_info = await self._get_web_stream_info(webplayback, codec)
else:
if not fetched_m3u8_master_url:
m3u8_master_url = await self._get_m3u8_master_url(
media_id,
playback,
)
fetched_m3u8_master_url = True
stream_info = await self._get_stream_info_nonweb(
m3u8_master_url,
codec,
@@ -702,16 +709,11 @@ class AppleMusicSongInterface:
)
if not self.skip_stream_info:
m3u8_master_url = await self.get_m3u8_master_url(
playback,
media.media_metadata,
)
media.stream_info = await self.get_stream_info(
media.media_id,
media.is_library,
m3u8_master_url,
webplayback,
playback,
)
if media.stream_info.audio_track.drm_free: