Skip to content

Commit

Permalink
Merge pull request #3063 from netTrekfd/bugfix/subtitle-loading-after…
Browse files Browse the repository at this point in the history
…-stopload

Bugfix for subtitle loading after hls.stopload() was used
  • Loading branch information
robwalch committed Oct 8, 2020
2 parents b5b2889 + b93c938 commit c579fea
Showing 1 changed file with 41 additions and 1 deletion.
42 changes: 41 additions & 1 deletion src/controller/subtitle-stream-controller.js
Expand Up @@ -40,6 +40,18 @@ export class SubtitleStreamController extends BaseStreamController {
this._onMediaSeeking = this.onMediaSeeking.bind(this);
}

startLoad () {
this.stopLoad();
this.state = State.IDLE;

// Check if we already have a track with necessary details to load fragments
const currentTrack = this.tracks[this.currentTrackId];
if (currentTrack && currentTrack.details) {
this.setInterval(TICK_INTERVAL);
this.tick();
}
}

onSubtitleFragProcessed (data) {
const { frag, success } = data;
this.fragPrevious = frag;
Expand Down Expand Up @@ -103,6 +115,11 @@ export class SubtitleStreamController extends BaseStreamController {
if (!frag || frag.type !== 'subtitle') {
return;
}

if (this.fragCurrent && this.fragCurrent.loader) {
this.fragCurrent.loader.abort();
}

this.state = State.IDLE;
}

Expand Down Expand Up @@ -237,6 +254,7 @@ export class SubtitleStreamController extends BaseStreamController {

stopLoad () {
this.lastAVStart = 0;
this.fragPrevious = null;
super.stopLoad();
}

Expand All @@ -245,6 +263,28 @@ export class SubtitleStreamController extends BaseStreamController {
}

onMediaSeeking () {
this.fragPrevious = null;
if (this.fragCurrent) {
const currentTime = this.media ? this.media.currentTime : null;
const tolerance = this.config.maxFragLookUpTolerance;
const fragStartOffset = this.fragCurrent.start - tolerance;
const fragEndOffset = this.fragCurrent.start + this.fragCurrent.duration + tolerance;

// check if position will be out of currently loaded frag range after seeking : if out, cancel frag load, if in, don't do anything
if (currentTime < fragStartOffset || currentTime > fragEndOffset) {
if (this.fragCurrent.loader) {
this.fragCurrent.loader.abort();
}

this.fragmentTracker.removeFragment(this.fragCurrent);
this.fragCurrent = null;
this.fragPrevious = null;

// switch to IDLE state to load new fragment
this.state = State.IDLE;

// speed up things
this.tick();
}
}
}
}

0 comments on commit c579fea

Please sign in to comment.