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 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.10876");
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.10876";
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
- var keyId;
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 psshInfo = psshResults.filter(function (pssh) {
21803
- var keySystem = pssh.systemId ? keySystemIdToKeySystemDomain(pssh.systemId) : null;
21804
- return keySystem ? keySystems.indexOf(keySystem) > -1 : false;
21805
- })[0];
21806
- if (!psshInfo) {
21807
- if (psshResults.length === 0 || psshResults.some(function (pssh) {
21808
- return !pssh.systemId;
21809
- })) {
21810
- _this.warn(logMessage + " contains incomplete or invalid pssh data");
21811
- } else {
21812
- _this.log("ignoring " + logMessage + " for " + psshResults.map(function (pssh) {
21813
- return keySystemIdToKeySystemDomain(pssh.systemId);
21814
- }).join(',') + " pssh data in favor of playlist keys");
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
- return;
21817
- }
21818
- keySystemDomain = keySystemIdToKeySystemDomain(psshInfo.systemId);
21819
- if (psshInfo.version === 0 && psshInfo.data) {
21820
- if (keySystemDomain === KeySystems.WIDEVINE) {
21821
- var offset = psshInfo.data.length - 22;
21822
- keyId = psshInfo.data.subarray(offset, offset + 16);
21823
- } else if (keySystemDomain === KeySystems.PLAYREADY) {
21824
- keyId = parsePlayReadyWRM(psshInfo.data);
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
- if (!keySystemDomain || !keyId) {
21829
- return;
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
- var oldKeyIdHex = Hex.hexDump(decryptdata.keyId);
21844
- if (keyIdHex === oldKeyIdHex || decryptdata.uri.replace(/-/g, '').indexOf(keyIdHex) !== -1) {
21845
- keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];
21846
- if (decryptdata.pssh) {
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
- delete keyIdToKeySessionPromise[oldKeyIdHex];
21850
- decryptdata.pssh = new Uint8Array(initData);
21851
- decryptdata.keyId = keyId;
21852
- keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(function () {
21853
- return _this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, 'encrypted-event-key-match');
21854
- });
21855
- keySessionContextPromise.catch(function (error) {
21856
- return _this.handleError(error);
21857
- });
21858
- return 1; // break
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
- _ret;
21862
- for (var i = 0; i < mediaKeySessions.length; i++) {
21863
- _ret = _loop();
21864
- if (_ret === 0) continue;
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 keySessionContext = _this.createMediaKeySessionContext({
21880
- decryptdata: decryptdata,
21881
- keySystem: keySystem,
21882
- mediaKeys: mediaKeys
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
- keySessionContextPromise.catch(function (error) {
21888
- return _this.handleError(error);
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);