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
beae29d407
commit
b0d117ad5b
16 changed files with 800 additions and 382 deletions
77
dashboard-ui/bower_components/hls.js/src/helper/buffer-helper.js
vendored
Normal file
77
dashboard-ui/bower_components/hls.js/src/helper/buffer-helper.js
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* Buffer Helper class, providing methods dealing buffer length retrieval
|
||||
*/
|
||||
|
||||
|
||||
class BufferHelper {
|
||||
|
||||
static bufferInfo(media, pos,maxHoleDuration) {
|
||||
if (media) {
|
||||
var vbuffered = media.buffered, buffered = [],i;
|
||||
for (i = 0; i < vbuffered.length; i++) {
|
||||
buffered.push({start: vbuffered.start(i), end: vbuffered.end(i)});
|
||||
}
|
||||
return this.bufferedInfo(buffered,pos,maxHoleDuration);
|
||||
} else {
|
||||
return {len: 0, start: 0, end: 0, nextStart : undefined} ;
|
||||
}
|
||||
}
|
||||
|
||||
static bufferedInfo(buffered,pos,maxHoleDuration) {
|
||||
var buffered2 = [],
|
||||
// bufferStart and bufferEnd are buffer boundaries around current video position
|
||||
bufferLen,bufferStart, bufferEnd,bufferStartNext,i;
|
||||
// sort on buffer.start/smaller end (IE does not always return sorted buffered range)
|
||||
buffered.sort(function (a, b) {
|
||||
var diff = a.start - b.start;
|
||||
if (diff) {
|
||||
return diff;
|
||||
} else {
|
||||
return b.end - a.end;
|
||||
}
|
||||
});
|
||||
// there might be some small holes between buffer time range
|
||||
// consider that holes smaller than maxHoleDuration are irrelevant and build another
|
||||
// buffer time range representations that discards those holes
|
||||
for (i = 0; i < buffered.length; i++) {
|
||||
var buf2len = buffered2.length;
|
||||
if(buf2len) {
|
||||
var buf2end = buffered2[buf2len - 1].end;
|
||||
// if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)
|
||||
if((buffered[i].start - buf2end) < maxHoleDuration) {
|
||||
// merge overlapping time ranges
|
||||
// update lastRange.end only if smaller than item.end
|
||||
// e.g. [ 1, 15] with [ 2,8] => [ 1,15] (no need to modify lastRange.end)
|
||||
// whereas [ 1, 8] with [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])
|
||||
if(buffered[i].end > buf2end) {
|
||||
buffered2[buf2len - 1].end = buffered[i].end;
|
||||
}
|
||||
} else {
|
||||
// big hole
|
||||
buffered2.push(buffered[i]);
|
||||
}
|
||||
} else {
|
||||
// first value
|
||||
buffered2.push(buffered[i]);
|
||||
}
|
||||
}
|
||||
for (i = 0, bufferLen = 0, bufferStart = bufferEnd = pos; i < buffered2.length; i++) {
|
||||
var start = buffered2[i].start,
|
||||
end = buffered2[i].end;
|
||||
//logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));
|
||||
if ((pos + maxHoleDuration) >= start && pos < end) {
|
||||
// play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length
|
||||
bufferStart = start;
|
||||
bufferEnd = end;
|
||||
bufferLen = bufferEnd - pos;
|
||||
} else if ((pos + maxHoleDuration) < start) {
|
||||
bufferStartNext = start;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return {len: bufferLen, start: bufferStart, end: bufferEnd, nextStart : bufferStartNext};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default BufferHelper;
|
Loading…
Add table
Add a link
Reference in a new issue