async preload(assetUri, startTime = null, mimeType, config) {
    goog.asserts.assert(this.config_, 'Config must not be null!');
    const preloadConfig = this.defaultConfig_();
    shaka.util.PlayerConfiguration.mergeConfigObjects(
        preloadConfig, config || this.config_, this.defaultConfig_());
    const preloadManager = await this.preloadInner_(
        assetUri, startTime, mimeType, /* standardLoad= */ false,
        preloadConfig);
    if (!preloadManager) {
      this.onError_(new shaka.util.Error(
          shaka.util.Error.Severity.CRITICAL,
          shaka.util.Error.Category.PLAYER,
          shaka.util.Error.Code.SRC_EQUALS_PRELOAD_NOT_SUPPORTED));
    } else {
      preloadManager.start();
    }
    return preloadManager;
  }
Starts to preload a given asset, and returns a PreloadManager object that
represents that preloading process.
The PreloadManager will load the manifest for that asset, as well as the
initialization segment. It will not preload anything more than that;
this feature is intended for reducing start-time latency, not for fully
downloading assets before playing them (for that, use
|shaka.offline.Storage|).
You can pass that PreloadManager object in to the |load| method on this
Player instance to finish loading that particular asset, or you can call
the |destroy| method on the manager if the preload is no longer necessary.
If this returns null rather than a PreloadManager, that indicates that the
asset must be played with src=, which cannot be preloaded.

@param {string} assetUri
@param {?number|Date=} startTime
   When <code>startTime</code> is <code>null</code> or
   <code>undefined</code>, playback will start at the default start time (0
   for VOD and liveEdge for LIVE).
@param {?string=} mimeType
@param {?shaka.extern.PlayerConfiguration=} config
@return {!Promise<?shaka.media.PreloadManager>}
@export