hls.js 1.6.0-beta.2.0.canary.10876 → 1.6.0-beta.2.0.canary.10877
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.js +127 -105
- package/dist/hls.js.map +1 -1
- package/dist/hls.light.js +3 -3
- 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 -3
- 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 +110 -92
- package/dist/hls.mjs.map +1 -1
- package/dist/hls.worker.js +1 -1
- package/package.json +1 -1
- package/src/controller/eme-controller.ts +154 -116
- package/src/loader/key-loader.ts +6 -1
package/dist/hls.js
CHANGED
@@ -1058,7 +1058,7 @@
|
|
1058
1058
|
// Some browsers don't allow to use bind on console object anyway
|
1059
1059
|
// fallback to default if needed
|
1060
1060
|
try {
|
1061
|
-
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.2.0.canary.
|
1061
|
+
newLogger.log("Debug logs enabled for \"" + context + "\" in hls.js version " + "1.6.0-beta.2.0.canary.10877");
|
1062
1062
|
} catch (e) {
|
1063
1063
|
/* log fn threw an exception. All logger methods are no-ops. */
|
1064
1064
|
return createLogger();
|
@@ -16320,7 +16320,7 @@
|
|
16320
16320
|
return !remuxResult.audio && !remuxResult.video && !remuxResult.text && !remuxResult.id3 && !remuxResult.initSegment;
|
16321
16321
|
}
|
16322
16322
|
|
16323
|
-
var version = "1.6.0-beta.2.0.canary.
|
16323
|
+
var version = "1.6.0-beta.2.0.canary.10877";
|
16324
16324
|
|
16325
16325
|
// ensure the worker ends up in the bundle
|
16326
16326
|
// If the worker should not be included this gets aliased to empty.js
|
@@ -21773,121 +21773,143 @@
|
|
21773
21773
|
if (initData === null) {
|
21774
21774
|
return;
|
21775
21775
|
}
|
21776
|
-
|
21777
|
-
var keySystemDomain;
|
21778
|
-
if (initDataType === 'sinf' && _this.getLicenseServerUrl(KeySystems.FAIRPLAY)) {
|
21779
|
-
// Match sinf keyId to playlist skd://keyId=
|
21780
|
-
var json = bin2str(new Uint8Array(initData));
|
21781
|
-
try {
|
21782
|
-
var sinf = base64Decode(JSON.parse(json).sinf);
|
21783
|
-
var tenc = parseSinf(sinf);
|
21784
|
-
if (!tenc) {
|
21785
|
-
throw new Error("'schm' box missing or not cbcs/cenc with schi > tenc");
|
21786
|
-
}
|
21787
|
-
keyId = tenc.subarray(8, 24);
|
21788
|
-
keySystemDomain = KeySystems.FAIRPLAY;
|
21789
|
-
} catch (error) {
|
21790
|
-
_this.warn(logMessage + " Failed to parse sinf: " + error);
|
21791
|
-
return;
|
21792
|
-
}
|
21793
|
-
} else if (_this.getLicenseServerUrl(KeySystems.WIDEVINE)) {
|
21794
|
-
// Support Widevine clear-lead key-session creation (otherwise depend on playlist keys)
|
21795
|
-
var psshResults = parseMultiPssh(initData);
|
21796
|
-
|
21797
|
-
// TODO: If using keySystemAccessPromises we might want to wait until one is resolved
|
21776
|
+
if (!_this.keyFormatPromise) {
|
21798
21777
|
var keySystems = Object.keys(_this.keySystemAccessPromises);
|
21799
21778
|
if (!keySystems.length) {
|
21800
21779
|
keySystems = getKeySystemsForConfig(_this.config);
|
21801
21780
|
}
|
21802
|
-
var
|
21803
|
-
|
21804
|
-
|
21805
|
-
|
21806
|
-
|
21807
|
-
|
21808
|
-
|
21809
|
-
|
21810
|
-
|
21811
|
-
|
21812
|
-
|
21813
|
-
|
21814
|
-
|
21781
|
+
var keyFormats = keySystems.map(keySystemDomainToKeySystemFormat).filter(function (k) {
|
21782
|
+
return !!k;
|
21783
|
+
});
|
21784
|
+
_this.keyFormatPromise = _this.getKeyFormatPromise(keyFormats);
|
21785
|
+
}
|
21786
|
+
_this.keyFormatPromise.then(function (keySystemFormat) {
|
21787
|
+
var keySystem = keySystemFormatToKeySystemDomain(keySystemFormat);
|
21788
|
+
var keyId;
|
21789
|
+
var keySystemDomain;
|
21790
|
+
if (initDataType === 'sinf') {
|
21791
|
+
if (keySystem !== KeySystems.FAIRPLAY) {
|
21792
|
+
_this.warn("Ignoring unexpected \"" + event.type + "\" event with init data type: \"" + initDataType + "\" for selected key-system " + keySystem);
|
21793
|
+
return;
|
21815
21794
|
}
|
21816
|
-
|
21817
|
-
|
21818
|
-
|
21819
|
-
|
21820
|
-
|
21821
|
-
|
21822
|
-
|
21823
|
-
|
21824
|
-
keyId =
|
21795
|
+
// Match sinf keyId to playlist skd://keyId=
|
21796
|
+
var json = bin2str(new Uint8Array(initData));
|
21797
|
+
try {
|
21798
|
+
var sinf = base64Decode(JSON.parse(json).sinf);
|
21799
|
+
var tenc = parseSinf(sinf);
|
21800
|
+
if (!tenc) {
|
21801
|
+
throw new Error("'schm' box missing or not cbcs/cenc with schi > tenc");
|
21802
|
+
}
|
21803
|
+
keyId = tenc.subarray(8, 24);
|
21804
|
+
keySystemDomain = KeySystems.FAIRPLAY;
|
21805
|
+
} catch (error) {
|
21806
|
+
_this.warn(logMessage + " Failed to parse sinf: " + error);
|
21807
|
+
return;
|
21825
21808
|
}
|
21826
|
-
}
|
21827
|
-
|
21828
|
-
|
21829
|
-
|
21830
|
-
}
|
21831
|
-
var keyIdHex = Hex.hexDump(keyId);
|
21832
|
-
var _this2 = _this,
|
21833
|
-
keyIdToKeySessionPromise = _this2.keyIdToKeySessionPromise,
|
21834
|
-
mediaKeySessions = _this2.mediaKeySessions;
|
21835
|
-
var keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];
|
21836
|
-
var _loop = function _loop() {
|
21837
|
-
// Match playlist key
|
21838
|
-
var keyContext = mediaKeySessions[i];
|
21839
|
-
var decryptdata = keyContext.decryptdata;
|
21840
|
-
if (!decryptdata.keyId) {
|
21841
|
-
return 0; // continue
|
21809
|
+
} else {
|
21810
|
+
if (keySystem !== KeySystems.WIDEVINE && keySystem !== KeySystems.PLAYREADY) {
|
21811
|
+
_this.warn("Ignoring unexpected \"" + event.type + "\" event with init data type: \"" + initDataType + "\" for selected key-system " + keySystem);
|
21812
|
+
return;
|
21842
21813
|
}
|
21843
|
-
|
21844
|
-
|
21845
|
-
|
21846
|
-
|
21814
|
+
// Support Widevine/PlayReady clear-lead key-session creation (otherwise depend on playlist keys)
|
21815
|
+
var psshResults = parseMultiPssh(initData);
|
21816
|
+
var psshInfos = psshResults.filter(function (pssh) {
|
21817
|
+
return !!pssh.systemId && keySystemIdToKeySystemDomain(pssh.systemId) === keySystem;
|
21818
|
+
});
|
21819
|
+
if (psshInfos.length) {
|
21820
|
+
_this.warn(logMessage + " Using first of " + psshInfos.length + " pssh found for selected key-system " + keySystem);
|
21821
|
+
}
|
21822
|
+
var psshInfo = psshInfos[0];
|
21823
|
+
if (!psshInfo) {
|
21824
|
+
if (psshResults.length === 0 || psshResults.some(function (pssh) {
|
21825
|
+
return !pssh.systemId;
|
21826
|
+
})) {
|
21827
|
+
_this.warn(logMessage + " contains incomplete or invalid pssh data");
|
21828
|
+
} else {
|
21829
|
+
_this.log("ignoring " + logMessage + " for " + psshResults.map(function (pssh) {
|
21830
|
+
return keySystemIdToKeySystemDomain(pssh.systemId);
|
21831
|
+
}).join(',') + " pssh data in favor of playlist keys");
|
21832
|
+
}
|
21833
|
+
return;
|
21834
|
+
}
|
21835
|
+
keySystemDomain = keySystemIdToKeySystemDomain(psshInfo.systemId);
|
21836
|
+
if (psshInfo.version === 0 && psshInfo.data) {
|
21837
|
+
if (keySystemDomain === KeySystems.WIDEVINE) {
|
21838
|
+
var offset = psshInfo.data.length - 22;
|
21839
|
+
keyId = psshInfo.data.subarray(offset, offset + 16);
|
21840
|
+
} else if (keySystemDomain === KeySystems.PLAYREADY) {
|
21841
|
+
keyId = parsePlayReadyWRM(psshInfo.data);
|
21842
|
+
}
|
21843
|
+
}
|
21844
|
+
}
|
21845
|
+
if (!keySystemDomain || !keyId) {
|
21846
|
+
return;
|
21847
|
+
}
|
21848
|
+
var keyIdHex = Hex.hexDump(keyId);
|
21849
|
+
var _this2 = _this,
|
21850
|
+
keyIdToKeySessionPromise = _this2.keyIdToKeySessionPromise,
|
21851
|
+
mediaKeySessions = _this2.mediaKeySessions;
|
21852
|
+
var keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];
|
21853
|
+
var _loop = function _loop() {
|
21854
|
+
// Match playlist key
|
21855
|
+
var keyContext = mediaKeySessions[i];
|
21856
|
+
var decryptdata = keyContext.decryptdata;
|
21857
|
+
if (!decryptdata.keyId) {
|
21858
|
+
return 0; // continue
|
21859
|
+
}
|
21860
|
+
var oldKeyIdHex = Hex.hexDump(decryptdata.keyId);
|
21861
|
+
if (keyIdHex === oldKeyIdHex || decryptdata.uri.replace(/-/g, '').indexOf(keyIdHex) !== -1) {
|
21862
|
+
keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];
|
21863
|
+
if (decryptdata.pssh) {
|
21864
|
+
return 1; // break
|
21865
|
+
}
|
21866
|
+
delete keyIdToKeySessionPromise[oldKeyIdHex];
|
21867
|
+
decryptdata.pssh = new Uint8Array(initData);
|
21868
|
+
decryptdata.keyId = keyId;
|
21869
|
+
keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(function () {
|
21870
|
+
return _this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, 'encrypted-event-key-match');
|
21871
|
+
});
|
21872
|
+
keySessionContextPromise.catch(function (error) {
|
21873
|
+
return _this.handleError(error);
|
21874
|
+
});
|
21847
21875
|
return 1; // break
|
21848
21876
|
}
|
21849
|
-
|
21850
|
-
|
21851
|
-
|
21852
|
-
|
21853
|
-
|
21854
|
-
|
21855
|
-
|
21856
|
-
|
21857
|
-
|
21858
|
-
|
21877
|
+
},
|
21878
|
+
_ret;
|
21879
|
+
for (var i = 0; i < mediaKeySessions.length; i++) {
|
21880
|
+
_ret = _loop();
|
21881
|
+
if (_ret === 0) continue;
|
21882
|
+
if (_ret === 1) break;
|
21883
|
+
}
|
21884
|
+
if (!keySessionContextPromise) {
|
21885
|
+
if (keySystemDomain !== keySystem) {
|
21886
|
+
_this.log("Ignoring \"" + event.type + "\" event with " + keySystemDomain + " init data for selected key-system " + keySystem);
|
21887
|
+
return;
|
21859
21888
|
}
|
21860
|
-
|
21861
|
-
|
21862
|
-
|
21863
|
-
|
21864
|
-
|
21865
|
-
if (_ret === 1) break;
|
21866
|
-
}
|
21867
|
-
if (!keySessionContextPromise) {
|
21868
|
-
// Clear-lead key (not encountered in playlist)
|
21869
|
-
keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = _this.getKeySystemSelectionPromise([keySystemDomain]).then(function (_ref) {
|
21870
|
-
var _keySystemToKeySystem;
|
21871
|
-
var keySystem = _ref.keySystem,
|
21872
|
-
mediaKeys = _ref.mediaKeys;
|
21873
|
-
_this.throwIfDestroyed();
|
21874
|
-
var decryptdata = new LevelKey('ISO-23001-7', keyIdHex, (_keySystemToKeySystem = keySystemDomainToKeySystemFormat(keySystem)) != null ? _keySystemToKeySystem : '');
|
21875
|
-
decryptdata.pssh = new Uint8Array(initData);
|
21876
|
-
decryptdata.keyId = keyId;
|
21877
|
-
return _this.attemptSetMediaKeys(keySystem, mediaKeys).then(function () {
|
21889
|
+
// "Clear-lead" (misc key not encountered in playlist)
|
21890
|
+
keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = _this.getKeySystemSelectionPromise([keySystemDomain]).then(function (_ref) {
|
21891
|
+
var _keySystemToKeySystem;
|
21892
|
+
var keySystem = _ref.keySystem,
|
21893
|
+
mediaKeys = _ref.mediaKeys;
|
21878
21894
|
_this.throwIfDestroyed();
|
21879
|
-
var
|
21880
|
-
|
21881
|
-
|
21882
|
-
|
21895
|
+
var decryptdata = new LevelKey('ISO-23001-7', keyIdHex, (_keySystemToKeySystem = keySystemDomainToKeySystemFormat(keySystem)) != null ? _keySystemToKeySystem : '');
|
21896
|
+
decryptdata.pssh = new Uint8Array(initData);
|
21897
|
+
decryptdata.keyId = keyId;
|
21898
|
+
return _this.attemptSetMediaKeys(keySystem, mediaKeys).then(function () {
|
21899
|
+
_this.throwIfDestroyed();
|
21900
|
+
var keySessionContext = _this.createMediaKeySessionContext({
|
21901
|
+
decryptdata: decryptdata,
|
21902
|
+
keySystem: keySystem,
|
21903
|
+
mediaKeys: mediaKeys
|
21904
|
+
});
|
21905
|
+
return _this.generateRequestWithPreferredKeySession(keySessionContext, initDataType, initData, 'encrypted-event-no-match');
|
21883
21906
|
});
|
21884
|
-
return _this.generateRequestWithPreferredKeySession(keySessionContext, initDataType, initData, 'encrypted-event-no-match');
|
21885
21907
|
});
|
21886
|
-
|
21887
|
-
|
21888
|
-
|
21889
|
-
}
|
21890
|
-
}
|
21908
|
+
keySessionContextPromise.catch(function (error) {
|
21909
|
+
return _this.handleError(error);
|
21910
|
+
});
|
21911
|
+
}
|
21912
|
+
});
|
21891
21913
|
};
|
21892
21914
|
_this.onWaitingForKey = function (event) {
|
21893
21915
|
_this.log("\"" + event.type + "\" event");
|
@@ -33472,7 +33494,7 @@
|
|
33472
33494
|
};
|
33473
33495
|
_proto.load = function load(frag) {
|
33474
33496
|
var _this2 = this;
|
33475
|
-
if (!frag.decryptdata && frag.encrypted && this.emeController) {
|
33497
|
+
if (!frag.decryptdata && frag.encrypted && this.emeController && this.config.emeEnabled) {
|
33476
33498
|
// Multiple keys, but none selected, resolve in eme-controller
|
33477
33499
|
return this.emeController.selectKeySystemFormat(frag).then(function (keySystemFormat) {
|
33478
33500
|
return _this2.loadInternal(frag, keySystemFormat);
|