From dfde7828e4b3f32aee9bd79de75fa9ac8fe80271 Mon Sep 17 00:00:00 2001 From: Cat Date: Tue, 9 Jan 2018 11:53:06 +0100 Subject: [PATCH 1/3] embed: added reloadDelay option that determines the delay (in seconds) used for reloading when the stream is inactive --- embed/core.js | 21 +++++++++++++++++++-- embed/mist.css | 13 ++++++------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/embed/core.js b/embed/core.js index 19b37e27..e9a56baa 100644 --- a/embed/core.js +++ b/embed/core.js @@ -930,8 +930,25 @@ function mistPlay(streamName,options) { if (!('type' in info) || (info.type != 'vod')) { //always show the button timer, unless its a vod //reload timeout - var delay = ('type' in info ? 20 : 60); - i.className = 'countdown'+delay; + var delay = 20; + if (!("type" in info)) { + if ("reloadDelay" in options) { + delay = options.reloadDelay; + + try { + var css = document.createElement("style"); + i.appendChild(css); + css.sheet.insertRule(".countdown[data-delay=\""+delay+"\"] { animation-duration: "+delay+"s; }"); + css.sheet.insertRule(".countdown[data-delay=\""+delay+"\"]:before { animation-duration: "+delay/2+"s,"+delay+"s; }"); + } + catch (e) {} + } + else { + delay = 60; + } + } + i.className = 'countdown'; + i.setAttribute("data-delay",delay); err.timeOut = protoplay.timer.add(function(){ protoplay.report({ type: 'playback', diff --git a/embed/mist.css b/embed/mist.css index 99364fc1..dc912f77 100644 --- a/embed/mist.css +++ b/embed/mist.css @@ -360,19 +360,18 @@ } } -.countdown, .countdown20, .countdown60 { +.countdown { height: 1em; width: 1em; display: inline-block; vertical-align: bottom; border-radius: 50%; background-image: linear-gradient(to right,#bbb 50%,#333 0); - border: 1px solid black; margin: 0 0.2em; opacity: 0; animation: appear 20s step-start 1; } -.countdown:before, .countdown20:before, .countdown60:before { +.countdown:before { content: ''; display: block; margin-left: 50%; @@ -382,11 +381,11 @@ transform-origin: 0 50%; animation: rotate 10s linear 2, bg 20s step-end 1; } -.countdown60 { - animation: appear 60s step-start 1; +.countdown[data-delay=60] { + animation-duration: 60s; } -.coutndown60:before { - animation: rotate 30s linear 2, bg 60s step-end 1; +.countdown[data-delay=60]:before { + animation-duration: 30s, 60s; } @keyframes rotate { to { transform: rotate(.5turn); } From 94b8fcd2d6f416616f4b12ec85985cccf9152b0d Mon Sep 17 00:00:00 2001 From: Cat Date: Fri, 22 Jun 2018 12:24:54 +0200 Subject: [PATCH 2/3] Embed: onreadylist array was defined in the prototype and therefor shared between player instances --- embed/core.js | 1 - embed/wrappers/dashjs.js | 2 +- embed/wrappers/flash_strobe.js | 2 +- embed/wrappers/html5.js | 4 +++- embed/wrappers/img.js | 2 +- embed/wrappers/silverlight.js | 2 +- embed/wrappers/videojs.js | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/embed/core.js b/embed/core.js index e9a56baa..72f588ac 100644 --- a/embed/core.js +++ b/embed/core.js @@ -81,7 +81,6 @@ MistPlayer.prototype.getElement = function(tag){ this.element = ele; return ele; }; -MistPlayer.prototype.onreadylist = []; MistPlayer.prototype.onready = function(dothis){ this.onreadylist.push(dothis); }; diff --git a/embed/wrappers/dashjs.js b/embed/wrappers/dashjs.js index a35b3e7f..a50ecefd 100644 --- a/embed/wrappers/dashjs.js +++ b/embed/wrappers/dashjs.js @@ -10,7 +10,7 @@ mistplayers.dashjs = { if ((options.host.substr(0,7) == 'http://') && (source.url.substr(0,8) == 'https://')) { return false; } return (('MediaSource' in window) && (location.protocol != 'file:')); }, - player: function(){} + player: function(){this.onreadylist = [];} }; var p = mistplayers.dashjs.player; p.prototype = new MistPlayer(); diff --git a/embed/wrappers/flash_strobe.js b/embed/wrappers/flash_strobe.js index acf11242..575ccc47 100644 --- a/embed/wrappers/flash_strobe.js +++ b/embed/wrappers/flash_strobe.js @@ -24,7 +24,7 @@ mistplayers.flash_strobe = { return Number(version) >= Number(mimesplit[mimesplit.length-1]); }, - player: function(){} + player: function(){this.onreadylist = [];} }; var p = mistplayers.flash_strobe.player; p.prototype = new MistPlayer(); diff --git a/embed/wrappers/html5.js b/embed/wrappers/html5.js index fe85ce9c..5198c1d9 100644 --- a/embed/wrappers/html5.js +++ b/embed/wrappers/html5.js @@ -27,7 +27,9 @@ mistplayers.html5 = { } catch(e){} return support; }, - player: function(){}, + player: function(){ + this.onreadylist = []; + }, mistControls: true }; var p = mistplayers.html5.player; diff --git a/embed/wrappers/img.js b/embed/wrappers/img.js index c5b92107..3dce1c2b 100644 --- a/embed/wrappers/img.js +++ b/embed/wrappers/img.js @@ -11,7 +11,7 @@ mistplayers.img = { if ((options.forceType) || (options.forceSource) || (options.forcePlayer)) { return true; } return false; }, - player: function(){} + player: function(){this.onreadylist = [];} }; var p = mistplayers.img.player; p.prototype = new MistPlayer(); diff --git a/embed/wrappers/silverlight.js b/embed/wrappers/silverlight.js index b03fb1ef..2f099562 100644 --- a/embed/wrappers/silverlight.js +++ b/embed/wrappers/silverlight.js @@ -21,7 +21,7 @@ mistplayers.silverlight = { return false; }, - player: function(){} + player: function(){this.onreadylist = [];} }; var p = mistplayers.silverlight.player; p.prototype = new MistPlayer(); diff --git a/embed/wrappers/videojs.js b/embed/wrappers/videojs.js index 9ceaf6fa..178afecc 100644 --- a/embed/wrappers/videojs.js +++ b/embed/wrappers/videojs.js @@ -42,7 +42,7 @@ mistplayers.videojs = { return ('MediaSource' in window); }, - player: function(){}, + player: function(){this.onreadylist = [];} }; var p = mistplayers.videojs.player; p.prototype = new MistPlayer(); From d944d4600e5d1f5d986aeb8cee15f7bd059d5970 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Fri, 22 Jun 2018 15:54:35 +0200 Subject: [PATCH 3/3] Added CORS headers and OPTIONS/HEAD support for HTTP internal's onFail responses. --- src/output/output_http_internal.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/output/output_http_internal.cpp b/src/output/output_http_internal.cpp index e16ed1b2..93debc70 100644 --- a/src/output/output_http_internal.cpp +++ b/src/output/output_http_internal.cpp @@ -61,6 +61,7 @@ namespace Mist { } void OutHTTP::onFail(){ + std::string method = H.method; // send logo icon if (H.url.length() > 4 && H.url.substr(H.url.length() - 4, 4) == ".ico"){ sendIcon(); @@ -81,7 +82,14 @@ namespace Mist { H.Clean(); H.SetBody("if (!mistvideo){var mistvideo = {};}\nmistvideo['" + streamName + "'] = "+json_resp.toString()+";\n"); } + H.setCORSHeaders(); + if(method == "OPTIONS" || method == "HEAD"){ + H.SendResponse("200", "OK", myConn); + H.Clean(); + return; + } H.SendResponse("200", "Stream not found", myConn); + H.Clean(); return; } INFO_MSG("Failing: %s", H.url.c_str());