From efa9f7bdf38003c3dc48484e9c86e1ae20effd96 Mon Sep 17 00:00:00 2001 From: ward Date: Sat, 14 Jun 2025 01:09:47 +1200 Subject: [PATCH] Minor fixes causing some post live DVR not to load --- materialious/electron/package-lock.json | 4 +- materialious/src/lib/sabr/index.ts | 14 +++++- materialious/src/lib/sabr/sabrUmpParser.ts | 50 +++++++++++----------- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/materialious/electron/package-lock.json b/materialious/electron/package-lock.json index 57dc1239..aa17a201 100644 --- a/materialious/electron/package-lock.json +++ b/materialious/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "Materialious", - "version": "1.9.5", + "version": "1.9.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "Materialious", - "version": "1.9.5", + "version": "1.9.6", "license": "MIT", "dependencies": { "@capacitor-community/electron": "^5.0.0", diff --git a/materialious/src/lib/sabr/index.ts b/materialious/src/lib/sabr/index.ts index dea01736..8b86cf71 100644 --- a/materialious/src/lib/sabr/index.ts +++ b/materialious/src/lib/sabr/index.ts @@ -129,7 +129,7 @@ export function injectSABR( type === shaka.net.NetworkingEngine.RequestType.SEGMENT && url.pathname.includes('videoplayback') ) { - if (!video.liveNow) { + if (!video.liveNow && !video.ytjs?.video.basic_info.is_post_live_dvr) { const currentFormat = formatList.find( (format) => fromFormat(format) === (new URL(request.uris[0]).searchParams.get('___key') || '') @@ -283,7 +283,17 @@ export function injectSABR( request.headers['X-Streaming-Context'] = btoa(JSON.stringify(sabrStreamingContext)); delete headers.Range; } else { - url.pathname += `/ump/1/srfvp/1/pot/${get(poTokenCacheStore)}`; + if (!video.liveNow && !video.ytjs?.video.basic_info.is_post_live_dvr) { + url.searchParams.set('ump', '1'); + url.searchParams.set('srfvp', '1'); + if (headers.Range) { + url.searchParams.set('range', headers.Range?.split('=')[1]); + delete headers.Range; + } + } else { + url.pathname += '/ump/1'; + url.pathname += '/srfvp/1'; + } request.headers['X-Streaming-Context'] = btoa( JSON.stringify({ diff --git a/materialious/src/lib/sabr/sabrUmpParser.ts b/materialious/src/lib/sabr/sabrUmpParser.ts index c64aafda..c6ac7567 100644 --- a/materialious/src/lib/sabr/sabrUmpParser.ts +++ b/materialious/src/lib/sabr/sabrUmpParser.ts @@ -112,33 +112,31 @@ export class SabrUmpParser { } private handlePart(part: Part): shaka.extern.Response | undefined { - switch (part.type) { - case PART.FORMAT_INITIALIZATION_METADATA: - this.handleFormatInitMetadata(part); - break; - case PART.NEXT_REQUEST_POLICY: - this.handleNextRequestPolicy(part); - break; - case PART.MEDIA_HEADER: - try { + try { + switch (part.type) { + case PART.FORMAT_INITIALIZATION_METADATA: + this.handleFormatInitMetadata(part); + break; + case PART.NEXT_REQUEST_POLICY: + this.handleNextRequestPolicy(part); + break; + case PART.MEDIA_HEADER: this.handleMediaHeader(part); - } catch (error) { - console.error(error); - } - break; - case PART.MEDIA: - this.handleMedia(part); - break; - case PART.MEDIA_END: - return this.handleMediaEnd(part); - case PART.SABR_ERROR: - return this.handleSabrError(part); - case PART.STREAM_PROTECTION_STATUS: - return this.handleStreamProtectionStatus(part); - case PART.SABR_REDIRECT: - return this.handleSabrRedirect(part); - default: - } + break; + case PART.MEDIA: + this.handleMedia(part); + break; + case PART.MEDIA_END: + return this.handleMediaEnd(part); + case PART.SABR_ERROR: + return this.handleSabrError(part); + case PART.STREAM_PROTECTION_STATUS: + return this.handleStreamProtectionStatus(part); + case PART.SABR_REDIRECT: + return this.handleSabrRedirect(part); + default: + } + } catch {} } private handleFormatInitMetadata(part: Part) {