constructor(
      initSegmentUri, mdhdOffset, segmentTemplateUri, tfdtOffset,
      segmentDuration, broadcastStartTime, availabilityStartTime,
      timeShiftBufferDepth) {
    goog.asserts.assert(mdhdOffset >= 0, 'mdhd offset invalid');
    goog.asserts.assert(tfdtOffset >= 0, 'tfdt offset invalid');
    goog.asserts.assert(segmentDuration > 0, 'segment duration invalid');
    goog.asserts.assert(
        broadcastStartTime >= 0, 'broadcast start time invalid');
    goog.asserts.assert(
        availabilityStartTime >= 0, 'availability start time invalid');
    goog.asserts.assert(
        timeShiftBufferDepth >= 0, 'time shift buffer depth invalid');
    goog.asserts.assert(
        broadcastStartTime >= availabilityStartTime,
        'broadcast start time before availability start time');

    /** @private {string} */
    this.initSegmentUri_ = initSegmentUri;

    /** @private {number} */
    this.mdhdOffset_ = mdhdOffset;

    /** @private {string} */
    this.segmentTemplateUri_ = segmentTemplateUri;

    /** @private {number} */
    this.tfdtOffset_ = tfdtOffset;

    /** @private {number} */
    this.segmentDuration_ = segmentDuration;

    /** @private {number} */
    this.broadcastStartTime_ = broadcastStartTime;

    /** @private {number} */
    this.availabilityStartTime_ = availabilityStartTime;

    /** @private {number} */
    this.timeShiftBufferDepth_ = timeShiftBufferDepth;

    /** @private {number} */
    this.timescale_ = 1;

    /** @private {ArrayBuffer} */
    this.initSegment_ = null;

    /** @private {ArrayBuffer} */
    this.segmentTemplate_ = null;
  }
@param {string} initSegmentUri The URI of the initialization segment.
@param {number} mdhdOffset The offset of the initialization segment's
  mdhd box.
@param {string} segmentTemplateUri The URI of the segment to loop.
@param {number} tfdtOffset The offset of the segment's TFDT box.
@param {number} segmentDuration The duration of a single segment in
  seconds.
@param {number} broadcastStartTime The wall-clock time in seconds when the
  stream began or will begin to broadcast.
@param {number} availabilityStartTime The wall-clock time in seconds when
  the stream began or will begin to be available. |broadcastStartTime| and
  |availabilityStartTime| should typically be equal; however,
  |availabilityStartTime| may be less than |broadcastStartTime| to
  align the stream if the Period's first segment's first timestamp does not
  equal 0.
@param {number} timeShiftBufferDepth The duration of the stream's
  time-shift buffer in seconds.