mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update components
This commit is contained in:
parent
d004fd3960
commit
2fa1b14785
15 changed files with 179 additions and 86 deletions
|
@ -11,7 +11,7 @@ import LevelHelper from '../helper/level-helper';
|
|||
import {ErrorTypes, ErrorDetails} from '../errors';
|
||||
|
||||
const State = {
|
||||
ERROR : 'ERROR',
|
||||
STOPPED : 'STOPPED',
|
||||
STARTING : 'STARTING',
|
||||
IDLE : 'IDLE',
|
||||
PAUSED : 'PAUSED',
|
||||
|
@ -21,7 +21,8 @@ const State = {
|
|||
WAITING_LEVEL : 'WAITING_LEVEL',
|
||||
PARSING : 'PARSING',
|
||||
PARSED : 'PARSED',
|
||||
ENDED : 'ENDED'
|
||||
ENDED : 'ENDED',
|
||||
ERROR : 'ERROR'
|
||||
};
|
||||
|
||||
class StreamController extends EventHandler {
|
||||
|
@ -30,6 +31,7 @@ class StreamController extends EventHandler {
|
|||
super(hls,
|
||||
Event.MEDIA_ATTACHED,
|
||||
Event.MEDIA_DETACHING,
|
||||
Event.MANIFEST_LOADING,
|
||||
Event.MANIFEST_PARSED,
|
||||
Event.LEVEL_LOADED,
|
||||
Event.KEY_LOADED,
|
||||
|
@ -48,17 +50,23 @@ class StreamController extends EventHandler {
|
|||
}
|
||||
|
||||
destroy() {
|
||||
this.stop();
|
||||
this.stopLoad();
|
||||
if (this.timer) {
|
||||
clearInterval(this.timer);
|
||||
this.timer = null;
|
||||
}
|
||||
EventHandler.prototype.destroy.call(this);
|
||||
this.state = State.IDLE;
|
||||
this.state = State.STOPPED;
|
||||
}
|
||||
|
||||
startLoad() {
|
||||
startLoad(startPosition=0) {
|
||||
if (this.levels) {
|
||||
var media = this.media, lastCurrentTime = this.lastCurrentTime;
|
||||
this.stop();
|
||||
this.stopLoad();
|
||||
this.demuxer = new Demuxer(this.hls);
|
||||
this.timer = setInterval(this.ontick, 100);
|
||||
if (!this.timer) {
|
||||
this.timer = setInterval(this.ontick, 100);
|
||||
}
|
||||
this.level = -1;
|
||||
this.fragLoadError = 0;
|
||||
if (media && lastCurrentTime) {
|
||||
|
@ -69,19 +77,18 @@ class StreamController extends EventHandler {
|
|||
}
|
||||
this.state = State.IDLE;
|
||||
} else {
|
||||
this.lastCurrentTime = this.startPosition ? this.startPosition : 0;
|
||||
this.lastCurrentTime = this.startPosition ? this.startPosition : startPosition;
|
||||
this.state = State.STARTING;
|
||||
}
|
||||
this.nextLoadPosition = this.startPosition = this.lastCurrentTime;
|
||||
this.tick();
|
||||
} else {
|
||||
logger.warn('cannot start loading as manifest not parsed yet');
|
||||
this.state = State.STOPPED;
|
||||
}
|
||||
}
|
||||
|
||||
stop() {
|
||||
this.bufferRange = [];
|
||||
this.stalled = false;
|
||||
stopLoad() {
|
||||
var frag = this.fragCurrent;
|
||||
if (frag) {
|
||||
if (frag.loader) {
|
||||
|
@ -90,16 +97,11 @@ class StreamController extends EventHandler {
|
|||
this.fragCurrent = null;
|
||||
}
|
||||
this.fragPrevious = null;
|
||||
logger.log('trigger BUFFER_RESET');
|
||||
this.hls.trigger(Event.BUFFER_RESET);
|
||||
if (this.timer) {
|
||||
clearInterval(this.timer);
|
||||
this.timer = null;
|
||||
}
|
||||
if (this.demuxer) {
|
||||
this.demuxer.destroy();
|
||||
this.demuxer = null;
|
||||
}
|
||||
this.state = State.STOPPED;
|
||||
}
|
||||
|
||||
tick() {
|
||||
|
@ -703,7 +705,7 @@ class StreamController extends EventHandler {
|
|||
}
|
||||
this.media = null;
|
||||
this.loadedmetadata = false;
|
||||
this.stop();
|
||||
this.stopLoad();
|
||||
}
|
||||
|
||||
onMediaSeeking() {
|
||||
|
@ -750,6 +752,14 @@ class StreamController extends EventHandler {
|
|||
}
|
||||
|
||||
|
||||
onManifestLoading() {
|
||||
// reset buffer on manifest loading
|
||||
logger.log('trigger BUFFER_RESET');
|
||||
this.hls.trigger(Event.BUFFER_RESET);
|
||||
this.bufferRange = [];
|
||||
this.stalled = false;
|
||||
}
|
||||
|
||||
onManifestParsed(data) {
|
||||
var aac = false, heaac = false, codec;
|
||||
data.levels.forEach(level => {
|
||||
|
@ -1111,6 +1121,7 @@ _checkBuffer() {
|
|||
|
||||
if (this.stalled && playheadMoving) {
|
||||
this.stalled = false;
|
||||
logger.log(`playback not stuck anymore @${currentTime}`);
|
||||
}
|
||||
// check buffer upfront
|
||||
// if less than 200ms is buffered, and media is expected to play but playhead is not moving,
|
||||
|
@ -1121,8 +1132,8 @@ _checkBuffer() {
|
|||
jumpThreshold = 0;
|
||||
} else {
|
||||
// playhead not moving AND media expected to play
|
||||
logger.log(`playback seems stuck @${currentTime}`);
|
||||
if(!this.stalled) {
|
||||
logger.log(`playback seems stuck @${currentTime}`);
|
||||
this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: false});
|
||||
this.stalled = true;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue