dispatchFetch(reference, stream) {
    // We need to store the data, because streamDataCallback_ might not be
    // available when you start getting the first data.
    let buffered = new Uint8Array(0);
    this.operation_ = this.fetchDispatcher_(
        reference, stream, async (data) => {
          if (buffered.byteLength > 0) {
            buffered = shaka.util.Uint8ArrayUtils.concat(buffered, data);
          } else {
            buffered = data;
          }
          if (this.streamDataCallback_) {
            await this.streamDataCallback_(buffered);
            buffered = new Uint8Array(0);
          }
        });
    return this.operation_.promise.catch((e) => {
      // Ignore OPERATION_ABORTED errors.
      if (e instanceof shaka.util.Error &&
          e.code == shaka.util.Error.Code.OPERATION_ABORTED) {
        return Promise.resolve();
      }
      // Continue to surface other errors.
      return Promise.reject(e);
    });
  }
Fetch segments

@param {!(shaka.media.SegmentReference|
          shaka.media.InitSegmentReference)} reference
@param {!shaka.extern.Stream} stream
@return {!Promise}
@public