parseElement() {
    const id = this.parseId_();

    // Parse the element's size.
    const vint = this.parseVint_();
    let size;
    if (shaka.dash.EbmlParser.isDynamicSizeValue_(vint)) {
      // If this has an unknown size, assume that it takes up the rest of the
      // data.
      size = this.dataView_.byteLength - this.reader_.getPosition();
    } else {
      size = shaka.dash.EbmlParser.getVintValue_(vint);
    }

    // Note that if the element's size is larger than the buffer then we are
    // parsing a "partial element". This may occur if for example we are
    // parsing the beginning of some WebM container data, but our buffer does
    // not contain the entire WebM container data.
    const elementSize =
        this.reader_.getPosition() + size <= this.dataView_.byteLength ?
        size :
        this.dataView_.byteLength - this.reader_.getPosition();

    const dataView = shaka.util.BufferUtils.toDataView(
        this.dataView_, this.reader_.getPosition(), elementSize);

    this.reader_.skip(elementSize);

    return new shaka.util.EbmlElement(id, dataView);
  }
Parses an EBML element from the parser's current position, and advances
the parser.
@return {!shaka.util.EbmlElement} The EBML element.
@see http://matroska.org/technical/specs/rfc/index.html