Merge branch 'development' into LTS_development
# Conflicts: # lib/config.cpp
This commit is contained in:
commit
934ed69c58
3 changed files with 9 additions and 10 deletions
|
@ -206,9 +206,6 @@ bool Util::Config::parseArgs(int & argc, char ** & argv) {
|
||||||
#ifdef WITH_THREADNAMES
|
#ifdef WITH_THREADNAMES
|
||||||
std::cout << "- Flag: With threadnames. Debuggers will show sensible human-readable thread names." << std::endl;
|
std::cout << "- Flag: With threadnames. Debuggers will show sensible human-readable thread names." << std::endl;
|
||||||
#endif
|
#endif
|
||||||
#ifdef BIGMETA
|
|
||||||
std::cout << "- Flag: Big metadata. Enabled longer live stream durations. Breaks compatibility with DTSH files generated by versions without this flag." << std::endl;
|
|
||||||
#endif
|
|
||||||
/*LTS-START*/
|
/*LTS-START*/
|
||||||
#ifndef UPDATER
|
#ifndef UPDATER
|
||||||
std::cout << "- Flag: Updater disabled. Server will not call back home and attempt to search for updates at regular intervals." << std::endl;
|
std::cout << "- Flag: Updater disabled. Server will not call back home and attempt to search for updates at regular intervals." << std::endl;
|
||||||
|
@ -220,12 +217,14 @@ bool Util::Config::parseArgs(int & argc, char ** & argv) {
|
||||||
std::cout << "- Flag: Kill on exit. All binaries will forcibly shut down all their children on exit. This disabled rolling restart support." << std::endl;
|
std::cout << "- Flag: Kill on exit. All binaries will forcibly shut down all their children on exit. This disabled rolling restart support." << std::endl;
|
||||||
#endif
|
#endif
|
||||||
#ifdef STATS_DELAY
|
#ifdef STATS_DELAY
|
||||||
|
if (STATS_DELAY != 15){
|
||||||
std::cout << "- Setting: Stats delay " << STATS_DELAY << ". Statistics of viewer counts are delayed by " << STATS_DELAY << " seconds as opposed to the default of 15 seconds. ";
|
std::cout << "- Setting: Stats delay " << STATS_DELAY << ". Statistics of viewer counts are delayed by " << STATS_DELAY << " seconds as opposed to the default of 15 seconds. ";
|
||||||
if (STATS_DELAY > 15){
|
if (STATS_DELAY > 15){
|
||||||
std::cout << "This makes them more accurate." << std::endl;
|
std::cout << "This makes them more accurate." << std::endl;
|
||||||
}else{
|
}else{
|
||||||
std::cout << "This makes them less accurate." << std::endl;
|
std::cout << "This makes them less accurate." << std::endl;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
/*LTS-END*/
|
/*LTS-END*/
|
||||||
std::cout << "Built on " __DATE__ ", " __TIME__ << std::endl;
|
std::cout << "Built on " __DATE__ ", " __TIME__ << std::endl;
|
||||||
|
|
|
@ -102,7 +102,7 @@ mist.data.streams[c]);delete i.meta;delete i.error;i.online=2;i.name=L;i.ischild
|
||||||
"/"+a.browse.files[f])&&(x[d+"+"+a.browse.files[f]]=true);aa++;R==aa&&mist.send(function(){for(var a in mist.data.active_streams){var c=mist.data.active_streams[a].split("+");c.length>1&&c[0]in mist.data.streams&&(x[mist.data.active_streams[a]]=true)}x=Object.keys(x);x=x.concat(Object.keys(mist.data.streams));Q(b,x,ba)},{active_streams:true})},{browse:mist.data.streams[r].source},{stream:r}),R++;0==R&&mist.send(function(){var a=[],c;for(c in mist.data.active_streams){var d=mist.data.active_streams[c].split("+");
|
"/"+a.browse.files[f])&&(x[d+"+"+a.browse.files[f]]=true);aa++;R==aa&&mist.send(function(){for(var a in mist.data.active_streams){var c=mist.data.active_streams[a].split("+");c.length>1&&c[0]in mist.data.streams&&(x[mist.data.active_streams[a]]=true)}x=Object.keys(x);x=x.concat(Object.keys(mist.data.streams));Q(b,x,ba)},{active_streams:true})},{browse:mist.data.streams[r].source},{stream:r}),R++;0==R&&mist.send(function(){var a=[],c;for(c in mist.data.active_streams){var d=mist.data.active_streams[c].split("+");
|
||||||
d.length>1&&d[0]in mist.data.streams&&(a[mist.data.active_streams[c]]=true)}mist.data.streams&&(a=a.concat(Object.keys(mist.data.streams)));a.sort();Q(b,a)},{active_streams:!0})}else Q(b,Object.keys(mist.data.streams));break;case "Edit":if("undefined"==typeof mist.data.capabilities){mist.send(function(){UI.navto(a,b)},{capabilities:!0});c.append("Loading..");break}j=!1;""!=b&&(j=!0);if(j){var s=b,m=mist.data.streams[s];c.find("h2").append(' "'+s+'"')}else c.html($("<h2>").text("New Stream")),m={};
|
d.length>1&&d[0]in mist.data.streams&&(a[mist.data.active_streams[c]]=true)}mist.data.streams&&(a=a.concat(Object.keys(mist.data.streams)));a.sort();Q(b,a)},{active_streams:!0})}else Q(b,Object.keys(mist.data.streams));break;case "Edit":if("undefined"==typeof mist.data.capabilities){mist.send(function(){UI.navto(a,b)},{capabilities:!0});c.append("Loading..");break}j=!1;""!=b&&(j=!0);if(j){var s=b,m=mist.data.streams[s];c.find("h2").append(' "'+s+'"')}else c.html($("<h2>").text("New Stream")),m={};
|
||||||
s=[];for(f in mist.data.capabilities.inputs)s.push(mist.data.capabilities.inputs[f].source_match);var K=$("<div>"),ca=function(a){if(!mist.data.streams)mist.data.streams={};mist.data.streams[m.name]=m;b!=m.name&&delete mist.data.streams[b];var c={};if(mist.data.LTS){c.addstream={};c.addstream[m.name]=m;if(b!=m.name)c.deletestream=[b]}else c.streams=mist.data.streams;if(m.stop_sessions&&b!=""){c.stop_sessions=b;delete m.stop_sessions}mist.send(function(){delete mist.data.streams[m.name].online;delete mist.data.streams[m.name].error;
|
s=[];for(f in mist.data.capabilities.inputs)s.push(mist.data.capabilities.inputs[f].source_match);var K=$("<div>"),ca=function(a){if(!mist.data.streams)mist.data.streams={};mist.data.streams[m.name]=m;b!=m.name&&delete mist.data.streams[b];var c={};if(mist.data.LTS){c.addstream={};c.addstream[m.name]=m;if(b!=m.name)c.deletestream=[b]}else c.streams=mist.data.streams;if(m.stop_sessions&&b!=""){c.stop_sessions=b;delete m.stop_sessions}mist.send(function(){delete mist.data.streams[m.name].online;delete mist.data.streams[m.name].error;
|
||||||
UI.navto(a,a=="Preview"?m.name:"")},c)},da=$("<style>").text("button.saveandpreview { display: none; }");c.append(UI.buildUI([{label:"Stream name",type:"str",validate:["required","streamname"],pointer:{main:m,index:"name"},help:"Set the name this stream will be recognised by for players and/or stream pushing."},{label:"Source",type:"browse",filetypes:s,pointer:{main:m,index:"source"},help:"<p>Below is the explanation of the input methods for MistServer. Anything between brackets () will go to default settings if not specified.</p><table><tr><td>Input</td><td>Syntax</td><td>Explanation</td></tr> <tr><th>File</th><td>Linux/MacOS: /PATH/FILE<br>Windows: /cygdrive/DRIVE/PATH/FILE</td><td>For file input please specify the proper path and file.<br>Supported inputs are: DTSC, FLV, MP3. MistServer Pro has TS, MP4, ISMV added as input.</td></tr><th>Folder<br>(Pro only)</th><td>Linux/MacOS: /PATH/<br>Windows: /cygdrive/DRIVE/PATH/</td><td>A folder stream makes all the recognised files in the selected folder available as a stream.</td></tr><tr><th>RTMP</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.<br>Password is the application under which to push to MistServer, if it doesn't match the stream will be rejected. Password is MistServer Pro only. <tr><th>RTSP<br>(Pro only)</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.</td></tr> <tr><th>TS<br>(Pro only)</th><td>tsudp://(IP):PORT(/INTERFACE)</td><td>IP is the IP address used for this stream, multi-cast IP range is: 224.0.0.0 - 239.255.255.255. If IP is not set all IPs of the machine will be used.<br>PORT is the port you reserve for this stream on the chosen IP.<br>INTERFACE is the interface used, if left all interfaces will be used.</td></tr></table>",
|
UI.navto(a,a=="Preview"?m.name:"")},c)},da=$("<style>").text("button.saveandpreview { display: none; }");c.append(UI.buildUI([{label:"Stream name",type:"str",validate:["required","streamname"],pointer:{main:m,index:"name"},help:"Set the name this stream will be recognised by for players and/or stream pushing."},{label:"Source",type:"browse",filetypes:s,pointer:{main:m,index:"source"},help:"<p>Below is the explanation of the input methods for MistServer. Anything between brackets () will go to default settings if not specified.</p><table><tr><td>Input</td><td>Syntax</td><td>Explanation</td></tr> <tr><th>File</th><td>Linux/MacOS: /PATH/FILE<br>Windows: /cygdrive/DRIVE/PATH/FILE</td><td>For file input please specify the proper path and file.<br>Supported inputs are: DTSC, FLV, MP3. MistServer Pro has TS, MP4, ISMV added as input.</td></tr><th>Folder<br>(Pro only)</th><td>Linux/MacOS: /PATH/<br>Windows: /cygdrive/DRIVE/PATH/</td><td>A folder stream makes all the recognised files in the selected folder available as a stream.</td></tr><tr><th>RTMP</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.<br>Password is the application under which to push to MistServer, if it doesn't match the stream will be rejected. Password is MistServer Pro only. <tr><th>RTSP<br>(Pro only)</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.</td></tr> <tr><th>TS<br>(Pro only)</th><td>tsudp://(IP):PORT(/INTERFACE)</td><td>IP is the IP address used to listen for this stream, multi-cast IP range is: 224.0.0.0 - 239.255.255.255. If IP is not set all addresses will listened to.<br>PORT is the port you reserve for this stream on the chosen IP.<br>INTERFACE is the interface used, if left all interfaces will be used.</td></tr></table>",
|
||||||
"function":function(){var a=$(this).val();da.remove();if(a!=""){var b=null,d;for(d in mist.data.capabilities.inputs)if(typeof mist.data.capabilities.inputs[d].source_match!="undefined"&&mist.inputMatch(mist.data.capabilities.inputs[d].source_match,a)){b=d;break}if(b===null)K.html($("<h3>").text("Unrecognized input").addClass("red")).append($("<span>").text("Please edit the stream source.").addClass("red"));else{b=mist.data.capabilities.inputs[b];K.html($("<h3>").text(b.name+" Input options"));var f=
|
"function":function(){var a=$(this).val();da.remove();if(a!=""){var b=null,d;for(d in mist.data.capabilities.inputs)if(typeof mist.data.capabilities.inputs[d].source_match!="undefined"&&mist.inputMatch(mist.data.capabilities.inputs[d].source_match,a)){b=d;break}if(b===null)K.html($("<h3>").text("Unrecognized input").addClass("red")).append($("<span>").text("Please edit the stream source.").addClass("red"));else{b=mist.data.capabilities.inputs[b];K.html($("<h3>").text(b.name+" Input options"));var f=
|
||||||
mist.convertBuildOptions(b,m);"always_match"in mist.data.capabilities.inputs[d]&&mist.inputMatch(mist.data.capabilities.inputs[d].always_match,a)&&f.push({label:"Always on",type:"checkbox",help:"Keep this input available at all times, even when there are no active viewers.",pointer:{main:m,index:"always_on"}});K.append(UI.buildUI(f));b.name=="Folder"&&c.append(da)}}}},{label:"Stop sessions",type:"checkbox",help:"When saving these stream settings, kill this stream's current connections.",LTSonly:!0,
|
mist.convertBuildOptions(b,m);"always_match"in mist.data.capabilities.inputs[d]&&mist.inputMatch(mist.data.capabilities.inputs[d].always_match,a)&&f.push({label:"Always on",type:"checkbox",help:"Keep this input available at all times, even when there are no active viewers.",pointer:{main:m,index:"always_on"}});K.append(UI.buildUI(f));b.name=="Folder"&&c.append(da)}}}},{label:"Stop sessions",type:"checkbox",help:"When saving these stream settings, kill this stream's current connections.",LTSonly:!0,
|
||||||
pointer:{main:m,index:"stop_sessions"}},$("<br>"),{type:"custom",custom:K},$("<br>"),$("<h3>").text("Encryption"),{type:"help",help:"To enable encryption, the licence acquisition url must be entered, as well as either the content key or the key ID and seed.<br>Unsure how you should fill in your encryption or missing your preferred encryption? Please contact us."},{label:"License acquisition url",type:"str",LTSonly:!0,pointer:{main:m,index:"la_url"}},$("<br>"),{label:"Content key",type:"str",LTSonly:!0,
|
pointer:{main:m,index:"stop_sessions"}},$("<br>"),{type:"custom",custom:K},$("<br>"),$("<h3>").text("Encryption"),{type:"help",help:"To enable encryption, the licence acquisition url must be entered, as well as either the content key or the key ID and seed.<br>Unsure how you should fill in your encryption or missing your preferred encryption? Please contact us."},{label:"License acquisition url",type:"str",LTSonly:!0,pointer:{main:m,index:"la_url"}},$("<br>"),{label:"Content key",type:"str",LTSonly:!0,
|
||||||
|
|
|
@ -2892,7 +2892,7 @@ var UI = {
|
||||||
main: saveas,
|
main: saveas,
|
||||||
index: 'source'
|
index: 'source'
|
||||||
},
|
},
|
||||||
help: '<p>Below is the explanation of the input methods for MistServer. Anything between brackets () will go to default settings if not specified.</p><table><tr><td>Input</td><td>Syntax</td><td>Explanation</td></tr> <tr><th>File</th><td>Linux/MacOS: /PATH/FILE<br>Windows: /cygdrive/DRIVE/PATH/FILE</td><td>For file input please specify the proper path and file.<br>Supported inputs are: DTSC, FLV, MP3. MistServer Pro has TS, MP4, ISMV added as input.</td></tr><th>Folder<br>(Pro only)</th><td>Linux/MacOS: /PATH/<br>Windows: /cygdrive/DRIVE/PATH/</td><td>A folder stream makes all the recognised files in the selected folder available as a stream.</td></tr><tr><th>RTMP</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.<br>Password is the application under which to push to MistServer, if it doesn\'t match the stream will be rejected. Password is MistServer Pro only. <tr><th>RTSP<br>(Pro only)</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.</td></tr> <tr><th>TS<br>(Pro only)</th><td>tsudp://(IP):PORT(/INTERFACE)</td><td>IP is the IP address used for this stream, multi-cast IP range is: 224.0.0.0 - 239.255.255.255. If IP is not set all IPs of the machine will be used.<br>PORT is the port you reserve for this stream on the chosen IP.<br>INTERFACE is the interface used, if left all interfaces will be used.</td></tr></table>',
|
help: '<p>Below is the explanation of the input methods for MistServer. Anything between brackets () will go to default settings if not specified.</p><table><tr><td>Input</td><td>Syntax</td><td>Explanation</td></tr> <tr><th>File</th><td>Linux/MacOS: /PATH/FILE<br>Windows: /cygdrive/DRIVE/PATH/FILE</td><td>For file input please specify the proper path and file.<br>Supported inputs are: DTSC, FLV, MP3. MistServer Pro has TS, MP4, ISMV added as input.</td></tr><th>Folder<br>(Pro only)</th><td>Linux/MacOS: /PATH/<br>Windows: /cygdrive/DRIVE/PATH/</td><td>A folder stream makes all the recognised files in the selected folder available as a stream.</td></tr><tr><th>RTMP</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.<br>Password is the application under which to push to MistServer, if it doesn\'t match the stream will be rejected. Password is MistServer Pro only. <tr><th>RTSP<br>(Pro only)</th><td>push://(IP)(@PASSWORD)</td><td>IP is white listed IP for pushing towards MistServer, if left empty all are white listed.</td></tr> <tr><th>TS<br>(Pro only)</th><td>tsudp://(IP):PORT(/INTERFACE)</td><td>IP is the IP address used to listen for this stream, multi-cast IP range is: 224.0.0.0 - 239.255.255.255. If IP is not set all addresses will listened to.<br>PORT is the port you reserve for this stream on the chosen IP.<br>INTERFACE is the interface used, if left all interfaces will be used.</td></tr></table>',
|
||||||
'function': function(){
|
'function': function(){
|
||||||
var source = $(this).val();
|
var source = $(this).val();
|
||||||
$style.remove();
|
$style.remove();
|
||||||
|
|
Loading…
Add table
Reference in a new issue