diff --git a/lib/dash.js b/lib/dash.js index ce6c3a2..65b6e63 100644 --- a/lib/dash.js +++ b/lib/dash.js @@ -56,16 +56,12 @@ const combineGetters = (representation, adaptationSet) => { }; const parseBaseUrl = (manifestUrl, mpd, period, representation) => { - let manifestBaseUrl = mpd.getBaseUrl(); - if (!manifestBaseUrl) manifestBaseUrl = manifestUrl; - else if (!manifestBaseUrl.startsWith('https://')) - manifestBaseUrl = new URL(manifestBaseUrl, manifestUrl).toString(); - const periodBaseUrl = new URL(period.getBaseUrl() || '', manifestBaseUrl).toString(); - const representationBaseUrl = new URL( - representation.getBaseUrl() || '', - periodBaseUrl - ).toString(); - return representationBaseUrl; + let base = mpd.getBaseUrl(); + if (!base) base = manifestUrl; + else if (!base.startsWith('https://')) base = new URL(base, manifestUrl).toString(); + if (!!period.getBaseUrl() || !!base) base = new URL(period.getBaseUrl() || '', base).toString(); + const baseUrl = new URL(representation.getBaseUrl() || '', base).toString(); + return baseUrl; }; const parseContentTypes = (representation) => { diff --git a/package-lock.json b/package-lock.json index 0059c44..d970bb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dasha", - "version": "3.0.2", + "version": "3.0.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dasha", - "version": "3.0.2", + "version": "3.0.3", "funding": [ { "type": "individual", diff --git a/package.json b/package.json index d55ac50..6df5558 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dasha", - "version": "3.0.2", + "version": "3.0.3", "author": "Vitaly Gashkov ", "description": "Parser for MPEG-DASH & HLS manifests", "license": "AGPL-3.0", diff --git a/test/cr.mpd b/test/cr.mpd new file mode 100644 index 0000000..9b85a6f --- /dev/null +++ b/test/cr.mpd @@ -0,0 +1,530 @@ + + + + + + + AAAAoXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAIEIARIQx8CzeTSGPu2tj9MlCJBx0RoIY2FzdGxhYnMiWGV5SmhjM05sZEVsa0lqb2lZelEyWlRBMll6Vm1aRFE1Tm1VNFlXVmpNR0kyTnpjMllqazNaV05oTTJZaUxDSjJZWEpwWVc1MFNXUWlPaUpoZG10bGVTSjkyB2RlZmF1bHQ= + + + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQBiAFAAQQB4ADQAWQAwADcAVAA2AHQAagA5AE0AbABDAEoAQgB4ADAAUQA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AGQAQgB3ADcAcgBNAFoASAByAHgASQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + + + + + AAAAoXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAIEIARIQx8CzeTSGPu2tj9MlCJBx0RoIY2FzdGxhYnMiWGV5SmhjM05sZEVsa0lqb2lZelEyWlRBMll6Vm1aRFE1Tm1VNFlXVmpNR0kyTnpjMllqazNaV05oTTJZaUxDSjJZWEpwWVc1MFNXUWlPaUpoZG10bGVTSjkyB2RlZmF1bHQ= + + + KAMAAAEAAQAeAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AZQBiAFAAQQB4ADQAWQAwADcAVAA2AHQAagA5AE0AbABDAEoAQgB4ADAAUQA9AD0APAAvAEsASQBEAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwAuAGQAcgBtAHQAbwBkAGEAeQAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAtAHAAcgBvAHgAeQAtAGgAZQBhAGQAZQByAGEAdQB0AGgALwBkAHIAbQB0AG8AZABhAHkALwBSAGkAZwBoAHQAcwBNAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwAHMAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALQB1AGkALgBlAHgAYQBtAHAAbABlAC4AYwBvAG0APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMASABFAEMASwBTAFUATQA+AGQAQgB3ADcAcgBNAFoASAByAHgASQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/ + + + + diff --git a/test/dasha.test.js b/test/dasha.test.js index e8b4f7c..4481a57 100644 --- a/test/dasha.test.js +++ b/test/dasha.test.js @@ -6,19 +6,26 @@ const { parse } = require('../dasha'); const load = (path) => readFileSync(path, 'utf8'); -test('getQualityLabel', () => { - strictEqual(getQualityLabel({ width: 1920, height: 1080 }), '1080p'); +test('get video quality label', () => { + strictEqual(getQualityLabel({ width: 1920, height: 804 }), '1080p'); }); const kionUrl = 'https://offload.kion.ru/htv-rrs.mts.ru/88888888/16/20230707/268697239/268697239.mpd'; -const kionUrl2 = - 'https://offload.kion.ru/htv-rrs.mts.ru/88888888/16/20240401/268725201/268725201.mpd'; -test('DASH parsing', async () => { +test('DASH: parse with URL parameter', async () => { const url = kionUrl; const response = await fetch(url); const text = await response.text(); const manifest = await parse(text, url); strictEqual(manifest.tracks.all.length, 5); }); + +test('DASH: parse without URL parameter', async () => { + const text = load('./test/cr.mpd'); + const manifest = await parse(text); + strictEqual(manifest.tracks.all.length, 8); + const initUrl = + 'https://a-vrv.akamaized.net/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/init-f1-v1-x3.mp4?t=exp=1713871228~acl=/evs3/8a1b3acce53d49eea0ce2104fae30046/assets/p/c46e06c5fd496e8aec0b6776b97eca3f_,3748583.mp4,3748584.mp4,3748582.mp4,3748580.mp4,3748581.mp4,.urlset/*~hmac=7dc7daeb338da040c65111a88cbf947505a5897f42d1c433c3858f8d890ed29c'; + strictEqual(manifest.tracks.videos[0].segments[0].url, initUrl); +});