Skip to content

Commit

Permalink
fix(FEC-7913): Live - player doesn't seek to live edge on resume (#48)
Browse files Browse the repository at this point in the history
* fix(FEC-7913): Live - player doesn't seek to live on resume
  • Loading branch information
yairans authored Feb 15, 2018
1 parent 02e9637 commit 193fea0
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 26 deletions.
24 changes: 19 additions & 5 deletions src/hls-adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,18 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
return this._hls.autoLevelEnabled;
}

/**
* Returns the details of hls level
* @function _getLevelDetails
* @returns {Object} - Level details
* @private
*/
_getLevelDetails(): Object {
const level = this._hls.levels[this._hls.currentLevel] || this._hls.levels[this._hls.nextLevel] || this._hls.levels[this._hls.nextAutoLevel] || this._hls.levels[this._hls.nextLoadLevel];
return level ? level.details : {};
}


/**
* Returns the live edge
* @returns {number} - live edge
Expand All @@ -368,14 +380,16 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
_getLiveEdge(): number {
try {
let liveEdge;
if (this._hls.config.liveSyncDuration) {
if (this._hls.liveSyncPosition) {
liveEdge = this._hls.liveSyncPosition;
} else if (this._hls.config.liveSyncDuration) {
liveEdge = this._videoElement.duration - this._hls.config.liveSyncDuration;
} else {
liveEdge = this._videoElement.duration - this._hls.config.liveSyncDurationCount * this._hls.levels[0].details.targetduration;
liveEdge = this._videoElement.duration - this._hls.config.liveSyncDurationCount * this._getLevelDetails().targetduration;
}
return liveEdge > 0 ? liveEdge : 0;
return liveEdge > 0 ? liveEdge : this._videoElement.duration;
} catch (e) {
return NaN;
return this._videoElement.duration;
}
}

Expand All @@ -401,7 +415,7 @@ export default class HlsAdapter extends BaseMediaSourceAdapter {
*/
isLive(): boolean {
try {
return this._hls.levels[0].details.live;
return this._getLevelDetails().live;
} catch (e) {
return false;
}
Expand Down
25 changes: 4 additions & 21 deletions test/src/hls-adapter.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -551,32 +551,15 @@ describe('HlsAdapter Instance - _getLiveEdge', function () {
});
});

it('should return live edge for liveSyncDuration = 60', (done) => {
config.playback.options.html5.hls.liveSyncDuration = 60;
it('should return live edge', (done) => {
hlsAdapterInstance = HlsAdapter.createAdapter(video, liveSource, config);
hlsAdapterInstance.load().then(() => {
hlsAdapterInstance._videoElement.addEventListener('durationchange', () => {
if (video.duration > 60) {
hlsAdapterInstance._getLiveEdge().should.be.equal(video.duration - 60);
if (hlsAdapterInstance._hls.liveSyncPosition) {
hlsAdapterInstance._getLiveEdge().should.be.equal(hlsAdapterInstance._hls.liveSyncPosition);
done();
} else {
hlsAdapterInstance._getLiveEdge().should.be.equal(0);
}
});
});
});

it('should return live edge for liveSyncDurationCount = 5', (done) => {
config.playback.options.html5.hls.liveSyncDurationCount = 5;
hlsAdapterInstance = HlsAdapter.createAdapter(video, liveSource, config);
hlsAdapterInstance.load().then(() => {
hlsAdapterInstance._videoElement.addEventListener('durationchange', () => {
let delay = 5 * hlsAdapterInstance._hls.levels[0].details.targetduration;
if (video.duration > delay) {
hlsAdapterInstance._getLiveEdge().should.be.equal(video.duration - delay);
done();
} else {
hlsAdapterInstance._getLiveEdge().should.be.equal(0);
hlsAdapterInstance._getLiveEdge().should.be.equal(video.duration);
}
});
});
Expand Down

0 comments on commit 193fea0

Please sign in to comment.