youtube: use web client and decipher urls

This commit is contained in:
wukko 2024-04-26 12:25:22 +06:00
parent 9bd3ea40e0
commit 0feacf0ae5
No known key found for this signature in database
GPG key ID: 3E30B3F26C7B4AA2

View file

@ -33,7 +33,7 @@ export default async function(o) {
} }
try { try {
info = await yt.getBasicInfo(o.id, 'YTMUSIC_ANDROID'); info = await yt.getBasicInfo(o.id, 'WEB');
} catch (e) { } catch (e) {
return { error: 'ErrorCantConnectToServiceAPI' }; return { error: 'ErrorCantConnectToServiceAPI' };
} }
@ -43,7 +43,9 @@ export default async function(o) {
if (info.playability_status.status !== 'OK') return { error: 'ErrorYTUnavailable' }; if (info.playability_status.status !== 'OK') return { error: 'ErrorYTUnavailable' };
if (info.basic_info.is_live) return { error: 'ErrorLiveVideo' }; if (info.basic_info.is_live) return { error: 'ErrorLiveVideo' };
let bestQuality, hasAudio, adaptive_formats = info.streaming_data.adaptive_formats.filter(e => let bestQuality, hasAudio;
let adaptive_formats = info.streaming_data.adaptive_formats.filter(e =>
e.mime_type.includes(c[o.format].codec) || e.mime_type.includes(c[o.format].aCodec) e.mime_type.includes(c[o.format].codec) || e.mime_type.includes(c[o.format].aCodec)
).sort((a, b) => Number(b.bitrate) - Number(a.bitrate)); ).sort((a, b) => Number(b.bitrate) - Number(a.bitrate));
@ -96,7 +98,7 @@ export default async function(o) {
if (hasAudio && o.isAudioOnly) return { if (hasAudio && o.isAudioOnly) return {
type: "render", type: "render",
isAudioOnly: true, isAudioOnly: true,
urls: audio.url, urls: audio.decipher(yt.session.player),
filenameAttributes: filenameAttributes, filenameAttributes: filenameAttributes,
fileMetadata: fileMetadata fileMetadata: fileMetadata
} }
@ -108,14 +110,14 @@ export default async function(o) {
if (!o.isAudioOnly && !o.isAudioMuted && o.format === 'h264') { if (!o.isAudioOnly && !o.isAudioMuted && o.format === 'h264') {
match = info.streaming_data.formats.find(checkSingle); match = info.streaming_data.formats.find(checkSingle);
type = "bridge"; type = "bridge";
urls = match?.url; urls = match?.decipher(yt.session.player);
} }
const video = adaptive_formats.find(checkRender); const video = adaptive_formats.find(checkRender);
if (!match && video) { if (!match && video) {
match = video; match = video;
type = "render"; type = "render";
urls = [video.url, audio.url]; urls = [video.decipher(yt.session.player), audio.decipher(yt.session.player)];
} }
if (match) { if (match) {