Commit 2f449615 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Add UI for simulcast control.

parent 795a40ce
...@@ -771,6 +771,12 @@ h1 { ...@@ -771,6 +771,12 @@ h1 {
margin-right: 0.4em; margin-right: 0.4em;
} }
#simulcastselect {
width: 8em;
text-align-last: center;
margin-right: 0.4em;
}
#requestselect { #requestselect {
width: 8em; width: 8em;
text-align-last: center; text-align-last: center;
......
...@@ -208,6 +208,15 @@ ...@@ -208,6 +208,15 @@
</select> </select>
</form> </form>
<form id="simulcastform">
<label for="simulcastselect" class="sidenav-label-first">Simulcast:</label>
<select id="simulcastselect" class="select select-inline">
<option value="off">off</option>
<option value="auto" selected>auto</option>
<option value="on">on</option>
</select>
</form>
<form id="requestform"> <form id="requestform">
<label for="requestselect" class="sidenav-label">Receive:</label> <label for="requestselect" class="sidenav-label">Receive:</label>
<select id="requestselect" class="select select-inline"> <select id="requestselect" class="select select-inline">
......
...@@ -78,7 +78,7 @@ function getUserPass() { ...@@ -78,7 +78,7 @@ function getUserPass() {
* @property {boolean} [localMute] * @property {boolean} [localMute]
* @property {string} [video] * @property {string} [video]
* @property {string} [audio] * @property {string} [audio]
* @property {boolean} [simulcast] * @property {string} [simulcast]
* @property {string} [send] * @property {string} [send]
* @property {string} [request] * @property {string} [request]
* @property {boolean} [activityDetection] * @property {boolean} [activityDetection]
...@@ -229,6 +229,13 @@ function reflectSettings() { ...@@ -229,6 +229,13 @@ function reflectSettings() {
store = true; store = true;
} }
if(settings.hasOwnProperty('simulcast')) {
getSelectElement('simulcastselect').value = settings.simulcast
} else {
settings.simulcast = getSelectElement('simulcastselect').value;
store = true;
}
if(settings.hasOwnProperty('blackboardMode')) { if(settings.hasOwnProperty('blackboardMode')) {
getInputElement('blackboardbox').checked = settings.blackboardMode; getInputElement('blackboardbox').checked = settings.blackboardMode;
} else { } else {
...@@ -538,6 +545,17 @@ getSelectElement('sendselect').onchange = async function(e) { ...@@ -538,6 +545,17 @@ getSelectElement('sendselect').onchange = async function(e) {
} }
}; };
getSelectElement('simulcastselect').onchange = async function(e) {
if(!(this instanceof HTMLSelectElement))
throw new Error('Unexpected type for this');
updateSettings({simulcast: this.value});
let t = getMaxVideoThroughput();
for(let id in serverConnection.up) {
let c = serverConnection.up[id];
await setMaxVideoThroughput(c, t);
}
};
/** /**
* @param {string} what * @param {string} what
* @returns {Object<string,Array<string>>} * @returns {Object<string,Array<string>>}
...@@ -1042,10 +1060,15 @@ const simulcastRate = 100000; ...@@ -1042,10 +1060,15 @@ const simulcastRate = 100000;
* @returns {boolean} * @returns {boolean}
*/ */
function doSimulcast() { function doSimulcast() {
if(!getSettings().simulcast) switch(getSettings().simulcast) {
case 'on':
return true;
case 'off':
return false; return false;
let bps = getMaxVideoThroughput(); default:
return bps <= 0 || bps >= 2 * simulcastRate; let bps = getMaxVideoThroughput();
return bps <= 0 || bps >= 2 * simulcastRate;
}
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment