async destroy() {
    if (this.eventManager_) {
      this.eventManager_.release();
      this.eventManager_ = null;
    }

    const waitFor = [];
    if (this.player_) {
      waitFor.push(this.player_.destroy());
      this.player_ = null;
    }

    if (this.pollTimer_) {
      this.pollTimer_.stop();
      this.pollTimer_ = null;
    }

    this.video_ = null;
    this.targets_ = null;
    this.appDataCallback_ = null;
    this.isConnected_ = false;
    this.isIdle_ = true;
    this.shakaBus_ = null;
    this.genericBus_ = null;

    // FakeEventTarget implements IReleasable
    super.release();

    await Promise.all(waitFor);

    const manager = cast.receiver.CastReceiverManager.getInstance();
    manager.stop();
  }
Destroys the underlying Player, then terminates the cast receiver app.

@override
@export