hls.js 1.5.14 → 1.5.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hls-demo.js +3 -2
- package/dist/hls-demo.js.map +1 -1
- package/dist/hls.js +98 -45
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +3 -5
- package/dist/hls.light.js.map +1 -1
- package/dist/hls.light.min.js +1 -1
- package/dist/hls.light.min.js.map +1 -1
- package/dist/hls.light.mjs +3 -5
- package/dist/hls.light.mjs.map +1 -1
- package/dist/hls.min.js +1 -1
- package/dist/hls.min.js.map +1 -1
- package/dist/hls.mjs +92 -45
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/dist/hls.worker.js.map +1 -1
- package/package.json +1 -1
- package/src/controller/content-steering-controller.ts +1 -2
- package/src/controller/eme-controller.ts +39 -19
- package/src/utils/mediakeys-helper.ts +11 -8
- package/src/utils/mp4-tools.ts +72 -27
package/dist/hls.js
CHANGED
@@ -552,7 +552,7 @@
|
|
552
552
|
// Some browsers don't allow to use bind on console object anyway
|
553
553
|
// fallback to default if needed
|
554
554
|
try {
|
555
|
-
exportedLogger.log("Debug logs enabled for \"" + id + "\" in hls.js version " + "1.5.
|
555
|
+
exportedLogger.log("Debug logs enabled for \"" + id + "\" in hls.js version " + "1.5.16");
|
556
556
|
} catch (e) {
|
557
557
|
exportedLogger = fakeLogger;
|
558
558
|
}
|
@@ -1288,15 +1288,19 @@
|
|
1288
1288
|
|
1289
1289
|
// System IDs for which we can extract a key ID from "encrypted" event PSSH
|
1290
1290
|
var KeySystemIds = {
|
1291
|
+
CENC: "1077efecc0b24d02ace33c1e52e2fb4b",
|
1292
|
+
CLEARKEY: "e2719d58a985b3c9781ab030af78d30e",
|
1293
|
+
FAIRPLAY: "94ce86fb07ff4f43adb893d2fa968ca2",
|
1294
|
+
PLAYREADY: "9a04f07998404286ab92e65be0885f95",
|
1291
1295
|
WIDEVINE: "edef8ba979d64acea3c827dcd51d21ed"
|
1292
1296
|
};
|
1293
1297
|
function keySystemIdToKeySystemDomain(systemId) {
|
1294
1298
|
if (systemId === KeySystemIds.WIDEVINE) {
|
1295
1299
|
return KeySystems.WIDEVINE;
|
1296
|
-
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
+
} else if (systemId === KeySystemIds.PLAYREADY) {
|
1301
|
+
return KeySystems.PLAYREADY;
|
1302
|
+
} else if (systemId === KeySystemIds.CENC || systemId === KeySystemIds.CLEARKEY) {
|
1303
|
+
return KeySystems.CLEARKEY;
|
1300
1304
|
}
|
1301
1305
|
}
|
1302
1306
|
function keySystemDomainToKeySystemFormat(keySystem) {
|
@@ -2178,7 +2182,6 @@
|
|
2178
2182
|
return findBox(sinf, ['schi', 'tenc'])[0];
|
2179
2183
|
}
|
2180
2184
|
}
|
2181
|
-
logger.error("[eme] missing 'schm' box");
|
2182
2185
|
return null;
|
2183
2186
|
}
|
2184
2187
|
|
@@ -2858,43 +2861,77 @@
|
|
2858
2861
|
// 16 bytes
|
2859
2862
|
kidCount, kids, dataSize, data || new Uint8Array());
|
2860
2863
|
}
|
2861
|
-
function
|
2862
|
-
|
2863
|
-
|
2864
|
+
function parseMultiPssh(initData) {
|
2865
|
+
var results = [];
|
2866
|
+
if (initData instanceof ArrayBuffer) {
|
2867
|
+
var length = initData.byteLength;
|
2868
|
+
var offset = 0;
|
2869
|
+
while (offset + 32 < length) {
|
2870
|
+
var view = new DataView(initData, offset);
|
2871
|
+
var pssh = parsePssh(view);
|
2872
|
+
results.push(pssh);
|
2873
|
+
offset += pssh.size;
|
2874
|
+
}
|
2864
2875
|
}
|
2865
|
-
|
2866
|
-
|
2867
|
-
|
2868
|
-
|
2869
|
-
|
2870
|
-
|
2871
|
-
|
2872
|
-
|
2873
|
-
|
2874
|
-
|
2876
|
+
return results;
|
2877
|
+
}
|
2878
|
+
function parsePssh(view) {
|
2879
|
+
var size = view.getUint32(0);
|
2880
|
+
var offset = view.byteOffset;
|
2881
|
+
var length = view.byteLength;
|
2882
|
+
if (length < size) {
|
2883
|
+
return {
|
2884
|
+
offset: offset,
|
2885
|
+
size: length
|
2886
|
+
};
|
2875
2887
|
}
|
2876
2888
|
var type = view.getUint32(4);
|
2877
2889
|
if (type !== 0x70737368) {
|
2878
|
-
return
|
2890
|
+
return {
|
2891
|
+
offset: offset,
|
2892
|
+
size: size
|
2893
|
+
};
|
2879
2894
|
}
|
2880
|
-
|
2881
|
-
if (
|
2882
|
-
return
|
2895
|
+
var version = view.getUint32(8) >>> 24;
|
2896
|
+
if (version !== 0 && version !== 1) {
|
2897
|
+
return {
|
2898
|
+
offset: offset,
|
2899
|
+
size: size
|
2900
|
+
};
|
2883
2901
|
}
|
2884
|
-
|
2902
|
+
var buffer = view.buffer;
|
2903
|
+
var systemId = Hex.hexDump(new Uint8Array(buffer, offset + 12, 16));
|
2885
2904
|
var dataSizeOrKidCount = view.getUint32(28);
|
2886
|
-
|
2887
|
-
|
2888
|
-
|
2905
|
+
var kids = null;
|
2906
|
+
var data = null;
|
2907
|
+
if (version === 0) {
|
2908
|
+
if (size - 32 < dataSizeOrKidCount || dataSizeOrKidCount < 22) {
|
2909
|
+
return {
|
2910
|
+
offset: offset,
|
2911
|
+
size: size
|
2912
|
+
};
|
2913
|
+
}
|
2914
|
+
data = new Uint8Array(buffer, offset + 32, dataSizeOrKidCount);
|
2915
|
+
} else if (version === 1) {
|
2916
|
+
if (!dataSizeOrKidCount || length < offset + 32 + dataSizeOrKidCount * 16 + 16) {
|
2917
|
+
return {
|
2918
|
+
offset: offset,
|
2919
|
+
size: size
|
2920
|
+
};
|
2889
2921
|
}
|
2890
|
-
|
2891
|
-
} else if (result.version === 1) {
|
2892
|
-
result.kids = [];
|
2922
|
+
kids = [];
|
2893
2923
|
for (var i = 0; i < dataSizeOrKidCount; i++) {
|
2894
|
-
|
2924
|
+
kids.push(new Uint8Array(buffer, offset + 32 + i * 16, 16));
|
2895
2925
|
}
|
2896
2926
|
}
|
2897
|
-
return
|
2927
|
+
return {
|
2928
|
+
version: version,
|
2929
|
+
systemId: systemId,
|
2930
|
+
kids: kids,
|
2931
|
+
data: data,
|
2932
|
+
offset: offset,
|
2933
|
+
size: size
|
2934
|
+
};
|
2898
2935
|
}
|
2899
2936
|
|
2900
2937
|
var keyUriToKeyIdMap = {};
|
@@ -22856,7 +22893,8 @@
|
|
22856
22893
|
var _this5 = this;
|
22857
22894
|
var initDataType = event.initDataType,
|
22858
22895
|
initData = event.initData;
|
22859
|
-
|
22896
|
+
var logMessage = "\"" + event.type + "\" event: init data type: \"" + initDataType + "\"";
|
22897
|
+
this.debug(logMessage);
|
22860
22898
|
|
22861
22899
|
// Ignore event when initData is null
|
22862
22900
|
if (initData === null) {
|
@@ -22871,24 +22909,37 @@
|
|
22871
22909
|
var sinf = base64Decode(JSON.parse(json).sinf);
|
22872
22910
|
var tenc = parseSinf(new Uint8Array(sinf));
|
22873
22911
|
if (!tenc) {
|
22874
|
-
|
22912
|
+
throw new Error("'schm' box missing or not cbcs/cenc with schi > tenc");
|
22875
22913
|
}
|
22876
22914
|
keyId = tenc.subarray(8, 24);
|
22877
22915
|
keySystemDomain = KeySystems.FAIRPLAY;
|
22878
22916
|
} catch (error) {
|
22879
|
-
this.warn(
|
22917
|
+
this.warn(logMessage + " Failed to parse sinf: " + error);
|
22880
22918
|
return;
|
22881
22919
|
}
|
22882
22920
|
} else {
|
22883
|
-
// Support clear-lead key-session creation (otherwise depend on playlist keys)
|
22884
|
-
var
|
22885
|
-
|
22921
|
+
// Support Widevine clear-lead key-session creation (otherwise depend on playlist keys)
|
22922
|
+
var psshResults = parseMultiPssh(initData);
|
22923
|
+
var psshInfo = psshResults.filter(function (pssh) {
|
22924
|
+
return pssh.systemId === KeySystemIds.WIDEVINE;
|
22925
|
+
})[0];
|
22926
|
+
if (!psshInfo) {
|
22927
|
+
if (psshResults.length === 0 || psshResults.some(function (pssh) {
|
22928
|
+
return !pssh.systemId;
|
22929
|
+
})) {
|
22930
|
+
this.warn(logMessage + " contains incomplete or invalid pssh data");
|
22931
|
+
} else {
|
22932
|
+
this.log("ignoring " + logMessage + " for " + psshResults.map(function (pssh) {
|
22933
|
+
return keySystemIdToKeySystemDomain(pssh.systemId);
|
22934
|
+
}).join(',') + " pssh data in favor of playlist keys");
|
22935
|
+
}
|
22886
22936
|
return;
|
22887
22937
|
}
|
22888
|
-
if (psshInfo.version === 0 && psshInfo.systemId === KeySystemIds.WIDEVINE && psshInfo.data) {
|
22889
|
-
keyId = psshInfo.data.subarray(8, 24);
|
22890
|
-
}
|
22891
22938
|
keySystemDomain = keySystemIdToKeySystemDomain(psshInfo.systemId);
|
22939
|
+
if (psshInfo.version === 0 && psshInfo.data) {
|
22940
|
+
var offset = psshInfo.data.length - 22;
|
22941
|
+
keyId = psshInfo.data.subarray(offset, offset + 16);
|
22942
|
+
}
|
22892
22943
|
}
|
22893
22944
|
if (!keySystemDomain || !keyId) {
|
22894
22945
|
return;
|
@@ -22901,12 +22952,15 @@
|
|
22901
22952
|
// Match playlist key
|
22902
22953
|
var keyContext = mediaKeySessions[i];
|
22903
22954
|
var decryptdata = keyContext.decryptdata;
|
22904
|
-
if (
|
22955
|
+
if (!decryptdata.keyId) {
|
22905
22956
|
return 0; // continue
|
22906
22957
|
}
|
22907
22958
|
var oldKeyIdHex = Hex.hexDump(decryptdata.keyId);
|
22908
22959
|
if (keyIdHex === oldKeyIdHex || decryptdata.uri.replace(/-/g, '').indexOf(keyIdHex) !== -1) {
|
22909
22960
|
keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];
|
22961
|
+
if (decryptdata.pssh) {
|
22962
|
+
return 1; // break
|
22963
|
+
}
|
22910
22964
|
delete keyIdToKeySessionPromise[oldKeyIdHex];
|
22911
22965
|
decryptdata.pssh = new Uint8Array(initData);
|
22912
22966
|
decryptdata.keyId = keyId;
|
@@ -24887,9 +24941,8 @@
|
|
24887
24941
|
}
|
24888
24942
|
if (pathwayLevels.length !== levels.length) {
|
24889
24943
|
this.log("Found " + pathwayLevels.length + "/" + levels.length + " levels in Pathway \"" + this.pathwayId + "\"");
|
24890
|
-
return pathwayLevels;
|
24891
24944
|
}
|
24892
|
-
return
|
24945
|
+
return pathwayLevels;
|
24893
24946
|
};
|
24894
24947
|
_proto.getLevelsForPathway = function getLevelsForPathway(pathwayId) {
|
24895
24948
|
if (this.levels === null) {
|
@@ -29242,7 +29295,7 @@
|
|
29242
29295
|
* Get the video-dev/hls.js package version.
|
29243
29296
|
*/
|
29244
29297
|
function get() {
|
29245
|
-
return "1.5.
|
29298
|
+
return "1.5.16";
|
29246
29299
|
}
|
29247
29300
|
}, {
|
29248
29301
|
key: "Events",
|