static parseAes128_(element) {
    // Check if the Web Crypto API is available.
    if (!window.crypto || !window.crypto.subtle) {
      shaka.log.alwaysWarn('Web Crypto API is not available to decrypt ' +
          'AES-128. (Web Crypto only exists in secure origins like https)');
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.NO_WEB_CRYPTO_API);
    }

    const namespace = 'urn:mpeg:dash:schema:sea:2012';
    const segmentEncryption = shaka.util.TXml.findChildNS(
        element.node, namespace, 'SegmentEncryption');

    if (!segmentEncryption) {
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);
    }

    const aesSchemeIdUri = 'urn:mpeg:dash:sea:aes128-cbc:2013';
    const segmentEncryptionSchemeIdUri =
        segmentEncryption.attributes['schemeIdUri'];
    if (segmentEncryptionSchemeIdUri != aesSchemeIdUri) {
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);
    }

    const cryptoPeriod = shaka.util.TXml.findChildNS(
        element.node, namespace, 'CryptoPeriod');

    if (!cryptoPeriod) {
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);
    }

    const ivHex = cryptoPeriod.attributes['IV'];
    const keyUri = shaka.util.StringUtils.htmlUnescape(
        cryptoPeriod.attributes['keyUriTemplate']);
    if (!ivHex || !keyUri) {
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.DASH_UNSUPPORTED_AES_128);
    }

    // Exclude 0x at the start of string.
    const iv = shaka.util.Uint8ArrayUtils.fromHex(ivHex.substr(2));
    if (iv.byteLength != 16) {
      throw new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.MANIFEST,
          shaka.util.Error.Code.AES_128_INVALID_IV_LENGTH);
    }

    return {
      keyUri,
      iv,
    };
  }
Parses the given AES-128 ContentProtection element.

@param {shaka.dash.ContentProtection.Element} element
@return {?shaka.dash.ContentProtection.Aes128Info}
@private