_videoFrameCallback() {
        this._willUpdate = true;
        if(!this.source) {
            // wait for source to load
            const waitForSource = this.renderer.nextRender.add(() => {
                if(this.source) {
                    // source is ready, stop executing the callback
                    waitForSource.keep = false;

                    this.source.requestVideoFrameCallback(() => this._videoFrameCallback());
                }
            }, true);
        } else {
          this.source.requestVideoFrameCallback(() => this._videoFrameCallback());
        }
    }
This uses the requestVideoFrameCallback API to update the texture each time a new frame is displayed
*