1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

updated nuget

This commit is contained in:
Luke Pulverenti 2015-12-22 15:13:28 -05:00
parent 40baf2dcca
commit bfb7cc5ad5
13 changed files with 123 additions and 71 deletions

View file

@ -1,6 +1,6 @@
{ {
"name": "hls.js", "name": "hls.js",
"version": "0.3.14", "version": "0.3.15",
"description": "Media Source Extension - HLS library, by/for Dailymotion", "description": "Media Source Extension - HLS library, by/for Dailymotion",
"homepage": "https://github.com/dailymotion/hls.js", "homepage": "https://github.com/dailymotion/hls.js",
"authors": [ "authors": [
@ -15,11 +15,11 @@
"test", "test",
"tests" "tests"
], ],
"_release": "0.3.14", "_release": "0.3.15",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v0.3.14", "tag": "v0.3.15",
"commit": "1806e59551b0639c50efa348cac92dc41c8a7dea" "commit": "d3ecf55b89063d7ba3bd70800d5839755b0c7e63"
}, },
"_source": "git://github.com/dailymotion/hls.js.git", "_source": "git://github.com/dailymotion/hls.js.git",
"_target": "~0.3.11", "_target": "~0.3.11",

View file

@ -1,6 +1,6 @@
{ {
"name": "hls.js", "name": "hls.js",
"version": "0.3.13", "version": "0.3.15",
"description": "Media Source Extension - HLS library, by/for Dailymotion", "description": "Media Source Extension - HLS library, by/for Dailymotion",
"homepage": "https://github.com/dailymotion/hls.js", "homepage": "https://github.com/dailymotion/hls.js",
"authors": [ "authors": [

View file

@ -472,6 +472,7 @@ $(document).ready(function() {
hls.destroy(); hls.destroy();
break; break;
} }
console.log($("#HlsStatus").text());
} }
if(!stats) stats = {}; if(!stats) stats = {};
// track all errors independently // track all errors independently

View file

@ -532,7 +532,8 @@ var LevelController = (function () {
i, i,
bitrateSet = {}, bitrateSet = {},
videoCodecFound = false, videoCodecFound = false,
audioCodecFound = false; audioCodecFound = false,
hls = this.hls;
// regroup redundant level together // regroup redundant level together
data.levels.forEach(function (level) { data.levels.forEach(function (level) {
@ -575,22 +576,26 @@ var LevelController = (function () {
return (!audioCodec || checkSupported(audioCodec)) && (!videoCodec || checkSupported(videoCodec)); return (!audioCodec || checkSupported(audioCodec)) && (!videoCodec || checkSupported(videoCodec));
}); });
// start bitrate is the first bitrate of the manifest if (levels.length) {
bitrateStart = levels[0].bitrate; // start bitrate is the first bitrate of the manifest
// sort level on bitrate bitrateStart = levels[0].bitrate;
levels.sort(function (a, b) { // sort level on bitrate
return a.bitrate - b.bitrate; levels.sort(function (a, b) {
}); return a.bitrate - b.bitrate;
this._levels = levels; });
// find index of first level in sorted levels this._levels = levels;
for (i = 0; i < levels.length; i++) { // find index of first level in sorted levels
if (levels[i].bitrate === bitrateStart) { for (i = 0; i < levels.length; i++) {
this._firstLevel = i; if (levels[i].bitrate === bitrateStart) {
_utilsLogger.logger.log('manifest loaded,' + levels.length + ' level(s) found, first bitrate:' + bitrateStart); this._firstLevel = i;
break; _utilsLogger.logger.log('manifest loaded,' + levels.length + ' level(s) found, first bitrate:' + bitrateStart);
break;
}
} }
hls.trigger(_events2['default'].MANIFEST_PARSED, { levels: this._levels, firstLevel: this._firstLevel, stats: data.stats });
} else {
hls.trigger(_events2['default'].ERROR, { type: _errors.ErrorTypes.NETWORK_ERROR, details: _errors.ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: hls.url, reason: 'no compatible level found in manifest' });
} }
this.hls.trigger(_events2['default'].MANIFEST_PARSED, { levels: this._levels, firstLevel: this._firstLevel, stats: data.stats });
return; return;
} }
}, { }, {
@ -648,7 +653,8 @@ var LevelController = (function () {
} }
/* try to switch to a redundant stream if any available. /* try to switch to a redundant stream if any available.
* if no redundant stream available, emergency switch down (if in auto mode and current level not 0) * if no redundant stream available, emergency switch down (if in auto mode and current level not 0)
* otherwise, we cannot recover this network error .... * otherwise, we cannot recover this network error ...
* don't raise FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT as fatal, as it is handled by mediaController
*/ */
if (levelId !== undefined) { if (levelId !== undefined) {
level = this._levels[levelId]; level = this._levels[levelId];
@ -664,18 +670,19 @@ var LevelController = (function () {
hls.abrController.nextAutoLevel = 0; hls.abrController.nextAutoLevel = 0;
} else if (level && level.details && level.details.live) { } else if (level && level.details && level.details.live) {
_utilsLogger.logger.warn('level controller,' + details + ' on live stream, discard'); _utilsLogger.logger.warn('level controller,' + details + ' on live stream, discard');
} else { // FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT are handled by mediaController
_utilsLogger.logger.error('cannot recover ' + details + ' error'); } else if (details !== _errors.ErrorDetails.FRAG_LOAD_ERROR && details !== _errors.ErrorDetails.FRAG_LOAD_TIMEOUT) {
this._level = undefined; _utilsLogger.logger.error('cannot recover ' + details + ' error');
// stopping live reloading timer if any this._level = undefined;
if (this.timer) { // stopping live reloading timer if any
clearInterval(this.timer); if (this.timer) {
this.timer = null; clearInterval(this.timer);
this.timer = null;
}
// redispatch same error but with fatal set to true
data.fatal = true;
hls.trigger(event, data);
} }
// redispatch same error but with fatal set to true
data.fatal = true;
hls.trigger(event, data);
}
} }
} }
} }
@ -1811,6 +1818,7 @@ var MSEMediaController = (function () {
this.demuxer.push(data.payload, audioCodec, currentLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata); this.demuxer.push(data.payload, audioCodec, currentLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata);
} }
} }
this.fragLoadError = 0;
} }
}, { }, {
key: 'onInitSegment', key: 'onInitSegment',
@ -1909,6 +1917,24 @@ var MSEMediaController = (function () {
// abort fragment loading on errors // abort fragment loading on errors
case _errors.ErrorDetails.FRAG_LOAD_ERROR: case _errors.ErrorDetails.FRAG_LOAD_ERROR:
case _errors.ErrorDetails.FRAG_LOAD_TIMEOUT: case _errors.ErrorDetails.FRAG_LOAD_TIMEOUT:
var loadError = this.fragLoadError;
if (loadError) {
loadError++;
} else {
loadError = 1;
}
if (loadError <= this.config.fragLoadingMaxRetry) {
this.fragLoadError = loadError;
// retry loading
this.state = State.IDLE;
} else {
_utilsLogger.logger.error('mediaController: ' + data.details + ' reaches max retry, redispatch as fatal ...');
// redispatch same error but with fatal set to true
data.fatal = true;
this.hls.trigger(event, data);
this.state = State.ERROR;
}
break;
case _errors.ErrorDetails.FRAG_LOOP_LOADING_ERROR: case _errors.ErrorDetails.FRAG_LOOP_LOADING_ERROR:
case _errors.ErrorDetails.LEVEL_LOAD_ERROR: case _errors.ErrorDetails.LEVEL_LOAD_ERROR:
case _errors.ErrorDetails.LEVEL_LOAD_TIMEOUT: case _errors.ErrorDetails.LEVEL_LOAD_TIMEOUT:
@ -4756,7 +4782,7 @@ var Hls = (function () {
enableWorker: true, enableWorker: true,
enableSoftwareAES: true, enableSoftwareAES: true,
fragLoadingTimeOut: 20000, fragLoadingTimeOut: 20000,
fragLoadingMaxRetry: 1, fragLoadingMaxRetry: 6,
fragLoadingRetryDelay: 1000, fragLoadingRetryDelay: 1000,
fragLoadingLoopThreshold: 3, fragLoadingLoopThreshold: 3,
manifestLoadingTimeOut: 10000, manifestLoadingTimeOut: 10000,
@ -5048,7 +5074,7 @@ var FragmentLoader = (function () {
this.frag.loaded = 0; this.frag.loaded = 0;
var config = this.hls.config; var config = this.hls.config;
frag.loader = this.loader = typeof config.fLoader !== 'undefined' ? new config.fLoader(config) : new config.loader(config); frag.loader = this.loader = typeof config.fLoader !== 'undefined' ? new config.fLoader(config) : new config.loader(config);
this.loader.load(frag.url, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, config.fragLoadingMaxRetry, config.fragLoadingRetryDelay, this.loadprogress.bind(this), frag); this.loader.load(frag.url, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, 1, config.fragLoadingRetryDelay, this.loadprogress.bind(this), frag);
} }
}, { }, {
key: 'loadsuccess', key: 'loadsuccess',

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
{ {
"name": "hls.js", "name": "hls.js",
"version": "0.3.13", "version": "0.3.15",
"description": "Media Source Extension - HLS library, by/for Dailymotion", "description": "Media Source Extension - HLS library, by/for Dailymotion",
"homepage": "https://github.com/dailymotion/hls.js", "homepage": "https://github.com/dailymotion/hls.js",
"authors": "Guillaume du Pontavice <guillaume.dupontavice@dailymotion.com>", "authors": "Guillaume du Pontavice <guillaume.dupontavice@dailymotion.com>",

View file

@ -32,7 +32,7 @@ class LevelController {
} }
onManifestLoaded(event, data) { onManifestLoaded(event, data) {
var levels0 = [], levels = [], bitrateStart, i, bitrateSet = {}, videoCodecFound = false, audioCodecFound = false; var levels0 = [], levels = [], bitrateStart, i, bitrateSet = {}, videoCodecFound = false, audioCodecFound = false, hls = this.hls;
// regroup redundant level together // regroup redundant level together
data.levels.forEach(level => { data.levels.forEach(level => {
@ -73,22 +73,26 @@ class LevelController {
(!videoCodec || checkSupported(videoCodec)); (!videoCodec || checkSupported(videoCodec));
}); });
// start bitrate is the first bitrate of the manifest if(levels.length) {
bitrateStart = levels[0].bitrate; // start bitrate is the first bitrate of the manifest
// sort level on bitrate bitrateStart = levels[0].bitrate;
levels.sort(function (a, b) { // sort level on bitrate
return a.bitrate - b.bitrate; levels.sort(function (a, b) {
}); return a.bitrate - b.bitrate;
this._levels = levels; });
// find index of first level in sorted levels this._levels = levels;
for (i = 0; i < levels.length; i++) { // find index of first level in sorted levels
if (levels[i].bitrate === bitrateStart) { for (i = 0; i < levels.length; i++) {
this._firstLevel = i; if (levels[i].bitrate === bitrateStart) {
logger.log(`manifest loaded,${levels.length} level(s) found, first bitrate:${bitrateStart}`); this._firstLevel = i;
break; logger.log(`manifest loaded,${levels.length} level(s) found, first bitrate:${bitrateStart}`);
break;
}
} }
hls.trigger(Event.MANIFEST_PARSED, {levels: this._levels, firstLevel: this._firstLevel, stats: data.stats});
} else {
hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: hls.url, reason: 'no compatible level found in manifest'});
} }
this.hls.trigger(Event.MANIFEST_PARSED, {levels: this._levels, firstLevel: this._firstLevel, stats: data.stats});
return; return;
} }
@ -186,7 +190,8 @@ class LevelController {
} }
/* try to switch to a redundant stream if any available. /* try to switch to a redundant stream if any available.
* if no redundant stream available, emergency switch down (if in auto mode and current level not 0) * if no redundant stream available, emergency switch down (if in auto mode and current level not 0)
* otherwise, we cannot recover this network error .... * otherwise, we cannot recover this network error ...
* don't raise FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT as fatal, as it is handled by mediaController
*/ */
if (levelId !== undefined) { if (levelId !== undefined) {
level = this._levels[levelId]; level = this._levels[levelId];
@ -202,7 +207,8 @@ class LevelController {
hls.abrController.nextAutoLevel = 0; hls.abrController.nextAutoLevel = 0;
} else if(level && level.details && level.details.live) { } else if(level && level.details && level.details.live) {
logger.warn(`level controller,${details} on live stream, discard`); logger.warn(`level controller,${details} on live stream, discard`);
} else { // FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT are handled by mediaController
} else if (details !== ErrorDetails.FRAG_LOAD_ERROR && details !== ErrorDetails.FRAG_LOAD_TIMEOUT) {
logger.error(`cannot recover ${details} error`); logger.error(`cannot recover ${details} error`);
this._level = undefined; this._level = undefined;
// stopping live reloading timer if any // stopping live reloading timer if any

View file

@ -1004,6 +1004,7 @@ class MSEMediaController {
this.demuxer.push(data.payload, audioCodec, currentLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata); this.demuxer.push(data.payload, audioCodec, currentLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata);
} }
} }
this.fragLoadError = 0;
} }
onInitSegment(event, data) { onInitSegment(event, data) {
@ -1099,6 +1100,24 @@ class MSEMediaController {
// abort fragment loading on errors // abort fragment loading on errors
case ErrorDetails.FRAG_LOAD_ERROR: case ErrorDetails.FRAG_LOAD_ERROR:
case ErrorDetails.FRAG_LOAD_TIMEOUT: case ErrorDetails.FRAG_LOAD_TIMEOUT:
var loadError = this.fragLoadError;
if(loadError) {
loadError++;
} else {
loadError=1;
}
if (loadError <= this.config.fragLoadingMaxRetry) {
this.fragLoadError = loadError;
// retry loading
this.state = State.IDLE;
} else {
logger.error(`mediaController: ${data.details} reaches max retry, redispatch as fatal ...`);
// redispatch same error but with fatal set to true
data.fatal = true;
this.hls.trigger(event, data);
this.state = State.ERROR;
}
break;
case ErrorDetails.FRAG_LOOP_LOADING_ERROR: case ErrorDetails.FRAG_LOOP_LOADING_ERROR:
case ErrorDetails.LEVEL_LOAD_ERROR: case ErrorDetails.LEVEL_LOAD_ERROR:
case ErrorDetails.LEVEL_LOAD_TIMEOUT: case ErrorDetails.LEVEL_LOAD_TIMEOUT:

View file

@ -46,7 +46,7 @@ class Hls {
enableWorker: true, enableWorker: true,
enableSoftwareAES: true, enableSoftwareAES: true,
fragLoadingTimeOut: 20000, fragLoadingTimeOut: 20000,
fragLoadingMaxRetry: 1, fragLoadingMaxRetry: 6,
fragLoadingRetryDelay: 1000, fragLoadingRetryDelay: 1000,
fragLoadingLoopThreshold: 3, fragLoadingLoopThreshold: 3,
manifestLoadingTimeOut: 10000, manifestLoadingTimeOut: 10000,

View file

@ -27,9 +27,9 @@ class FragmentLoader {
this.frag.loaded = 0; this.frag.loaded = 0;
var config = this.hls.config; var config = this.hls.config;
frag.loader = this.loader = typeof(config.fLoader) !== 'undefined' ? new config.fLoader(config) : new config.loader(config); frag.loader = this.loader = typeof(config.fLoader) !== 'undefined' ? new config.fLoader(config) : new config.loader(config);
this.loader.load(frag.url, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, config.fragLoadingMaxRetry, config.fragLoadingRetryDelay, this.loadprogress.bind(this), frag); this.loader.load(frag.url, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, 1, config.fragLoadingRetryDelay, this.loadprogress.bind(this), frag);
} }
loadsuccess(event, stats) { loadsuccess(event, stats) {
var payload = event.currentTarget.response; var payload = event.currentTarget.response;
stats.length = payload.byteLength; stats.length = payload.byteLength;
@ -41,7 +41,7 @@ class FragmentLoader {
loaderror(event) { loaderror(event) {
this.loader.abort(); this.loader.abort();
this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.FRAG_LOAD_ERROR, fatal: false, frag: this.frag, response: event}); this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.FRAG_LOAD_ERROR, fatal: false, frag: this.frag, response: event});
} }
loadtimeout() { loadtimeout() {
this.loader.abort(); this.loader.abort();

View file

@ -28,14 +28,14 @@
"iron-component-page": "polymerelements/iron-component-page#^1.0.0" "iron-component-page": "polymerelements/iron-component-page#^1.0.0"
}, },
"ignore": [], "ignore": [],
"homepage": "https://github.com/PolymerElements/iron-flex-layout", "homepage": "https://github.com/polymerelements/iron-flex-layout",
"_release": "1.2.2", "_release": "1.2.2",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.2.2", "tag": "v1.2.2",
"commit": "41c4f35be1368afb770312b907a258175565dbdf" "commit": "41c4f35be1368afb770312b907a258175565dbdf"
}, },
"_source": "git://github.com/PolymerElements/iron-flex-layout.git", "_source": "git://github.com/polymerelements/iron-flex-layout.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "PolymerElements/iron-flex-layout" "_originalSource": "polymerelements/iron-flex-layout"
} }

View file

@ -32,14 +32,14 @@
"iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
}, },
"ignore": [], "ignore": [],
"homepage": "https://github.com/PolymerElements/paper-ripple", "homepage": "https://github.com/polymerelements/paper-ripple",
"_release": "1.0.5", "_release": "1.0.5",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.0.5", "tag": "v1.0.5",
"commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5" "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
}, },
"_source": "git://github.com/PolymerElements/paper-ripple.git", "_source": "git://github.com/polymerelements/paper-ripple.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "PolymerElements/paper-ripple" "_originalSource": "polymerelements/paper-ripple"
} }