notifySegments(references) {
    if (references.length == 0) {
      return;
    }

    let firstReferenceStartTime = references[0].startTime;
    let lastReferenceEndTime = references[0].endTime;

    // Date.now() is in milliseconds, from which we compute "now" in seconds.
    const now = (Date.now() + this.clockOffset_) / 1000.0;

    for (const reference of references) {
      // Exclude segments that are in the "future".
      if (now < reference.startTime) {
        continue;
      }

      firstReferenceStartTime = Math.min(
          firstReferenceStartTime, reference.startTime);
      lastReferenceEndTime = Math.max(lastReferenceEndTime, reference.endTime);
      this.maxSegmentDuration_ = Math.max(
          this.maxSegmentDuration_, reference.endTime - reference.startTime);
    }
    this.notifyMinSegmentStartTime(firstReferenceStartTime);
    this.maxSegmentEndTime_ =
        Math.max(this.maxSegmentEndTime_, lastReferenceEndTime);

    if (this.presentationStartTime_ != null && this.autoCorrectDrift_ &&
        !this.startTimeLocked_) {
      // Since we have explicit segment end times, calculate a presentation
      // start based on them.  This start time accounts for drift.
      this.presentationStartTime_ =
          now - this.maxSegmentEndTime_ - this.maxSegmentDuration_;
    }

    shaka.log.v1('notifySegments:',
        'maxSegmentDuration=' + this.maxSegmentDuration_);
  }
Gives PresentationTimeline an array of segments so it can size and position
the segment availability window, and account for missing segment
information.  These segments do not necessarily need to all be from the
same stream.

@param {!Array<!shaka.media.SegmentReference>} references
@export