Stream kinda works reliably now

live_tv_play
Juraj Nyíri 3 years ago
parent cbff0edb3e
commit 29e174a1bf

@ -18943,7 +18943,7 @@ class Plex {
})).data.MediaContainer; })).data.MediaContainer;
}; };
this.tune = async (channelID, session) => { this.tune = async (channelID, session) => {
session = 'PlexMeetsHomeAssistant'; session = 'PlexMeetsHomeAssistant3';
console.log(channelID); console.log(channelID);
// Todo: what is 12? do we need to get this from somewhere and change? // Todo: what is 12? do we need to get this from somewhere and change?
let url = this.authorizeURL(`${this.getBasicURL()}/livetv/dvrs/12/channels/${channelID}/tune?X-Plex-Language=en-us`); let url = this.authorizeURL(`${this.getBasicURL()}/livetv/dvrs/12/channels/${channelID}/tune?X-Plex-Language=en-us`);
@ -18956,12 +18956,10 @@ class Plex {
const tuneData = (await axios.post(this.authorizeURL(url), { const tuneData = (await axios.post(this.authorizeURL(url), {
timeout: this.requestTimeout timeout: this.requestTimeout
})).data.MediaContainer; })).data.MediaContainer;
console.log(url); console.log('Tuning started.');
console.log(tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.title);
console.log('___');
let startURL = `${this.getBasicURL()}/video/:/transcode/universal/start.mpd`; let startURL = `${this.getBasicURL()}/video/:/transcode/universal/start.mpd`;
startURL += `?hasMDE=1`; startURL += `?hasMDE=1`;
startURL += `&path=${tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.key}`; startURL += `&path=${encodeURIComponent(tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.key)}`;
startURL += `&mediaIndex=0`; startURL += `&mediaIndex=0`;
startURL += `&partIndex=0`; startURL += `&partIndex=0`;
startURL += `&protocol=dash`; startURL += `&protocol=dash`;
@ -18994,7 +18992,6 @@ class Plex {
startURL += `&X-Plex-Device-Name=Chrome`; startURL += `&X-Plex-Device-Name=Chrome`;
startURL += `&X-Plex-Device-Screen-Resolution=1792x444%2C1792x1120`; startURL += `&X-Plex-Device-Screen-Resolution=1792x444%2C1792x1120`;
startURL += `&X-Plex-Language=en-GB`; startURL += `&X-Plex-Language=en-GB`;
console.log('Deciding...');
let decisionURL = `${this.getBasicURL()}/video/:/transcode/universal/decision`; let decisionURL = `${this.getBasicURL()}/video/:/transcode/universal/decision`;
decisionURL += `?advancedSubtitles=text`; decisionURL += `?advancedSubtitles=text`;
decisionURL += `&audioBoost=100`; decisionURL += `&audioBoost=100`;
@ -19015,17 +19012,34 @@ class Plex {
decisionURL += `&videoQuality=100`; decisionURL += `&videoQuality=100`;
decisionURL += `&X-Plex-Client-Identifier=${session}`; decisionURL += `&X-Plex-Client-Identifier=${session}`;
decisionURL += `&X-Plex-Platform=Android`; decisionURL += `&X-Plex-Platform=Android`;
const res = await axios.get(this.authorizeURL(decisionURL), { const url2 = this.authorizeURL(`${this.getBasicURL()}${tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.key}?includeBandwidths=1&offset=-1&X-Plex-Incomplete-Segments=1&X-Plex-Session-Identifier=${session}`);
console.log('Getting info about channel stream...');
const res2 = await axios.get(url2, {
timeout: 60000
});
console.log(res2.data);
if (lodash.isNil(res2.data.MediaContainer.Metadata[0].Media[0].TranscodeSession)) {
console.log('NOT STARTED - Starting...');
const res1 = await axios.get(this.authorizeURL(startURL), {
timeout: 60000
});
console.log(res1);
console.log('____');
}
const sleep = async (ms) => {
return new Promise(resolve => setTimeout(resolve, ms));
};
console.log('Deciding...');
let res = await axios.get(this.authorizeURL(decisionURL), {
timeout: this.requestTimeout timeout: this.requestTimeout
}); });
console.log(res); console.log(res);
console.log('Starting...'); console.log('Waiting for new url...');
// why bad request??? await sleep(10000);
const res1 = await axios.get(this.authorizeURL(startURL), { res = await axios.get(this.authorizeURL(decisionURL), {
timeout: 60000 timeout: this.requestTimeout
}); });
console.log(res1); console.log(res);
console.log('____');
return res.data.MediaContainer.Metadata[0].Media[0].Part[0].key; return res.data.MediaContainer.Metadata[0].Media[0].Part[0].key;
}; };
this.getContinueWatching = async () => { this.getContinueWatching = async () => {

@ -366,7 +366,7 @@ class Plex {
}; };
tune = async (channelID: string, session: string): Promise<any> => { tune = async (channelID: string, session: string): Promise<any> => {
session = 'PlexMeetsHomeAssistant'; session = 'PlexMeetsHomeAssistant3';
console.log(channelID); console.log(channelID);
// Todo: what is 12? do we need to get this from somewhere and change? // Todo: what is 12? do we need to get this from somewhere and change?
let url = this.authorizeURL( let url = this.authorizeURL(
@ -385,13 +385,11 @@ class Plex {
}) })
).data.MediaContainer; ).data.MediaContainer;
console.log(url); console.log('Tuning started.');
console.log(tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.title);
console.log('___');
let startURL = `${this.getBasicURL()}/video/:/transcode/universal/start.mpd`; let startURL = `${this.getBasicURL()}/video/:/transcode/universal/start.mpd`;
startURL += `?hasMDE=1`; startURL += `?hasMDE=1`;
startURL += `&path=${tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.key}`; startURL += `&path=${encodeURIComponent(tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.key)}`;
startURL += `&mediaIndex=0`; startURL += `&mediaIndex=0`;
startURL += `&partIndex=0`; startURL += `&partIndex=0`;
startURL += `&protocol=dash`; startURL += `&protocol=dash`;
@ -425,8 +423,6 @@ class Plex {
startURL += `&X-Plex-Device-Screen-Resolution=1792x444%2C1792x1120`; startURL += `&X-Plex-Device-Screen-Resolution=1792x444%2C1792x1120`;
startURL += `&X-Plex-Language=en-GB`; startURL += `&X-Plex-Language=en-GB`;
console.log('Deciding...');
let decisionURL = `${this.getBasicURL()}/video/:/transcode/universal/decision`; let decisionURL = `${this.getBasicURL()}/video/:/transcode/universal/decision`;
decisionURL += `?advancedSubtitles=text`; decisionURL += `?advancedSubtitles=text`;
@ -449,19 +445,44 @@ class Plex {
decisionURL += `&X-Plex-Client-Identifier=${session}`; decisionURL += `&X-Plex-Client-Identifier=${session}`;
decisionURL += `&X-Plex-Platform=Android`; decisionURL += `&X-Plex-Platform=Android`;
const res = await axios.get(this.authorizeURL(decisionURL), { const url2 = this.authorizeURL(
`${this.getBasicURL()}${
tuneData.MediaSubscription[0].MediaGrabOperation[0].Metadata.key
}?includeBandwidths=1&offset=-1&X-Plex-Incomplete-Segments=1&X-Plex-Session-Identifier=${session}`
);
console.log('Getting info about channel stream...');
const res2 = await axios.get(url2, {
timeout: 60000
});
console.log(res2.data);
if (_.isNil(res2.data.MediaContainer.Metadata[0].Media[0].TranscodeSession)) {
console.log('NOT STARTED - Starting...');
const res1 = await axios.get(this.authorizeURL(startURL), {
timeout: 60000
});
console.log(res1);
console.log('____');
}
const sleep = async (ms: number): Promise<void> => {
return new Promise(resolve => setTimeout(resolve, ms));
};
console.log('Deciding...');
let res = await axios.get(this.authorizeURL(decisionURL), {
timeout: this.requestTimeout timeout: this.requestTimeout
}); });
console.log(res); console.log(res);
console.log('Starting...'); console.log('Waiting for new url...');
await sleep(10000);
// why bad request??? res = await axios.get(this.authorizeURL(decisionURL), {
const res1 = await axios.get(this.authorizeURL(startURL), { timeout: this.requestTimeout
timeout: 60000
}); });
console.log(res1); console.log(res);
console.log('____');
return res.data.MediaContainer.Metadata[0].Media[0].Part[0].key; return res.data.MediaContainer.Metadata[0].Media[0].Part[0].key;
}; };

Loading…
Cancel
Save