createStreamInfoFromVariantTags_(tags, allCodecs, type) {
    const streamId = this.globalId_++;
    const verbatimMediaPlaylistUris = [];
    for (const tag of tags) {
      goog.asserts.assert(tag.name == 'EXT-X-STREAM-INF',
          'Should only be called on variant tags!');
      const uri = tag.getRequiredAttrValue('URI');
      const pathwayId = tag.getAttributeValue('PATHWAY-ID');
      if (this.contentSteeringManager_ && pathwayId) {
        this.contentSteeringManager_.addLocation(streamId, pathwayId, uri);
      }
      verbatimMediaPlaylistUris.push(uri);
    }

    const key = verbatimMediaPlaylistUris.sort().join(',') +
        allCodecs.sort().join(',');
    if (this.uriToStreamInfosMap_.has(key)) {
      return this.uriToStreamInfosMap_.get(key);
    }

    const name = verbatimMediaPlaylistUris.join(',');
    const closedCaptions = this.getClosedCaptions_(tags[0], type);
    const codecs = shaka.util.ManifestParserUtils.guessCodecs(type, allCodecs);
    const streamInfo = this.createStreamInfo_(
        streamId, verbatimMediaPlaylistUris,
        codecs, type, /* language= */ null, /* primary= */ false,
        name, /* channelCount= */ null, closedCaptions,
        /* characteristics= */ null, /* forced= */ false,
        /* sampleRate= */ null, /* spatialAudio= */ false);

    this.uriToStreamInfosMap_.set(key, streamInfo);
    return streamInfo;
  }
Parse an EXT-X-STREAM-INF media tag into a Stream object.

@param {!Array<!shaka.hls.Tag>} tags
@param {!Array<string>} allCodecs
@param {string} type
@return {!shaka.hls.HlsParser.StreamInfo}
@private