diff --git a/src/hls-adapter.ts b/src/hls-adapter.ts index 543a12d..1bd26e9 100644 --- a/src/hls-adapter.ts +++ b/src/hls-adapter.ts @@ -126,6 +126,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter { private _nativeTextTracksMap: any = {}; private _lastLoadedFragSN: number = -1; private _sameFragSNLoadedCount: number = 0; + private _waitForSubtitleLoad: boolean = true; /** * an object containing all the events we bind and unbind to. * @member {Object} - _adapterEventsBindings @@ -791,18 +792,27 @@ export default class HlsAdapter extends BaseMediaSourceAdapter { this._onTrackChanged(textTrack); } + private _onSubtitleFragProcessed(): void { + this._hls.subtitleTrack = -1; + this._waitForSubtitleLoad = false; + this._hls.off(Hlsjs.Events.SUBTITLE_FRAG_PROCESSED, this._onSubtitleFragProcessed, this._hls); + } + /** Hide the text track * @function hideTextTrack * @returns {void} * @public */ public hideTextTrack(): void { - if (this._hls) { - if (this._hls.subtitleTracks.length) { - this._hls.subtitleTrack = -1; - } else { - this.disableNativeTextTracks(); - } + if (!this._hls){ + return; + } + if (!this._hls.subtitleTracks.length) { + this.disableNativeTextTracks(); + } else if (this._waitForSubtitleLoad){ + this._hls.on(Hlsjs.Events.SUBTITLE_FRAG_PROCESSED, this. _onSubtitleFragProcessed, this._hls) + } else { + this._hls.subtitleTrack = -1; } } @@ -1244,6 +1254,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter { for (const [event, callback] of Object.entries<(...parms: any) => any>(this._adapterEventsBindings)) { this._hls.off(event as keyof HlsListeners, callback); } + this._hls.off(Hlsjs.Events.SUBTITLE_FRAG_PROCESSED, this._onSubtitleFragProcessed, this._hls); this._videoElement.textTracks.onaddtrack = null; this._onRecoveredCallback = null; if (this._eventManager) {