getConfiguration(forStorage = false) {
    const config = /** @type {shaka.extern.PlayerConfiguration} */(
      {drm: {advanced: {}}, manifest: {dash: {}, hls: {}}, streaming: {}});

    if (this.extraConfig) {
      for (const key in this.extraConfig) {
        config[key] = this.extraConfig[key];
      }
    }

    let licenseServers = this.licenseServers;
    // PR license servers may require a different URL for offline.
    if (forStorage && this.offlineLicenseServers.size) {
      licenseServers = this.offlineLicenseServers;
    }

    if (licenseServers.size) {
      config.drm.servers = config.drm.servers || {};
      licenseServers.forEach((value, key) => {
        config.drm.servers[key] = value;
        if (this.certificateUri) {
          if (!config.drm.advanced[key]) {
            config.drm.advanced[key] =
                ShakaDemoAssetInfo.defaultAdvancedDrmConfig();
            config.drm.advanced[key].serverCertificateUri =
                this.certificateUri;
          }
        }
      });
    }

    if (this.clearKeys.size) {
      config.drm.clearKeys = config.drm.clearKeys || {};
      this.clearKeys.forEach((value, key) => {
        config.drm.clearKeys[key] = value;
      });
    }

    if (this.features.includes(shakaAssets.Feature.LOW_LATENCY)) {
      config.streaming.lowLatencyMode = true;
    }

    // Windows Edge only support persistent licenses with
    // `com.microsoft.playready.recommendation` keySystem.
    if (forStorage &&
        navigator.userAgent.match(/Edge?\//) &&
        navigator.platform &&
        navigator.platform.toLowerCase().includes('win32')) {
      config.drm.keySystemsMapping = {
        'com.microsoft.playready': 'com.microsoft.playready.recommendation',
      };
    }

    return config;
  }
Gets the configuration object for the asset.

@param {boolean=} forStorage
@return {!shaka.extern.PlayerConfiguration}