Skip to content

Commit

Permalink
fix(FEC-10427): remove cues for native external subtitles (#495)
Browse files Browse the repository at this point in the history
* fix(FEC-10427): remove cues from external track

Issue: safari keeps the cues from extarnal text tracks that was active and keeps playing it on the next media.
Solution: remove the cues from external text tracks.

* set prefix instead cues removal

* Update external-captions-handler.js

* Update external-captions-handler.js

* Update external-captions-handler.js

* remove cues as well

* Update external-captions-handler.js

* Update external-captions-handler.js
  • Loading branch information
Yuvalke authored Oct 28, 2020
1 parent 3a9e305 commit b95cc5b
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/player.js
Original file line number Diff line number Diff line change
Expand Up @@ -574,7 +574,8 @@ export default class Player extends FakeEventTarget {
if (this._reset) return;
this.pause();
//make sure all services are reset before engine and engine attributes are reset
this._externalCaptionsHandler.reset();
// $FlowFixMe
this._externalCaptionsHandler.reset(this._tracks.filter(track => track.external));
this._posterManager.reset();
this._stateManager.reset();
this._config.sources = {};
Expand Down
21 changes: 20 additions & 1 deletion src/track/external-captions-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -232,11 +232,13 @@ class ExternalCaptionsHandler extends FakeEventTarget {

/**
* resets the handler
* @param {Array<TextTrack>} externalTracks - external tracks
* @returns {void}
*/
reset(): void {
reset(externalTracks: Array<TextTrack>): void {
this._resetCurrentTrack();
this._textTrackModel = {};
this._resetExternalNativeTextTrack(externalTracks);
this._eventManager.removeAll();
}

Expand Down Expand Up @@ -456,6 +458,23 @@ class ExternalCaptionsHandler extends FakeEventTarget {
return false;
}

/**
* delete cues on reset to avoid usage of the text track on the next media
* @param {Array<TextTrack>} externalTracks - external tracks
* @return {void}
*/
_resetExternalNativeTextTrack(externalTracks: Array<TextTrack>): void {
const videoElement = this._player.getVideoElement();
if (videoElement) {
externalTracks.forEach(externalTrack => {
const track = Array.from(videoElement.textTracks).find(track => track && track.language === externalTrack.language);
if (track && track.cues) {
Object.values(track.cues).forEach(cue => track.removeCue(cue));
}
});
}
}

/**
* adding cues to an existing text element in a video tag
* @param {TextTrack} textTrack - adding cues to an exiting text track element
Expand Down

0 comments on commit b95cc5b

Please sign in to comment.