mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-15 23:58:29 +00:00
Merge pull request #835 from steveseguin/steves-dev-branch
Version 17.1
This commit is contained in:
commit
ce97e74bea
159
chat.html
Normal file
159
chat.html
Normal file
@ -0,0 +1,159 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>OBSN Chat Overlay</title>
|
||||
<style>
|
||||
|
||||
@font-face {
|
||||
font-family: 'Cousine';
|
||||
src: url('fonts/Cousine-Bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
padding:0 10px;
|
||||
height:100%;
|
||||
border: 0;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
position:absolute;
|
||||
bottom:0;
|
||||
overflow:hidden;
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
div {
|
||||
margin:0;
|
||||
background-color: black;
|
||||
padding: 8px 8px 0px 8px;
|
||||
color: white;
|
||||
font-family: Cousine, monospace;
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1em;
|
||||
letter-spacing: 0.0em;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0.05em 0.05em 0px rgba(0,0,0,1);
|
||||
max-width:100%;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
|
||||
|
||||
a {
|
||||
color:white;
|
||||
font-size:1.2em;
|
||||
text-transform: none;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
|
||||
|
||||
(function (w) {
|
||||
w.URLSearchParams =
|
||||
w.URLSearchParams ||
|
||||
function (searchString) {
|
||||
var self = this;
|
||||
self.searchString = searchString;
|
||||
self.get = function (name) {
|
||||
var results = new RegExp("[\?&]" + name + "=([^&#]*)").exec(
|
||||
self.searchString
|
||||
);
|
||||
if (results == null) {
|
||||
return null;
|
||||
} else {
|
||||
return decodeURI(results[1]) || 0;
|
||||
}
|
||||
};
|
||||
};
|
||||
})(window);
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
|
||||
function loadIframe() {
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
|
||||
var view= "";
|
||||
if (urlParams.has("view")) {
|
||||
view = "&view="+(urlParams.get("view") || "");
|
||||
}
|
||||
var room="";
|
||||
if (urlParams.has("room")) {
|
||||
room = "&room="+urlParams.get("room");
|
||||
}
|
||||
|
||||
var password="";
|
||||
if (urlParams.has("password")) {
|
||||
password = "&password="+urlParams.get("password");
|
||||
}
|
||||
|
||||
iframe.allow = "autoplay";
|
||||
var srcString = "./?novideo&noaudio&label=chatOverlay&scene"+room+view+password;
|
||||
|
||||
iframe.src = srcString;
|
||||
iframe.style.width="0";
|
||||
iframe.style.height="0";
|
||||
iframe.style.border="0";
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
//////////// LISTEN FOR EVENTS
|
||||
|
||||
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
|
||||
var eventer = window[eventMethod];
|
||||
var messageEvent = eventMethod === "attachEvent" ? "onmessage" : "message";
|
||||
|
||||
|
||||
/// If you have a routing system setup, you could have just one global listener for all iframes instead.
|
||||
|
||||
eventer(messageEvent, function (e) {
|
||||
if (e.source != iframe.contentWindow){return} // reject messages send from other iframes
|
||||
|
||||
console.log(e);
|
||||
if ("gotChat" in e.data){
|
||||
logData(e.data.gotChat.label,e.data.gotChat.msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function printValues(obj) {
|
||||
var out = "";
|
||||
for (var key in obj) {
|
||||
if (typeof obj[key] === "object") {
|
||||
out += "<br />";
|
||||
out += printValues(obj[key]);
|
||||
} else {
|
||||
if (key.startsWith("_")) {
|
||||
} else {
|
||||
out += "<b>" + key + "</b>: " + obj[key] + "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function logData(type, data) {
|
||||
var span = document.createElement('span');
|
||||
var entry = document.createElement('div');
|
||||
if (type){
|
||||
type = "<i>"+type.replace(/_/g, ' ')+"</i>";
|
||||
}
|
||||
entry.innerHTML = type + data;
|
||||
span.appendChild(entry);
|
||||
document.body.prepend(span);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="loadIframe();">
|
||||
</body>
|
||||
</html>
|
||||
32
devices.html
32
devices.html
@ -79,7 +79,7 @@
|
||||
setVideoSearchParams(element);
|
||||
}
|
||||
if (type === "audiooutput") {
|
||||
return;
|
||||
setAudioOutputSearchParams(element);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -142,6 +142,36 @@
|
||||
element.className = "device selected";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Only allows for a single audio output device to be selected
|
||||
*/
|
||||
function setAudioOutputSearchParams(info) {
|
||||
// Device was already selected
|
||||
if (info.className === "device selected") {
|
||||
element.className = "device";
|
||||
|
||||
|
||||
// Set the url param to the devices that are left
|
||||
url.searchParams.set("od", device);
|
||||
element.className = "device";
|
||||
|
||||
// If no devices remained, just remove the param completely
|
||||
if (audioInputDevices.length === 0) {
|
||||
url.searchParams.delete("od");
|
||||
}
|
||||
} else {
|
||||
// Device is unselected
|
||||
try {
|
||||
element.parentElement.querySelector('.device.selected').className = "device";
|
||||
} catch (error) {
|
||||
console.log("There was no video device already selected.");
|
||||
}
|
||||
|
||||
url.searchParams.set("od", device);
|
||||
element.className = "device selected";
|
||||
}
|
||||
}
|
||||
|
||||
// Update UI
|
||||
showDeviceIdsPopup();
|
||||
|
||||
@ -359,6 +359,9 @@ function modURL(ele=false){
|
||||
}
|
||||
function gohere(){
|
||||
var url = modURL(true);
|
||||
if (!(document.getElementById('changeText').value.includes("obs.ninja")) && (document.getElementById('changeText').value.includes("http")) && (document.getElementById('changeText').value.includes("&sink"))){
|
||||
alert("Notice: The &sink command is domain specific.\nVisit https://YOURDOMAIN.com/electron instead.");
|
||||
}
|
||||
window.location = url;
|
||||
};
|
||||
getPermssions();
|
||||
|
||||
690
index.html
690
index.html
File diff suppressed because it is too large
Load Diff
290
main.css
290
main.css
@ -7,6 +7,7 @@
|
||||
--green-accent: #3f4f50;
|
||||
--olive-accent: #535D32;
|
||||
--regular-margin: 10px;
|
||||
--director-margin: 15px 20px 0 0;
|
||||
}
|
||||
|
||||
* {
|
||||
@ -649,17 +650,25 @@ button.btnArmTransferRoom.selected{
|
||||
|
||||
@keyframes pulse {
|
||||
0% {
|
||||
transform: scale(0.95);
|
||||
transform: scale(1);
|
||||
box-shadow: 0 0 0 0 rgba(14, 19, 26, 0.7);
|
||||
}
|
||||
70% {
|
||||
transform: scale(1);
|
||||
15% {
|
||||
transform: scale(1.2);
|
||||
box-shadow: 0 0 0 10px rgba(2, 3, 4, 0);
|
||||
}
|
||||
100% {
|
||||
50% {
|
||||
transform: scale(1.0);
|
||||
box-shadow: 0 0 0 0 rgba(14, 19, 26, 0);
|
||||
}
|
||||
85% {
|
||||
transform: scale(0.95);
|
||||
box-shadow: 0 0 0 0 rgba(14, 19, 26, 0);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
box-shadow: 0 0 0 0 rgba(14, 19, 26, 0);
|
||||
}
|
||||
}
|
||||
|
||||
.la-sliders-h {
|
||||
@ -754,9 +763,9 @@ body {
|
||||
padding: 10px 50px;
|
||||
}
|
||||
.gowebcam:enabled {
|
||||
background-color: #3C3;
|
||||
background-color: #3C3 !important;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
font-weight: bold !important;;
|
||||
}
|
||||
|
||||
.mainmenuclass {
|
||||
@ -801,7 +810,7 @@ body {
|
||||
display:none;
|
||||
background-color:#EFEFEF;
|
||||
padding:10px 12px 12px 2px;
|
||||
margin: 10px 0px 0px 10px;
|
||||
margin: 0px 0px 0px 10px;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
@ -980,6 +989,16 @@ input[type=range]:focus::-ms-fill-upper {
|
||||
min-width: 100% !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
#effectsDiv3 {
|
||||
max-width: 100% !important;
|
||||
min-width: 100% !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
#effectsDiv {
|
||||
max-width: 100% !important;
|
||||
min-width: 100% !important;
|
||||
overflow: hidden !important;
|
||||
}
|
||||
#headphonesDiv {
|
||||
max-width: 100% !important;
|
||||
min-width: 100% !important;
|
||||
@ -1068,7 +1087,7 @@ input[type=range]:focus::-ms-fill-upper {
|
||||
width: 505px;
|
||||
right: -400px;
|
||||
overflow: auto;
|
||||
z-index: 1;
|
||||
z-index: 3;
|
||||
}
|
||||
|
||||
#audioSourceScreenshare {
|
||||
@ -1347,6 +1366,11 @@ img {
|
||||
position: relative !important;
|
||||
top: 50% !important;
|
||||
}
|
||||
#calendarButton {
|
||||
cursor: pointer;
|
||||
z-index: 6;
|
||||
display:none;
|
||||
}
|
||||
#translateButton {
|
||||
cursor: pointer;
|
||||
z-index: 6;
|
||||
@ -1512,6 +1536,9 @@ img {
|
||||
}
|
||||
|
||||
video {
|
||||
transition: opacity .25s ease-in-out;
|
||||
-moz-transition: opacity .25s ease-in-out;
|
||||
-webkit-transition: opacity .25s ease-in-out;
|
||||
pointer-events: auto;
|
||||
background-color: transparent !important;
|
||||
border: 0;
|
||||
@ -1528,6 +1555,8 @@ video {
|
||||
background-image: url("data:image/svg+xml,%3Csvg viewBox='-42 0 512 512.002' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='m210.351562 246.632812c33.882813 0 63.222657-12.152343 87.195313-36.128906 23.972656-23.972656 36.125-53.304687 36.125-87.191406 0-33.875-12.152344-63.210938-36.128906-87.191406-23.976563-23.96875-53.3125-36.121094-87.191407-36.121094-33.886718 0-63.21875 12.152344-87.191406 36.125s-36.128906 53.308594-36.128906 87.1875c0 33.886719 12.15625 63.222656 36.132812 87.195312 23.976563 23.96875 53.3125 36.125 87.1875 36.125zm0 0'/%3E%3Cpath d='m426.128906 393.703125c-.691406-9.976563-2.089844-20.859375-4.148437-32.351563-2.078125-11.578124-4.753907-22.523437-7.957031-32.527343-3.308594-10.339844-7.808594-20.550781-13.371094-30.335938-5.773438-10.15625-12.554688-19-20.164063-26.277343-7.957031-7.613282-17.699219-13.734376-28.964843-18.199219-11.226563-4.441407-23.667969-6.691407-36.976563-6.691407-5.226563 0-10.28125 2.144532-20.042969 8.5-6.007812 3.917969-13.035156 8.449219-20.878906 13.460938-6.707031 4.273438-15.792969 8.277344-27.015625 11.902344-10.949219 3.542968-22.066406 5.339844-33.039063 5.339844-10.972656 0-22.085937-1.796876-33.046874-5.339844-11.210938-3.621094-20.296876-7.625-26.996094-11.898438-7.769532-4.964844-14.800782-9.496094-20.898438-13.46875-9.75-6.355468-14.808594-8.5-20.035156-8.5-13.3125 0-25.75 2.253906-36.972656 6.699219-11.257813 4.457031-21.003906 10.578125-28.96875 18.199219-7.605469 7.28125-14.390625 16.121094-20.15625 26.273437-5.558594 9.785157-10.058594 19.992188-13.371094 30.339844-3.199219 10.003906-5.875 20.945313-7.953125 32.523437-2.058594 11.476563-3.457031 22.363282-4.148437 32.363282-.679688 9.796875-1.023438 19.964844-1.023438 30.234375 0 26.726562 8.496094 48.363281 25.25 64.320312 16.546875 15.746094 38.441406 23.734375 65.066406 23.734375h246.53125c26.625 0 48.511719-7.984375 65.0625-23.734375 16.757813-15.945312 25.253906-37.585937 25.253906-64.324219-.003906-10.316406-.351562-20.492187-1.035156-30.242187zm0 0'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.nogb { background-image: unset !important }
|
||||
|
||||
video::-webkit-media-controls-timeline {
|
||||
display: none;
|
||||
}
|
||||
@ -1599,8 +1628,8 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
display: none;
|
||||
align-text: center;
|
||||
position: absolute;
|
||||
z-index: 10 !important;
|
||||
padding: 3px 0 !important;
|
||||
z-index: 21 !important;
|
||||
padding: 3px !important;
|
||||
min-width: 180px !important;
|
||||
background-color: #fff !important;
|
||||
border: solid 1px #dfdfdf !important;
|
||||
@ -1656,7 +1685,7 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
}
|
||||
#headphonesDiv3 {
|
||||
text-align: left;
|
||||
margin: 17px 0;
|
||||
margin: 17px 0 0 0;
|
||||
width: 450px;
|
||||
background-color: #f3f3f3;
|
||||
padding: 10px 10px;
|
||||
@ -1672,6 +1701,26 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
border: 1px solid #ccc;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#effectSelector3{
|
||||
background-color: #FFF;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
padding: 3px;
|
||||
font-size: 93%;
|
||||
max-width: 100%;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
#effectsDiv3 {
|
||||
text-align: left;
|
||||
width: 450px;
|
||||
background-color: #f3f3f3;
|
||||
padding: 10px 10px;
|
||||
border: 1px solid #ccc;
|
||||
vertical-align: middle;
|
||||
margin: 17px 0 0 0;
|
||||
}
|
||||
#videoSettings {
|
||||
margin: auto auto;
|
||||
background-color: #f3f3f3;
|
||||
@ -1695,6 +1744,12 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
font-size: 100%;
|
||||
max-width: 260px;
|
||||
}
|
||||
#effectSelector{
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
font-size: 100%;
|
||||
max-width: 260px;
|
||||
}
|
||||
.gone {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
@ -1719,18 +1774,22 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.hidden {
|
||||
display:none;
|
||||
visibility: hidden;
|
||||
width:0px;
|
||||
height:0px;
|
||||
}
|
||||
/* visited link */
|
||||
.grabLinks a:visited {
|
||||
color: black !important;
|
||||
}
|
||||
#videoSettings3 {
|
||||
margin: auto auto;
|
||||
margin: 0 auto 15px auto;
|
||||
background-color: #f3f3f3;
|
||||
width: 450px;
|
||||
padding: 10px 0;
|
||||
margin: 0 0 5px 0;
|
||||
padding: 7px 10px 1px 10px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 3px;
|
||||
font-size: 90%;
|
||||
}
|
||||
#videoSource3 {
|
||||
@ -1766,6 +1825,7 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
vertical-align: middle;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.multiselect {
|
||||
width: 450px;
|
||||
white-space: nowrap;
|
||||
@ -1920,6 +1980,7 @@ input[type=checkbox] {
|
||||
font-size: 105%;
|
||||
margin-left: 7px;
|
||||
padding: 3px;
|
||||
border: 3px solid black;
|
||||
}
|
||||
.debugStats {
|
||||
font-size: 0.8rem;
|
||||
@ -2039,6 +2100,9 @@ input[type=checkbox] {
|
||||
font-size: 100%;
|
||||
}
|
||||
}
|
||||
.directorMargins {
|
||||
margin: var(--director-margin);
|
||||
}
|
||||
.hideLinksClass {
|
||||
background-color: var(--container-color);
|
||||
width:1191px;
|
||||
@ -2065,7 +2129,7 @@ input[type=checkbox] {
|
||||
}
|
||||
.directorBlock {
|
||||
padding: 10px 10px 5px 10px;
|
||||
margin: 10px;
|
||||
margin: var(--regular-margin);
|
||||
color: white;
|
||||
position:relative;
|
||||
max-width: 100%;
|
||||
@ -2327,9 +2391,26 @@ span#guestTips {
|
||||
right: 2vh;
|
||||
background-color:green;
|
||||
position:absolute;
|
||||
display:none;
|
||||
border-radius: 2vh;
|
||||
pointer-events:none;
|
||||
border: 1px black solid;
|
||||
}
|
||||
|
||||
#voiceMeterTemplate{
|
||||
display:none;
|
||||
}
|
||||
|
||||
#userList{
|
||||
line-height: 1.3em;
|
||||
}
|
||||
|
||||
#userList > div > .video-meter {
|
||||
padding: 5px;
|
||||
margin-left: 5px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.video-mute-state {
|
||||
@ -2342,6 +2423,16 @@ span#guestTips {
|
||||
padding: 2px 2px 2px 1px;
|
||||
}
|
||||
|
||||
.video-mute-state-userlist {
|
||||
display:inline-block;
|
||||
color:white;
|
||||
border-radius: 2vh;
|
||||
background-color:#b11313;
|
||||
padding: 2.2px 1.5px 2px 2px;
|
||||
margin: 0 0 0 5px;
|
||||
}
|
||||
|
||||
|
||||
#help_directors_room{
|
||||
cursor:pointer;
|
||||
}
|
||||
@ -2502,7 +2593,7 @@ input:checked + .slider:before {
|
||||
transform: translateX(16px);
|
||||
}
|
||||
|
||||
.alertModal {
|
||||
#promptModal {
|
||||
position: absolute;
|
||||
background-color: rgb(221 221 221);
|
||||
box-shadow: 0 0 30px 10px #0000005c;
|
||||
@ -2513,9 +2604,103 @@ input:checked + .slider:before {
|
||||
transform: translate(-50%, -50%);
|
||||
border-radius: 10px;
|
||||
font-weight: bold;
|
||||
z-index:2;
|
||||
width:400px;
|
||||
z-index:31;
|
||||
min-width:400px;
|
||||
max-width:90%;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
.largeTextEntry {
|
||||
width:300px;
|
||||
margin: 0 0 0 55px;
|
||||
font-size: 1em;
|
||||
padding: 0.4em;
|
||||
display: block;
|
||||
|
||||
}
|
||||
.promptModalInner {
|
||||
position: relative;
|
||||
padding: 1em;
|
||||
}
|
||||
#SafariWarning{
|
||||
display:none;
|
||||
width: 450px;
|
||||
border-left: 4px solid #eff150;
|
||||
background: #fffded;
|
||||
padding: 10px;
|
||||
align-items: center;
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 0px 5px 10px -5px #a9a9a9;
|
||||
text-align: left;
|
||||
}
|
||||
#SafariWarning > p {
|
||||
text-align: left;
|
||||
display:inline-block;
|
||||
padding-left: 38px;
|
||||
|
||||
}
|
||||
#SafariWarning > i {
|
||||
position: absolute;
|
||||
font-size: 2em;
|
||||
padding: 2px 0 0 0;
|
||||
}
|
||||
|
||||
#alertModal {
|
||||
position: absolute;
|
||||
background-color: rgb(221 221 221);
|
||||
box-shadow: 0 0 30px 10px #0000005c;
|
||||
color: black;
|
||||
font-size: 1.2em;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
border-radius: 10px;
|
||||
font-weight: bold;
|
||||
z-index:32;
|
||||
min-width:360px;
|
||||
max-width:90%;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
#connectUsers{
|
||||
float: right;
|
||||
display: none;
|
||||
position: absolute;
|
||||
max-width: 400px;
|
||||
min-width: 150px;
|
||||
max-height: 80%;
|
||||
background-color: #08090e;
|
||||
z-index: 5;
|
||||
padding: 10px;
|
||||
right: 20px;
|
||||
bottom: 120px;
|
||||
box-shadow: 2px 2px #313131;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #252525;
|
||||
opacity: 0.7;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#alertModal a:link {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
/* visited link */
|
||||
#alertModal a:visited {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
/* mouse over link */
|
||||
#alertModal a:hover {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
/* selected link */
|
||||
#alertModal a:active {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.alertModalInner {
|
||||
@ -2523,7 +2708,7 @@ input:checked + .slider:before {
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
.alertModalClose {
|
||||
.modalClose {
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
right: 4px;
|
||||
@ -2532,7 +2717,7 @@ input:checked + .slider:before {
|
||||
font-size: 1.8em;
|
||||
}
|
||||
|
||||
.alertModalBackdrop {
|
||||
#modalBackdrop {
|
||||
background: var(--background-color);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
@ -2547,4 +2732,65 @@ input:checked + .slider:before {
|
||||
.alertModal {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
.desktop-capturer-selection {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background: rgba(30,30,30,.75);
|
||||
color: #fff;
|
||||
z-index: 10000000;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.desktop-capturer-selection__scroller {
|
||||
width: 100%;
|
||||
max-height: 100vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.desktop-capturer-selection__list {
|
||||
max-width: calc(100% - 100px);
|
||||
margin: 50px;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
list-style: none;
|
||||
overflow: hidden;
|
||||
justify-content: center;
|
||||
}
|
||||
.desktop-capturer-selection__item {
|
||||
display: flex;
|
||||
margin: 4px;
|
||||
}
|
||||
.desktop-capturer-selection__btn {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
width: 145px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
border-radius: 3px;
|
||||
padding: 4px;
|
||||
background: #252626;
|
||||
text-align: left;
|
||||
transition: background-color .15s, box-shadow .15s;
|
||||
}
|
||||
.desktop-capturer-selection__btn:hover,
|
||||
.desktop-capturer-selection__btn:focus {
|
||||
background: rgba(98,100,167,.8);
|
||||
}
|
||||
.desktop-capturer-selection__thumbnail {
|
||||
width: 100%;
|
||||
height: 81px;
|
||||
object-fit: cover;
|
||||
}
|
||||
.desktop-capturer-selection__name {
|
||||
margin: 6px 0 6px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
BIN
media/bg_sample.webp
Normal file
BIN
media/bg_sample.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
media/bg_sample2.webp
Normal file
BIN
media/bg_sample2.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
BIN
media/streamdeck.png
Normal file
BIN
media/streamdeck.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
567
monitor.html
Normal file
567
monitor.html
Normal file
@ -0,0 +1,567 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>OBSN Monitoring</title>
|
||||
<style>
|
||||
|
||||
body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
text-rendering: optimizeLegibility;
|
||||
font-family: "Lato", sans-serif;
|
||||
padding: 0 0px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
border: 0;
|
||||
margin: 0;
|
||||
opacity: 1;
|
||||
transition: opacity .1s linear;
|
||||
background-color: #141926;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: white;
|
||||
margin: 5px 20px;
|
||||
}
|
||||
|
||||
h1 small {
|
||||
display: block;
|
||||
margin-top: 0.5em;
|
||||
font-size: 0.5em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #CCC;
|
||||
margin-top:10px;
|
||||
}
|
||||
|
||||
#explanation {
|
||||
color: white;
|
||||
font-family: sans-serif;
|
||||
width: 80%;
|
||||
margin: 0 auto;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#container, #graphs, #log {
|
||||
width: 80%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
|
||||
#explanation h2 {
|
||||
border-bottom: 1px solid #383838;
|
||||
margin-bottom: 10px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
#feeds {
|
||||
display: inline-block;
|
||||
width:100%;
|
||||
height:380px;
|
||||
|
||||
}
|
||||
|
||||
#feeds span {
|
||||
margin:auto;
|
||||
height: 100%;
|
||||
min-width:50%;
|
||||
display: inline-block;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#button_container{
|
||||
margin:auto;
|
||||
}
|
||||
#feeds h3 {
|
||||
color: whitesmoke;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
iframe {
|
||||
height: 85%;
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
#controls {
|
||||
margin:auto;
|
||||
}
|
||||
|
||||
#controls button {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
#controls button.active {
|
||||
background-color: #70ff70;
|
||||
}
|
||||
|
||||
canvas {
|
||||
background-color: black;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
#log {
|
||||
margin-top: 10px;
|
||||
background: #313131;
|
||||
padding: 20px 0px;
|
||||
border: 1px solid #383838;
|
||||
cursor: pointer;
|
||||
max-height:300px;
|
||||
}
|
||||
|
||||
#log ul {
|
||||
margin: 20px;
|
||||
list-style: none;
|
||||
color: #cacaca;
|
||||
max-height: 20vh;
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
#graphs {
|
||||
display: block;
|
||||
margin-top: 20px;
|
||||
background: #313131;
|
||||
padding: 20px 0px;
|
||||
border: 1px solid #383838;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.graphContainer {
|
||||
display: block;
|
||||
margin-top: 20px;
|
||||
background: #313131;
|
||||
border: 1px solid #383838;
|
||||
}
|
||||
|
||||
.graph {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.graph h2, #log h2 {
|
||||
margin: 10px 20px 0 20px;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.graph > span {
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
left: 30px;
|
||||
color: #cacaca;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin-left: 20px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
|
||||
@media only screen and (max-width: 800px) {
|
||||
|
||||
#container, #graphs, #log {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#graphs {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
iframe {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#feeds {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#feeds h3 {
|
||||
font-size:50%;
|
||||
}
|
||||
|
||||
h1{
|
||||
color: white;
|
||||
margin: 2px;
|
||||
font-size:70%
|
||||
}
|
||||
|
||||
#feeds span{
|
||||
height: 50%;
|
||||
width:100%;
|
||||
display: inline-block;
|
||||
}
|
||||
canvas {
|
||||
margin:auto;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#statsdiv {display: none;}
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
<script>
|
||||
|
||||
function getChromeVersion() {
|
||||
var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
|
||||
return raw ? parseInt(raw[2], 10) : false;
|
||||
}
|
||||
if (!getChromeVersion()){
|
||||
alert("This speedtest is optimized for Chromium-based browsers; graphs will not work for Firefox or Safari browsers.");
|
||||
}
|
||||
|
||||
(function (w) {
|
||||
w.URLSearchParams =
|
||||
w.URLSearchParams ||
|
||||
function (searchString) {
|
||||
var self = this;
|
||||
self.searchString = searchString;
|
||||
self.get = function (name) {
|
||||
var results = new RegExp("[\?&]" + name + "=([^&#]*)").exec(
|
||||
self.searchString
|
||||
);
|
||||
if (results == null) {
|
||||
return null;
|
||||
} else {
|
||||
return decodeURI(results[1]) || 0;
|
||||
}
|
||||
};
|
||||
};
|
||||
})(window);
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
var quality_reason = {};
|
||||
var video_encoder={};
|
||||
var resolution={};
|
||||
|
||||
function copyFunction(copyText) {
|
||||
try {
|
||||
copyText.select();
|
||||
copyText.setSelectionRange(0, 99999);
|
||||
document.execCommand("copy");
|
||||
} catch (e) {
|
||||
var dummy = document.createElement("input");
|
||||
document.body.appendChild(dummy);
|
||||
dummy.value = copyText;
|
||||
dummy.select();
|
||||
document.execCommand("copy");
|
||||
document.body.removeChild(dummy);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function loadIframe() {
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
|
||||
if (urlParams.has("remote")) {
|
||||
var remote = urlParams.get("remote");
|
||||
} else {
|
||||
var remote="";
|
||||
}
|
||||
|
||||
if (urlParams.has("sid")) {
|
||||
var streamID = urlParams.get("sid");
|
||||
} else if (urlParams.has("view")) {
|
||||
var streamID = urlParams.get("view");
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (document.getElementById("streamID_header")){
|
||||
document.getElementById("streamID_header").innerText += ": "+streamID;
|
||||
}
|
||||
|
||||
var room="";
|
||||
if (urlParams.has("room")) {
|
||||
room = "&room="+urlParams.get("room");
|
||||
}
|
||||
|
||||
var password="";
|
||||
if (urlParams.has("password")) {
|
||||
password = "&password="+urlParams.get("password");
|
||||
}
|
||||
|
||||
iframe.allow = "autoplay";
|
||||
var srcString = "./?view=" + streamID + room + password + "&vd=0&ad=0&autostart&novideo&noaudio&remote="+remote;
|
||||
|
||||
|
||||
iframe.src = srcString;
|
||||
iframe.style.width="0";
|
||||
iframe.style.height="0";
|
||||
iframe.style.border="0";
|
||||
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
setInterval(function () {
|
||||
iframe.contentWindow.postMessage({ getRemoteStats: true }, "*");
|
||||
}, 3000);
|
||||
|
||||
var eventMethod = window.addEventListener
|
||||
? "addEventListener"
|
||||
: "attachEvent";
|
||||
var eventer = window[eventMethod];
|
||||
var messageEvent = eventMethod === "attachEvent" ? "onmessage" : "message";
|
||||
var previousResolution;
|
||||
|
||||
eventer(messageEvent, function (e) {
|
||||
if ("remoteStats" in e.data) {
|
||||
var out = "";
|
||||
console.log(e.data);
|
||||
|
||||
for (var UUID in e.data.remoteStats) {
|
||||
|
||||
if (e.data.remoteStats[UUID].quality_limitation_reason){
|
||||
if (quality_reason[UUID] != e.data.remoteStats[UUID].quality_limitation_reason) {
|
||||
quality_reason[UUID] = e.data.remoteStats[UUID].quality_limitation_reason;
|
||||
logData("Quality Limitation Reason:", quality_reason[UUID], UUID);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.data.remoteStats[UUID].video_encoder){
|
||||
if (video_encoder[UUID] != e.data.remoteStats[UUID].video_encoder) {
|
||||
video_encoder[UUID] = e.data.remoteStats[UUID].video_encoder;
|
||||
logData("Video encoder used:", video_encoder[UUID], UUID);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.data.remoteStats[UUID].resolution){
|
||||
if (resolution[UUID] != e.data.remoteStats[UUID].resolution) {
|
||||
resolution[UUID] = e.data.remoteStats[UUID].resolution;
|
||||
logData("Resolution:", resolution[UUID], UUID);
|
||||
}
|
||||
}
|
||||
|
||||
if (e.data.remoteStats[UUID].video_bitrate_kbps){
|
||||
var video_bitrate_kbps = e.data.remoteStats[UUID].video_bitrate_kbps;
|
||||
updateData("bitrate", video_bitrate_kbps, UUID);
|
||||
} else if (document.getElementById(UUID)){
|
||||
updateData("bitrate", 0, UUID);
|
||||
}
|
||||
|
||||
if (e.data.remoteStats[UUID].nacks_per_second){
|
||||
var nacks_per_second = e.data.remoteStats[UUID].nacks_per_second;
|
||||
updateData("nackrate", nacks_per_second, UUID);
|
||||
} else if (document.getElementById(UUID)){
|
||||
updateData("nackrate", 0, UUID);
|
||||
}
|
||||
|
||||
if (e.data.remoteStats[UUID].retransmitted_kbps){
|
||||
var retransmitted_kbps = e.data.remoteStats[UUID].retransmitted_kbps;
|
||||
updateData("retransmit", retransmitted_kbps, UUID);
|
||||
} else if (document.getElementById(UUID)){
|
||||
updateData("retransmit", 0, UUID);
|
||||
}
|
||||
|
||||
if (e.data.remoteStats[UUID].info.label){
|
||||
if (!document.getElementById("label_"+UUID)){
|
||||
document.getElementById(UUID).innerHTML = "<h1 class='small' id='label_"+UUID+"'></h1>" + document.getElementById(UUID).innerHTML;
|
||||
}
|
||||
document.getElementById("label_"+UUID).innerText = e.data.remoteStats[UUID].info.label;
|
||||
}
|
||||
|
||||
|
||||
//updateData("buffer", buffer);
|
||||
|
||||
//if (packetloss != undefined) {
|
||||
// packetloss = packetloss.toFixed(2);
|
||||
// updateData("packetloss", packetloss);
|
||||
//}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function printValues(obj) {
|
||||
var out = "";
|
||||
for (var key in obj) {
|
||||
if (typeof obj[key] === "object") {
|
||||
out += "<br />";
|
||||
out += printValues(obj[key]);
|
||||
} else {
|
||||
if (key.startsWith("_")) {
|
||||
} else {
|
||||
out += "<b>" + key + "</b>: " + obj[key] + "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function logData(type, data, UUID) {
|
||||
try{
|
||||
var log = document.getElementById(UUID).querySelectorAll('[data-log]')[0].getElementsByTagName("ul")[0];
|
||||
var entry = document.createElement('li');
|
||||
entry.style.color ="white";
|
||||
entry.textContent = "[" + new Date().toLocaleTimeString() + "] " + type + " : " + data;
|
||||
if (log.childElementCount>10){
|
||||
log.childNodes[0].parentNode.removeChild(log.childNodes[0]);
|
||||
}
|
||||
log.appendChild(entry);
|
||||
} catch(e){}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="loadIframe();">
|
||||
<div id="container">
|
||||
<h1 >
|
||||
<span id="streamID_header">OBS.Ninja Remote Monitor</span>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div id="graphs" style="display:none">
|
||||
|
||||
|
||||
|
||||
<div class="graph">
|
||||
<h2>Bitrate (kbps)</h2>
|
||||
<span>0</span>
|
||||
<canvas data-bitrate-graph="true"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="graph">
|
||||
<h2>Reported lost packets (per second)</h2>
|
||||
<span>0</span>
|
||||
<canvas data-nackrate-graph="true"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="graph">
|
||||
<h2>Retransmitted (kbps)</h2>
|
||||
<span>0</span>
|
||||
<canvas data-retransmit-graph="true"></canvas>
|
||||
</div>
|
||||
|
||||
<div data-log="true" onclick="copyFunction(this.innerText)" style="max-height:400px;display:inline-block;">
|
||||
<ul></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
var bitrate = {
|
||||
element: "bitrate-graph",
|
||||
data: 0,
|
||||
max: 6000,
|
||||
target: 3000,
|
||||
};
|
||||
var frames;
|
||||
var nackrate = {
|
||||
element: "nackrate-graph",
|
||||
data: 0,
|
||||
max: 15,
|
||||
target: 15,
|
||||
};
|
||||
var retransmit = {
|
||||
element: "retransmit-graph",
|
||||
data: 0,
|
||||
max: 100,
|
||||
target: 100,
|
||||
};
|
||||
|
||||
function updateData(type, data, UUID) {
|
||||
if (type == "bitrate") {
|
||||
bitrate.data = data;
|
||||
plotData("bitrate", bitrate, UUID);
|
||||
}
|
||||
|
||||
if (type == "nackrate") {
|
||||
nackrate.data = data;
|
||||
plotData("nackrate", nackrate, UUID);
|
||||
}
|
||||
|
||||
if (type == "retransmit") {
|
||||
retransmit.data = data;
|
||||
plotData("retransmit", retransmit, UUID);
|
||||
}
|
||||
}
|
||||
|
||||
function plotData(type, stat, UUID) {
|
||||
var canvas;
|
||||
var context;
|
||||
var yScale;
|
||||
|
||||
var container = document.getElementById(UUID);
|
||||
if (container){
|
||||
canvas = container.querySelectorAll('[data-'+stat.element+']')[0];
|
||||
|
||||
} else {
|
||||
container = document.getElementById("graphs").cloneNode(true);
|
||||
container.id = UUID;
|
||||
container.className = "graphContainer";
|
||||
container.style.display = "block";
|
||||
document.getElementById("graphs").parentNode.insertBefore(container, document.getElementById("graphs").nextSibling);
|
||||
canvas = container.querySelectorAll('[data-'+stat.element+']')[0];
|
||||
}
|
||||
|
||||
context = canvas.getContext("2d");
|
||||
|
||||
if (isNaN(stat.data)) {
|
||||
stat.data = 0;
|
||||
}
|
||||
|
||||
var text = (canvas.previousElementSibling.innerHTML = stat.data);
|
||||
|
||||
var height = context.canvas.height;
|
||||
var width = context.canvas.width;
|
||||
|
||||
var borderWidth = 5;
|
||||
var offset = borderWidth * 2;
|
||||
|
||||
// Create gradient
|
||||
var grd = context.createLinearGradient(0, 0, 0, height);
|
||||
|
||||
if (type == "bitrate") {
|
||||
// Higher values are green
|
||||
grd.addColorStop(0, "#33C433");
|
||||
grd.addColorStop(0.7, "#F3F304");
|
||||
grd.addColorStop(0.9, "#F30404");
|
||||
} else {
|
||||
// Higher values are red
|
||||
grd.addColorStop(0, "#F30404");
|
||||
grd.addColorStop(0.85, "#F3F304");
|
||||
grd.addColorStop(0.95, "#33C433");
|
||||
}
|
||||
|
||||
context.strokeStyle = "white";
|
||||
context.fillStyle = grd;
|
||||
//context.fillStyle = "#009933";
|
||||
//context.imageSmoothingEnabled = true;
|
||||
|
||||
yScale = height / stat.target;
|
||||
|
||||
if (stat.data > stat.target) {
|
||||
stat.data = stat.target;
|
||||
}
|
||||
|
||||
if (type == "retransmit" && stat.data == 0.0) {
|
||||
stat.data = 0.5;
|
||||
}
|
||||
if (type == "nackrate" && stat.data == 0.0) {
|
||||
stat.data = 0.1;
|
||||
}
|
||||
|
||||
var x = width - 1;
|
||||
var y = height - stat.data * yScale;
|
||||
var w = 1;
|
||||
|
||||
context.fillStyle = grd;
|
||||
context.fillRect(x, y, w, height);
|
||||
|
||||
// shift everything to the left:
|
||||
var imageData = context.getImageData(1, 0, width - 1, height);
|
||||
context.putImageData(imageData, 0, 0);
|
||||
// now clear the right-most pixels:
|
||||
context.clearRect(width - 1, 0, 1, height);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@ -116,7 +116,15 @@ canvas {
|
||||
padding: 20px 0px;
|
||||
border: 1px solid #383838;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.graphContainer {
|
||||
display: block;
|
||||
margin-top: 20px;
|
||||
background: #313131;
|
||||
padding: 20px 0px;
|
||||
border: 1px solid #383838;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.graph {
|
||||
|
||||
@ -59,13 +59,18 @@
|
||||
// this is pretty important if you want to avoid camera permission popup problems. YOu need to load the iFRAME after you load the parent body. A quick solution is like: <body onload=>loadIframe();"> !!!
|
||||
|
||||
var streamID = "";
|
||||
var possible =
|
||||
"ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
|
||||
var possible = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
|
||||
for (var i = 0; i < 7; i++) {
|
||||
streamID += possible.charAt(
|
||||
Math.floor(Math.random() * possible.length)
|
||||
);
|
||||
}
|
||||
|
||||
if (urlParams.has("sid")) {
|
||||
streamID = urlParams.get("sid");
|
||||
}
|
||||
|
||||
document.getElementById("remote").innerHTML = "<a style='color:#CCC' href='./monitor?sid="+streamID+"'>Remote Monitoring Link</a><br /><br /><br /><br />";
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
var iframeContainer = document.createElement("span");
|
||||
@ -75,7 +80,7 @@
|
||||
iframe.allowfullscreen ="true";
|
||||
|
||||
//iframe.allow = "autoplay";
|
||||
var srcString = "./?push=" + streamID + "&cleanoutput&privacy&speedtest&webcam&audiodevice=0&fullscreen&transparent";
|
||||
var srcString = "./?push=" + streamID + "&cleanoutput&privacy&speedtest&webcam&audiodevice=0&fullscreen&transparent&remote";
|
||||
|
||||
if (urlParams.has("turn")) {
|
||||
srcString = srcString + "&turn=" + urlParams.get("turn");
|
||||
@ -115,7 +120,7 @@
|
||||
var iframeContainer = document.createElement("span");
|
||||
|
||||
iframe.allow = "autoplay";
|
||||
var srcString = "./?view=" + streamID + "&cleanoutput&privacy&noaudio&scale=0";
|
||||
var srcString = "./?view=" + streamID + "&cleanoutput&privacy&noaudio&speedtest&scale=0";
|
||||
|
||||
if (urlParams.has("turn")) {
|
||||
srcString = srcString + "&turn=" + urlParams.get("turn");
|
||||
@ -187,13 +192,12 @@
|
||||
? "addEventListener"
|
||||
: "attachEvent";
|
||||
var eventer = window[eventMethod];
|
||||
var messageEvent =
|
||||
eventMethod === "attachEvent" ? "onmessage" : "message";
|
||||
var messageEvent = eventMethod === "attachEvent" ? "onmessage" : "message";
|
||||
var previousResolution;
|
||||
|
||||
eventer(messageEvent, function (e) {
|
||||
if ("action" in e.data) {
|
||||
logData(e.data.action, e.data.value);
|
||||
logData(e.data.action, e.data.value || "");
|
||||
|
||||
if (e.data.action == "new-view-connection") {
|
||||
buttonContainer.querySelectorAll(
|
||||
@ -230,9 +234,9 @@
|
||||
}
|
||||
|
||||
for (var streamID in e.data.stats.outbound_stats) {
|
||||
if (e.data.stats.outbound_stats[streamID].quality_Limitation_Reason){
|
||||
if (quality_reason != e.data.stats.outbound_stats[streamID].quality_Limitation_Reason) {
|
||||
quality_reason = e.data.stats.outbound_stats[streamID].quality_Limitation_Reason;
|
||||
if (e.data.stats.outbound_stats[streamID].quality_limitation_reason){
|
||||
if (quality_reason != e.data.stats.outbound_stats[streamID].quality_limitation_reason) {
|
||||
quality_reason = e.data.stats.outbound_stats[streamID].quality_limitation_reason;
|
||||
logData("Quality Limitation Reason:", quality_reason);
|
||||
}
|
||||
}
|
||||
@ -357,7 +361,9 @@
|
||||
Change the video bitrate by pressing the buttons below the video. It
|
||||
should approach 6000-kbps if the network allows.
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
<div id="remote"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
172
status.html
Normal file
172
status.html
Normal file
@ -0,0 +1,172 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>OBSN Chat Overlay</title>
|
||||
<style>
|
||||
|
||||
@font-face {
|
||||
font-family: 'Cousine';
|
||||
src: url('fonts/Cousine-Bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
padding:0 10px;
|
||||
height:100%;
|
||||
border: 0;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
position:absolute;
|
||||
bottom:0;
|
||||
overflow:hidden;
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin:0;
|
||||
background-color: #0000;
|
||||
color: white;
|
||||
font-family: Cousine, monospace;
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1em;
|
||||
letter-spacing: 0.0em;
|
||||
text-transform: uppercase;
|
||||
padding: 0em;
|
||||
text-shadow: 0.05em 0.05em 0px rgba(0,0,0,1);
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
ul li {
|
||||
background-color: black;
|
||||
padding: 8px 8px 0px 8px;
|
||||
margin:0;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
a {
|
||||
color:white;
|
||||
font-size:1.2em;
|
||||
text-transform: none;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
|
||||
|
||||
(function (w) {
|
||||
w.URLSearchParams =
|
||||
w.URLSearchParams ||
|
||||
function (searchString) {
|
||||
var self = this;
|
||||
self.searchString = searchString;
|
||||
self.get = function (name) {
|
||||
var results = new RegExp("[\?&]" + name + "=([^&#]*)").exec(
|
||||
self.searchString
|
||||
);
|
||||
if (results == null) {
|
||||
return null;
|
||||
} else {
|
||||
return decodeURI(results[1]) || 0;
|
||||
}
|
||||
};
|
||||
};
|
||||
})(window);
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
|
||||
function loadIframe() {
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
|
||||
var view= "";
|
||||
if (urlParams.has("view")) {
|
||||
view = "&view="+(urlParams.get("view") || "");
|
||||
}
|
||||
var room="";
|
||||
if (urlParams.has("room")) {
|
||||
room = "&room="+urlParams.get("room");
|
||||
}
|
||||
|
||||
var password="";
|
||||
if (urlParams.has("password")) {
|
||||
password = "&password="+urlParams.get("password");
|
||||
}
|
||||
|
||||
iframe.allow = "autoplay";
|
||||
var srcString = "./?novideo&noaudio&label=chatOverlay&scene"+room+view+password;
|
||||
|
||||
iframe.src = srcString;
|
||||
iframe.style.width="0";
|
||||
iframe.style.height="0";
|
||||
iframe.style.border="0";
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
//////////// LISTEN FOR EVENTS
|
||||
|
||||
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
|
||||
var eventer = window[eventMethod];
|
||||
var messageEvent = eventMethod === "attachEvent" ? "onmessage" : "message";
|
||||
|
||||
|
||||
/// If you have a routing system setup, you could have just one global listener for all iframes instead.
|
||||
|
||||
eventer(messageEvent, function (e) {
|
||||
if (e.source != iframe.contentWindow){return} // reject messages send from other iframes
|
||||
|
||||
console.log(e);
|
||||
if ("gotChat" in e.data){
|
||||
logData(e.data.gotChat.label,e.data.gotChat.msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function printValues(obj) {
|
||||
var out = "";
|
||||
for (var key in obj) {
|
||||
if (typeof obj[key] === "object") {
|
||||
out += "<br />";
|
||||
out += printValues(obj[key]);
|
||||
} else {
|
||||
if (key.startsWith("_")) {
|
||||
} else {
|
||||
out += "<b>" + key + "</b>: " + obj[key] + "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function logData(type, data) {
|
||||
var log = document.body.getElementsByTagName("ul")[0];
|
||||
var entry = document.createElement('li');
|
||||
if (type){
|
||||
type = "<i>"+type+"</i>";
|
||||
}
|
||||
entry.innerHTML = type + data;
|
||||
|
||||
//setTimeout(function(entry){ // hide message after 60 seconds
|
||||
// entry.innerHTML="";
|
||||
// entry.remove();
|
||||
// },60000,entry);
|
||||
|
||||
log.appendChild(entry);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="loadIframe();">
|
||||
<ul></ul>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
130
supports.html
130
supports.html
@ -37,6 +37,16 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
function getChromeVersion() {
|
||||
var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
|
||||
return raw ? parseInt(raw[2], 10) : false;
|
||||
}
|
||||
|
||||
if (!getChromeVersion() || getChromeVersion < 60){
|
||||
alert("This tool really only works with recent Chromium based browsers; Firefox or Safari are not supported");
|
||||
}
|
||||
|
||||
function prettyPrintJsonToId(json, element) {
|
||||
var output = "<div class='prettyJson three-col'>";
|
||||
|
||||
@ -97,13 +107,18 @@
|
||||
function changeCamera() {
|
||||
var deviceId = document.getElementById("cameraSelector").value;
|
||||
getCameraDetails(deviceId);
|
||||
|
||||
}
|
||||
|
||||
function getCameraDetails(deviceId) {
|
||||
console.log(deviceId);
|
||||
navigator.mediaDevices
|
||||
.getUserMedia({
|
||||
video: {
|
||||
deviceId: deviceId,
|
||||
deviceId: {exact: deviceId},
|
||||
zoom: true,
|
||||
pan: true,
|
||||
tilt: true
|
||||
},
|
||||
audio: false,
|
||||
})
|
||||
@ -111,49 +126,98 @@
|
||||
console.log("worked");
|
||||
setTimeout(function () {
|
||||
mediaStream.getVideoTracks().forEach((track) => {
|
||||
const capabilities = track.getCapabilities();
|
||||
const settings = track.getSettings();
|
||||
prettyPrintSupportedOptions(capabilities, "cameraSupportedOptions");
|
||||
document
|
||||
try{
|
||||
const capabilities = track.getCapabilities();
|
||||
const settings = track.getSettings();
|
||||
prettyPrintSupportedOptions(capabilities, "cameraSupportedOptions");
|
||||
document
|
||||
.querySelectorAll(".property")
|
||||
.forEach((el) => el.classList.remove("ok"));
|
||||
|
||||
Object.entries(capabilities)
|
||||
.sort()
|
||||
.forEach(([key, value]) => {
|
||||
document.getElementById(key).classList.add("ok");
|
||||
});
|
||||
prettyPrintJsonToId(settings, "cameraSettings");
|
||||
} catch (e){
|
||||
document
|
||||
.querySelectorAll(".property")
|
||||
.forEach((el) => el.classList.remove("ok"));
|
||||
|
||||
Object.entries(capabilities)
|
||||
.sort()
|
||||
.forEach(([key, value]) => {
|
||||
document.getElementById(key).classList.add("ok");
|
||||
});
|
||||
prettyPrintJsonToId(settings, "cameraSettings");
|
||||
}
|
||||
});
|
||||
}, 1000);
|
||||
}).catch(function(e){
|
||||
setTimeout(function(){getCameraDetailsFallback(deviceId)},0);
|
||||
})
|
||||
}
|
||||
|
||||
function getCameraDetailsFallback(deviceId) {
|
||||
console.log(deviceId);
|
||||
navigator.mediaDevices
|
||||
.getUserMedia({
|
||||
video: {
|
||||
deviceId: deviceId
|
||||
},
|
||||
audio: false,
|
||||
})
|
||||
.then(function (mediaStream) {
|
||||
console.log("worked");
|
||||
setTimeout(function () {
|
||||
mediaStream.getVideoTracks().forEach((track) => {
|
||||
try{
|
||||
const capabilities = track.getCapabilities();
|
||||
const settings = track.getSettings();
|
||||
prettyPrintSupportedOptions(capabilities, "cameraSupportedOptions");
|
||||
document
|
||||
.querySelectorAll(".property")
|
||||
.forEach((el) => el.classList.remove("ok"));
|
||||
|
||||
Object.entries(capabilities)
|
||||
.sort()
|
||||
.forEach(([key, value]) => {
|
||||
document.getElementById(key).classList.add("ok");
|
||||
});
|
||||
prettyPrintJsonToId(settings, "cameraSettings");
|
||||
} catch (e){
|
||||
document
|
||||
.querySelectorAll(".property")
|
||||
.forEach((el) => el.classList.remove("ok"));
|
||||
}
|
||||
});
|
||||
}, 1000);
|
||||
//updateDeviceList();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
var supports = navigator.mediaDevices.getSupportedConstraints();
|
||||
prettyPrintJsonToId(supports, "browserSupportedOptions");
|
||||
document.getElementById("browserSupportedOptionsTitle").innerText +=
|
||||
" (" + Object.keys(supports).length + ")";
|
||||
|
||||
navigator.mediaDevices
|
||||
.enumerateDevices()
|
||||
.then(function (devices) {
|
||||
setTimeout(function () {
|
||||
console.log("Listing devices");
|
||||
devices.forEach(function (device) {
|
||||
if (device.kind == "videoinput") {
|
||||
var element = document.createElement("option");
|
||||
element.setAttribute("value", device.deviceId);
|
||||
element.innerText = device.label;
|
||||
document.getElementById("cameraSelector").appendChild(element);
|
||||
console.log(device);
|
||||
}
|
||||
});
|
||||
getCameraDetails(devices[0]);
|
||||
}, 1000);
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.log(err.name + ": " + err.message);
|
||||
});
|
||||
function updateDeviceList(){
|
||||
navigator.mediaDevices
|
||||
.enumerateDevices()
|
||||
.then(function (devices) {
|
||||
setTimeout(function (devices) {
|
||||
console.log("Listing devices");
|
||||
devices.forEach(function (device) {
|
||||
if (device.kind == "videoinput") {
|
||||
var element = document.createElement("option");
|
||||
element.setAttribute("value", device.deviceId);
|
||||
element.innerText = device.label || "No Label Available";
|
||||
document.getElementById("cameraSelector").appendChild(element);
|
||||
console.log(device);
|
||||
}
|
||||
});
|
||||
setTimeout(function(){changeCamera();},10);
|
||||
}, 1000, devices);
|
||||
})
|
||||
.catch(function (err) {
|
||||
console.log(err.name + ": " + err.message);
|
||||
});
|
||||
}
|
||||
updateDeviceList();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
173
thirdparty/CodecsHandler.js
vendored
173
thirdparty/CodecsHandler.js
vendored
@ -39,6 +39,10 @@ var CodecsHandler = (function() {
|
||||
return sdp;
|
||||
} else if (codecName === 'av1' && info.av1LineNumber === info.videoCodecNumbers[0]) {
|
||||
return sdp;
|
||||
} else if (codecName === 'red' && info.redLineNumber === info.videoCodecNumbers[0]) {
|
||||
return sdp;
|
||||
} else if (codecName === 'fec' && info.fecLineNumber === info.videoCodecNumbers[0]) {
|
||||
return sdp;
|
||||
}
|
||||
|
||||
sdp = preferCodecHelper(sdp, codecName, info);
|
||||
@ -72,6 +76,18 @@ var CodecsHandler = (function() {
|
||||
return sdp;
|
||||
}
|
||||
preferCodecNumber = info.av1LineNumber;
|
||||
|
||||
} else if (codec === 'red') {
|
||||
if (!info.redLineNumber) {
|
||||
return sdp;
|
||||
}
|
||||
preferCodecNumber = info.redLineNumber;
|
||||
|
||||
} else if (codec === 'fec') {
|
||||
if (!info.fecLineNumber) {
|
||||
return sdp;
|
||||
}
|
||||
preferCodecNumber = info.fecLineNumber;
|
||||
}
|
||||
|
||||
var newLine = info.videoCodecNumbersOriginal.split('SAVPF')[0] + 'SAVPF ';
|
||||
@ -120,6 +136,14 @@ var CodecsHandler = (function() {
|
||||
|
||||
if (line.indexOf('AV1X/90000') !== -1 && !info.av1LineNumber) {
|
||||
info.av1LineNumber = line.replace('a=rtpmap:', '').split(' ')[0];
|
||||
}
|
||||
|
||||
if (line.indexOf('red/90000') !== -1 && !info.redLineNumber) {
|
||||
info.redLineNumber = line.replace('a=rtpmap:', '').split(' ')[0];
|
||||
}
|
||||
|
||||
if (line.indexOf('ulpfec/90000') !== -1 && !info.fecLineNumber) {
|
||||
info.fecLineNumber = line.replace('a=rtpmap:', '').split(' ')[0];
|
||||
}
|
||||
});
|
||||
|
||||
@ -136,11 +160,89 @@ var CodecsHandler = (function() {
|
||||
throw 'Invalid arguments.';
|
||||
}
|
||||
|
||||
sdp = sdp.replace('a=rtcp-fb:126 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:126 nack pli\r\n', 'a=rtcp-fb:126 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:97 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:35 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:35 nack pli\r\n', 'a=rtcp-fb:35 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:96 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:96 nack pli\r\n', 'a=rtcp-fb:96 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:97 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:97 nack pli\r\n', 'a=rtcp-fb:97 pli\r\n');
|
||||
|
||||
sdp = sdp.replace('a=rtcp-fb:98 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:98 nack pli\r\n', 'a=rtcp-fb:98 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:99 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:99 nack pli\r\n', 'a=rtcp-fb:99 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:100 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:100 nack pli\r\n', 'a=rtcp-fb:100 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:102 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:102 nack pli\r\n', 'a=rtcp-fb:102 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:108 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:108 nack pli\r\n', 'a=rtcp-fb:108 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:124 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:124 nack pli\r\n', 'a=rtcp-fb:124 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:123 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:123 nack pli\r\n', 'a=rtcp-fb:123 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:125 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:125 nack pli\r\n', 'a=rtcp-fb:125 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:126 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:126 nack pli\r\n', 'a=rtcp-fb:126 pli\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:127 nack\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:127 nack pli\r\n', 'a=rtcp-fb:127 pli\r\n');
|
||||
|
||||
return sdp;
|
||||
}
|
||||
|
||||
function disableREMB(sdp) {
|
||||
if (!sdp || typeof sdp !== 'string') {
|
||||
throw 'Invalid arguments.';
|
||||
}
|
||||
sdp = sdp.replace('a=rtcp-fb:35 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:96 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:97 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:98 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:99 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:100 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:102 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:108 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:124 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:123 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:125 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:126 goog-remb\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:127 goog-remb\r\n', '');
|
||||
|
||||
return sdp;
|
||||
}
|
||||
|
||||
function disablePLI(sdp) {
|
||||
if (!sdp || typeof sdp !== 'string') {
|
||||
throw 'Invalid arguments.';
|
||||
}
|
||||
|
||||
sdp = sdp.replace('a=rtcp-fb:35 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:35 nack pli\r\n', 'a=rtcp-fb:35 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:96 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:96 nack pli\r\n', 'a=rtcp-fb:96 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:97 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:97 nack pli\r\n', 'a=rtcp-fb:97 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:98 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:98 nack pli\r\n', 'a=rtcp-fb:98 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:99 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:99 nack pli\r\n', 'a=rtcp-fb:99 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:100 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:100 nack pli\r\n', 'a=rtcp-fb:100 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:102 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:102 nack pli\r\n', 'a=rtcp-fb:102 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:108 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:108 nack pli\r\n', 'a=rtcp-fb:108 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:124 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:124 nack pli\r\n', 'a=rtcp-fb:124 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:123 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:123 nack pli\r\n', 'a=rtcp-fb:123 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:125 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:125 nack pli\r\n', 'a=rtcp-fb:125 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:126 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:126 nack pli\r\n', 'a=rtcp-fb:126 nack\r\n');
|
||||
sdp = sdp.replace('a=rtcp-fb:127 pli\r\n', '');
|
||||
sdp = sdp.replace('a=rtcp-fb:127 nack pli\r\n', 'a=rtcp-fb:127 nack\r\n');
|
||||
|
||||
return sdp;
|
||||
}
|
||||
|
||||
@ -175,7 +277,7 @@ var CodecsHandler = (function() {
|
||||
|
||||
function getVideoBitrates(sdp) {
|
||||
|
||||
var defaultBitrate = 2500;
|
||||
var defaultBitrate = false;
|
||||
|
||||
var sdpLines = sdp.split('\r\n');
|
||||
var mLineIndex = findLine(sdpLines, 'm=', 'video');
|
||||
@ -349,23 +451,33 @@ var CodecsHandler = (function() {
|
||||
}
|
||||
|
||||
if (typeof params.maxaveragebitrate != 'undefined') {
|
||||
appendOpusNext += ';maxaveragebitrate=' + params.maxaveragebitrate; // default 32000? (kbps)
|
||||
if (sdpLines[opusFmtpLineIndex].split("maxaveragebitrate=").length==1){
|
||||
appendOpusNext += ';maxaveragebitrate=' + params.maxaveragebitrate; // default 32000? (kbps)
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof params.maxplaybackrate != 'undefined') {
|
||||
appendOpusNext += ';maxplaybackrate=' + params.maxplaybackrate; // Default should be 48000 (hz) , 8000 to 48000 are valid options
|
||||
if (sdpLines[opusFmtpLineIndex].split("maxplaybackrate=").length==1){
|
||||
appendOpusNext += ';maxplaybackrate=' + params.maxplaybackrate; // Default should be 48000 (hz) , 8000 to 48000 are valid options
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof params.cbr != 'undefined') {
|
||||
appendOpusNext += ';cbr=' + params.cbr; // default is 0 (vbr)
|
||||
if (sdpLines[opusFmtpLineIndex].split("cbr=").length==1){
|
||||
appendOpusNext += ';cbr=' + params.cbr; // default is 0 (vbr)
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof params.useinbandfec != 'undefined') { // useful for handling packet loss
|
||||
appendOpusNext += ';useinbandfec=' + params.useinbandfec; // Defaults to 0
|
||||
if (sdpLines[opusFmtpLineIndex].split("useinbandfec=").length==1){
|
||||
appendOpusNext += ';useinbandfec=' + params.useinbandfec; // Defaults to 0
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof params.usedtx != 'undefined') { // Default is 0
|
||||
appendOpusNext += ';usedtx=' + params.usedtx; // if decoder prefers the use of DTX.
|
||||
if (sdpLines[opusFmtpLineIndex].split("usedtx=").length==1){
|
||||
appendOpusNext += ';usedtx=' + params.usedtx; // if decoder prefers the use of DTX.
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -376,10 +488,47 @@ var CodecsHandler = (function() {
|
||||
|
||||
return sdp;
|
||||
}
|
||||
|
||||
|
||||
function getOpusBitrate(sdp) {
|
||||
|
||||
var sdpLines = sdp.split('\r\n');
|
||||
|
||||
var opusIndex = findLine(sdpLines, 'a=rtpmap', 'opus/48000');
|
||||
var opusPayload;
|
||||
if (opusIndex) {
|
||||
opusPayload = getCodecPayloadType(sdpLines[opusIndex]);
|
||||
}
|
||||
|
||||
if (!opusPayload) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var opusFmtpLineIndex = findLine(sdpLines, 'a=fmtp:' + opusPayload.toString());
|
||||
if (opusFmtpLineIndex === null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var appendOpusNext = '';
|
||||
|
||||
if (sdpLines[opusFmtpLineIndex].split("maxaveragebitrate=").length>1){
|
||||
var tmp = sdpLines[opusFmtpLineIndex].split("maxaveragebitrate=")[1];
|
||||
tmp = tmp.split('\r')[0];
|
||||
tmp = tmp.split('\n')[0];
|
||||
tmp = tmp.split(';')[0];
|
||||
tmp = parseInt(tmp);
|
||||
return tmp;
|
||||
}
|
||||
return 32768;
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
disableNACK: disableNACK,
|
||||
|
||||
disablePLI: disablePLI,
|
||||
|
||||
disableREMB: disableREMB,
|
||||
|
||||
getVideoBitrates: function(sdp) {
|
||||
return getVideoBitrates(sdp);
|
||||
@ -391,6 +540,10 @@ var CodecsHandler = (function() {
|
||||
setOpusAttributes: function(sdp, params) {
|
||||
return setOpusAttributes(sdp, params);
|
||||
},
|
||||
|
||||
getOpusBitrate: function(sdp){
|
||||
return getOpusBitrate(sdp);
|
||||
},
|
||||
|
||||
preferCodec: preferCodec
|
||||
};
|
||||
|
||||
1
thirdparty/adapter.min.js
vendored
1
thirdparty/adapter.min.js
vendored
File diff suppressed because one or more lines are too long
1
thirdparty/tflite/README.md
vendored
Normal file
1
thirdparty/tflite/README.md
vendored
Normal file
@ -0,0 +1 @@
|
||||
The virtual-background code was initially based on the works of Google and this repo: https://github.com/Volcomix/virtual-background ; Apache-2.0 License. The Google portion was published initially with an Apache lic, although it changed to a Google Lic at a later date.
|
||||
BIN
thirdparty/tflite/segm_full_v679.tflite
vendored
Normal file
BIN
thirdparty/tflite/segm_full_v679.tflite
vendored
Normal file
Binary file not shown.
888
thirdparty/tflite/tflite-simd.js
vendored
Normal file
888
thirdparty/tflite/tflite-simd.js
vendored
Normal file
@ -0,0 +1,888 @@
|
||||
var createTFLiteSIMDModule = (function() {
|
||||
var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
|
||||
return (
|
||||
function(createTFLiteSIMDModule) {
|
||||
createTFLiteSIMDModule = createTFLiteSIMDModule || {};
|
||||
|
||||
var Module = typeof createTFLiteSIMDModule !== "undefined" ? createTFLiteSIMDModule : {};
|
||||
var readyPromiseResolve, readyPromiseReject;
|
||||
Module["ready"] = new Promise(function(resolve, reject) {
|
||||
readyPromiseResolve = resolve;
|
||||
readyPromiseReject = reject
|
||||
});
|
||||
var moduleOverrides = {};
|
||||
var key;
|
||||
for (key in Module) {
|
||||
if (Module.hasOwnProperty(key)) {
|
||||
moduleOverrides[key] = Module[key]
|
||||
}
|
||||
}
|
||||
var arguments_ = [];
|
||||
var thisProgram = "./this.program";
|
||||
var quit_ = function(status, toThrow) {
|
||||
throw toThrow
|
||||
};
|
||||
|
||||
var scriptDirectory = "";
|
||||
|
||||
function locateFile(path) {
|
||||
if (Module["locateFile"]) {
|
||||
return Module["locateFile"](path, scriptDirectory)
|
||||
}
|
||||
return scriptDirectory + path
|
||||
}
|
||||
var read_, readAsync, readBinary;
|
||||
|
||||
if (typeof document !== "undefined" && document.currentScript) {
|
||||
scriptDirectory = document.currentScript.src
|
||||
}
|
||||
|
||||
if (_scriptDir) {
|
||||
scriptDirectory = _scriptDir
|
||||
}
|
||||
if (scriptDirectory.indexOf("blob:") !== 0) {
|
||||
scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1)
|
||||
} else {
|
||||
scriptDirectory = ""
|
||||
} {
|
||||
read_ = function(url) {
|
||||
var xhr = new XMLHttpRequest;
|
||||
xhr.open("GET", url, false);
|
||||
xhr.send(null);
|
||||
return xhr.responseText
|
||||
};
|
||||
|
||||
readAsync = function(url, onload, onerror) {
|
||||
var xhr = new XMLHttpRequest;
|
||||
xhr.open("GET", url, true);
|
||||
xhr.responseType = "arraybuffer";
|
||||
xhr.onload = function() {
|
||||
if (xhr.status == 200 || xhr.status == 0 && xhr.response) {
|
||||
onload(xhr.response);
|
||||
return
|
||||
}
|
||||
onerror()
|
||||
};
|
||||
xhr.onerror = onerror;
|
||||
xhr.send(null)
|
||||
}
|
||||
}
|
||||
|
||||
var out = Module["print"] || console.log.bind(console);
|
||||
var err = Module["printErr"] || console.warn.bind(console);
|
||||
for (key in moduleOverrides) {
|
||||
if (moduleOverrides.hasOwnProperty(key)) {
|
||||
Module[key] = moduleOverrides[key]
|
||||
}
|
||||
}
|
||||
moduleOverrides = null;
|
||||
if (Module["arguments"]) arguments_ = Module["arguments"];
|
||||
if (Module["thisProgram"]) thisProgram = Module["thisProgram"];
|
||||
if (Module["quit"]) quit_ = Module["quit"];
|
||||
var wasmBinary;
|
||||
if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"];
|
||||
var noExitRuntime;
|
||||
if (Module["noExitRuntime"]) noExitRuntime = Module["noExitRuntime"];
|
||||
if (typeof WebAssembly !== "object") {
|
||||
abort("no native wasm support detected")
|
||||
}
|
||||
var wasmMemory;
|
||||
var ABORT = false;
|
||||
var EXITSTATUS;
|
||||
|
||||
function assert(condition, text) {
|
||||
if (!condition) {
|
||||
abort("Assertion failed: " + text)
|
||||
}
|
||||
}
|
||||
var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined;
|
||||
|
||||
function UTF8ArrayToString(heap, idx, maxBytesToRead) {
|
||||
var endIdx = idx + maxBytesToRead;
|
||||
var endPtr = idx;
|
||||
while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr;
|
||||
if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {
|
||||
return UTF8Decoder.decode(heap.subarray(idx, endPtr))
|
||||
} else {
|
||||
var str = "";
|
||||
while (idx < endPtr) {
|
||||
var u0 = heap[idx++];
|
||||
if (!(u0 & 128)) {
|
||||
str += String.fromCharCode(u0);
|
||||
continue
|
||||
}
|
||||
var u1 = heap[idx++] & 63;
|
||||
if ((u0 & 224) == 192) {
|
||||
str += String.fromCharCode((u0 & 31) << 6 | u1);
|
||||
continue
|
||||
}
|
||||
var u2 = heap[idx++] & 63;
|
||||
if ((u0 & 240) == 224) {
|
||||
u0 = (u0 & 15) << 12 | u1 << 6 | u2
|
||||
} else {
|
||||
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63
|
||||
}
|
||||
if (u0 < 65536) {
|
||||
str += String.fromCharCode(u0)
|
||||
} else {
|
||||
var ch = u0 - 65536;
|
||||
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
|
||||
}
|
||||
}
|
||||
}
|
||||
return str
|
||||
}
|
||||
|
||||
function UTF8ToString(ptr, maxBytesToRead) {
|
||||
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""
|
||||
}
|
||||
|
||||
function writeAsciiToMemory(str, buffer, dontAddNull) {
|
||||
for (var i = 0; i < str.length; ++i) {
|
||||
HEAP8[buffer++ >> 0] = str.charCodeAt(i)
|
||||
}
|
||||
if (!dontAddNull) HEAP8[buffer >> 0] = 0
|
||||
}
|
||||
|
||||
function alignUp(x, multiple) {
|
||||
if (x % multiple > 0) {
|
||||
x += multiple - x % multiple
|
||||
}
|
||||
return x
|
||||
}
|
||||
var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
|
||||
|
||||
function updateGlobalBufferAndViews(buf) {
|
||||
buffer = buf;
|
||||
Module["HEAP8"] = HEAP8 = new Int8Array(buf);
|
||||
Module["HEAP16"] = HEAP16 = new Int16Array(buf);
|
||||
Module["HEAP32"] = HEAP32 = new Int32Array(buf);
|
||||
Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
|
||||
Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf);
|
||||
Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf);
|
||||
Module["HEAPF32"] = HEAPF32 = new Float32Array(buf);
|
||||
Module["HEAPF64"] = HEAPF64 = new Float64Array(buf)
|
||||
}
|
||||
var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216;
|
||||
var wasmTable;
|
||||
var __ATPRERUN__ = [];
|
||||
var __ATINIT__ = [];
|
||||
var __ATMAIN__ = [];
|
||||
var __ATPOSTRUN__ = [];
|
||||
var runtimeInitialized = false;
|
||||
var runtimeExited = false;
|
||||
__ATINIT__.push({
|
||||
func: function() {
|
||||
___wasm_call_ctors()
|
||||
}
|
||||
});
|
||||
|
||||
function preRun() {
|
||||
if (Module["preRun"]) {
|
||||
if (typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];
|
||||
while (Module["preRun"].length) {
|
||||
addOnPreRun(Module["preRun"].shift())
|
||||
}
|
||||
}
|
||||
callRuntimeCallbacks(__ATPRERUN__)
|
||||
}
|
||||
|
||||
function initRuntime() {
|
||||
runtimeInitialized = true;
|
||||
callRuntimeCallbacks(__ATINIT__)
|
||||
}
|
||||
|
||||
function preMain() {
|
||||
callRuntimeCallbacks(__ATMAIN__)
|
||||
}
|
||||
|
||||
function exitRuntime() {
|
||||
runtimeExited = true
|
||||
}
|
||||
|
||||
function postRun() {
|
||||
if (Module["postRun"]) {
|
||||
if (typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];
|
||||
while (Module["postRun"].length) {
|
||||
addOnPostRun(Module["postRun"].shift())
|
||||
}
|
||||
}
|
||||
callRuntimeCallbacks(__ATPOSTRUN__)
|
||||
}
|
||||
|
||||
function addOnPreRun(cb) {
|
||||
__ATPRERUN__.unshift(cb)
|
||||
}
|
||||
|
||||
function addOnPostRun(cb) {
|
||||
__ATPOSTRUN__.unshift(cb)
|
||||
}
|
||||
var runDependencies = 0;
|
||||
var runDependencyWatcher = null;
|
||||
var dependenciesFulfilled = null;
|
||||
|
||||
function addRunDependency(id) {
|
||||
runDependencies++;
|
||||
if (Module["monitorRunDependencies"]) {
|
||||
Module["monitorRunDependencies"](runDependencies)
|
||||
}
|
||||
}
|
||||
|
||||
function removeRunDependency(id) {
|
||||
runDependencies--;
|
||||
if (Module["monitorRunDependencies"]) {
|
||||
Module["monitorRunDependencies"](runDependencies)
|
||||
}
|
||||
if (runDependencies == 0) {
|
||||
if (runDependencyWatcher !== null) {
|
||||
clearInterval(runDependencyWatcher);
|
||||
runDependencyWatcher = null
|
||||
}
|
||||
if (dependenciesFulfilled) {
|
||||
var callback = dependenciesFulfilled;
|
||||
dependenciesFulfilled = null;
|
||||
callback()
|
||||
}
|
||||
}
|
||||
}
|
||||
Module["preloadedImages"] = {};
|
||||
Module["preloadedAudios"] = {};
|
||||
|
||||
function abort(what) {
|
||||
if (Module["onAbort"]) {
|
||||
Module["onAbort"](what)
|
||||
}
|
||||
what += "";
|
||||
err(what);
|
||||
ABORT = true;
|
||||
EXITSTATUS = 1;
|
||||
what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info.";
|
||||
var e = new WebAssembly.RuntimeError(what);
|
||||
readyPromiseReject(e);
|
||||
throw e
|
||||
}
|
||||
|
||||
function hasPrefix(str, prefix) {
|
||||
return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0
|
||||
}
|
||||
var dataURIPrefix = "data:application/octet-stream;base64,";
|
||||
|
||||
function isDataURI(filename) {
|
||||
return hasPrefix(filename, dataURIPrefix)
|
||||
}
|
||||
var fileURIPrefix = "file://";
|
||||
|
||||
function isFileURI(filename) {
|
||||
return hasPrefix(filename, fileURIPrefix)
|
||||
}
|
||||
var wasmBinaryFile = "tflite-simd.wasm";
|
||||
createTFLiteSIMDModule.simd = true;
|
||||
|
||||
if (!isDataURI(wasmBinaryFile)) {
|
||||
wasmBinaryFile = locateFile(wasmBinaryFile)
|
||||
}
|
||||
|
||||
function getBinary(file) {
|
||||
try {
|
||||
if (file == wasmBinaryFile && wasmBinary) {
|
||||
return new Uint8Array(wasmBinary)
|
||||
}
|
||||
if (readBinary) {
|
||||
return readBinary(file)
|
||||
} else {
|
||||
throw "both async and sync fetching of the wasm failed"
|
||||
}
|
||||
} catch (err) {
|
||||
abort(err)
|
||||
}
|
||||
}
|
||||
|
||||
function getBinaryPromise() {
|
||||
if (!wasmBinary) {
|
||||
if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) {
|
||||
return fetch(wasmBinaryFile, {
|
||||
credentials: "same-origin"
|
||||
}).then(function(response) {
|
||||
if (!response["ok"]) {
|
||||
throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"
|
||||
}
|
||||
return response["arrayBuffer"]()
|
||||
}).catch(function() {
|
||||
return getBinary(wasmBinaryFile)
|
||||
})
|
||||
} else {
|
||||
if (readAsync) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
readAsync(wasmBinaryFile, function(response) {
|
||||
resolve(new Uint8Array(response))
|
||||
}, reject)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
return Promise.resolve().then(function() {
|
||||
return getBinary(wasmBinaryFile)
|
||||
})
|
||||
}
|
||||
|
||||
function createWasm() {
|
||||
var info = {
|
||||
"a": asmLibraryArg
|
||||
};
|
||||
|
||||
function receiveInstance(instance, module) {
|
||||
var exports = instance.exports;
|
||||
Module["asm"] = exports;
|
||||
wasmMemory = Module["asm"]["q"];
|
||||
updateGlobalBufferAndViews(wasmMemory.buffer);
|
||||
wasmTable = Module["asm"]["D"];
|
||||
removeRunDependency("wasm-instantiate")
|
||||
}
|
||||
addRunDependency("wasm-instantiate");
|
||||
|
||||
function receiveInstantiatedSource(output) {
|
||||
receiveInstance(output["instance"])
|
||||
}
|
||||
|
||||
function instantiateArrayBuffer(receiver) {
|
||||
return getBinaryPromise().then(function(binary) {
|
||||
return WebAssembly.instantiate(binary, info)
|
||||
}).then(receiver, function(reason) {
|
||||
if (createTFLiteSIMDModule.simd){
|
||||
wasmBinaryFile = "tflite.wasm";
|
||||
createTFLiteSIMDModule.simd = false;
|
||||
if (!isDataURI(wasmBinaryFile)) {
|
||||
wasmBinaryFile = locateFile(wasmBinaryFile)
|
||||
}
|
||||
instantiateAsync();
|
||||
} else {
|
||||
console.error("FAILED LOADING WASM TFLITE MODEL");
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function instantiateAsync() {
|
||||
return instantiateArrayBuffer(receiveInstantiatedSource)
|
||||
}
|
||||
if (Module["instantiateWasm"]) {
|
||||
try {
|
||||
var exports = Module["instantiateWasm"](info, receiveInstance);
|
||||
return exports
|
||||
} catch (e) {
|
||||
err("Module.instantiateWasm callback failed with error: " + e);
|
||||
return false
|
||||
}
|
||||
}
|
||||
instantiateAsync().catch(readyPromiseReject);
|
||||
return {}
|
||||
}
|
||||
|
||||
function callRuntimeCallbacks(callbacks) {
|
||||
while (callbacks.length > 0) {
|
||||
var callback = callbacks.shift();
|
||||
if (typeof callback == "function") {
|
||||
callback(Module);
|
||||
continue
|
||||
}
|
||||
var func = callback.func;
|
||||
if (typeof func === "number") {
|
||||
if (callback.arg === undefined) {
|
||||
wasmTable.get(func)()
|
||||
} else {
|
||||
wasmTable.get(func)(callback.arg)
|
||||
}
|
||||
} else {
|
||||
func(callback.arg === undefined ? null : callback.arg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _abort() {
|
||||
abort()
|
||||
}
|
||||
var _emscripten_get_now;
|
||||
if (typeof dateNow !== "undefined") {
|
||||
_emscripten_get_now = dateNow
|
||||
} else _emscripten_get_now = function() {
|
||||
return performance.now()
|
||||
};
|
||||
var _emscripten_get_now_is_monotonic = true;
|
||||
|
||||
function setErrNo(value) {
|
||||
HEAP32[___errno_location() >> 2] = value;
|
||||
return value
|
||||
}
|
||||
|
||||
function _clock_gettime(clk_id, tp) {
|
||||
var now;
|
||||
if (clk_id === 0) {
|
||||
now = Date.now()
|
||||
} else if ((clk_id === 1 || clk_id === 4) && _emscripten_get_now_is_monotonic) {
|
||||
now = _emscripten_get_now()
|
||||
} else {
|
||||
setErrNo(28);
|
||||
return -1
|
||||
}
|
||||
HEAP32[tp >> 2] = now / 1e3 | 0;
|
||||
HEAP32[tp + 4 >> 2] = now % 1e3 * 1e3 * 1e3 | 0;
|
||||
return 0
|
||||
}
|
||||
|
||||
function _dlopen(filename, flag) {
|
||||
abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")
|
||||
}
|
||||
|
||||
function _dlsym(handle, symbol) {
|
||||
abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking")
|
||||
}
|
||||
|
||||
function _emscripten_memcpy_big(dest, src, num) {
|
||||
HEAPU8.copyWithin(dest, src, src + num)
|
||||
}
|
||||
|
||||
function _emscripten_get_heap_size() {
|
||||
return HEAPU8.length
|
||||
}
|
||||
|
||||
function emscripten_realloc_buffer(size) {
|
||||
try {
|
||||
wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);
|
||||
updateGlobalBufferAndViews(wasmMemory.buffer);
|
||||
return 1
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function _emscripten_resize_heap(requestedSize) {
|
||||
requestedSize = requestedSize >>> 0;
|
||||
var oldSize = _emscripten_get_heap_size();
|
||||
var maxHeapSize = 2147483648;
|
||||
if (requestedSize > maxHeapSize) {
|
||||
return false
|
||||
}
|
||||
var minHeapSize = 16777216;
|
||||
for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
|
||||
var overGrownHeapSize = oldSize * (1 + .2 / cutDown);
|
||||
overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296);
|
||||
var newSize = Math.min(maxHeapSize, alignUp(Math.max(minHeapSize, requestedSize, overGrownHeapSize), 65536));
|
||||
var replacement = emscripten_realloc_buffer(newSize);
|
||||
if (replacement) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
function _emscripten_thread_sleep(msecs) {
|
||||
var start = _emscripten_get_now();
|
||||
while (_emscripten_get_now() - start < msecs) {}
|
||||
}
|
||||
var ENV = {};
|
||||
|
||||
function getExecutableName() {
|
||||
return thisProgram || "./this.program"
|
||||
}
|
||||
|
||||
function getEnvStrings() {
|
||||
if (!getEnvStrings.strings) {
|
||||
var lang = (typeof navigator === "object" && navigator.languages && navigator.languages[0] || "C").replace("-", "_") + ".UTF-8";
|
||||
var env = {
|
||||
"USER": "web_user",
|
||||
"LOGNAME": "web_user",
|
||||
"PATH": "/",
|
||||
"PWD": "/",
|
||||
"HOME": "/home/web_user",
|
||||
"LANG": lang,
|
||||
"_": getExecutableName()
|
||||
};
|
||||
for (var x in ENV) {
|
||||
env[x] = ENV[x]
|
||||
}
|
||||
var strings = [];
|
||||
for (var x in env) {
|
||||
strings.push(x + "=" + env[x])
|
||||
}
|
||||
getEnvStrings.strings = strings
|
||||
}
|
||||
return getEnvStrings.strings
|
||||
}
|
||||
var SYSCALLS = {
|
||||
mappings: {},
|
||||
buffers: [null, [],
|
||||
[]
|
||||
],
|
||||
printChar: function(stream, curr) {
|
||||
var buffer = SYSCALLS.buffers[stream];
|
||||
if (curr === 0 || curr === 10) {
|
||||
(stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));
|
||||
buffer.length = 0
|
||||
} else {
|
||||
buffer.push(curr)
|
||||
}
|
||||
},
|
||||
varargs: undefined,
|
||||
get: function() {
|
||||
SYSCALLS.varargs += 4;
|
||||
var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
|
||||
return ret
|
||||
},
|
||||
getStr: function(ptr) {
|
||||
var ret = UTF8ToString(ptr);
|
||||
return ret
|
||||
},
|
||||
get64: function(low, high) {
|
||||
return low
|
||||
}
|
||||
};
|
||||
|
||||
function _environ_get(__environ, environ_buf) {
|
||||
var bufSize = 0;
|
||||
getEnvStrings().forEach(function(string, i) {
|
||||
var ptr = environ_buf + bufSize;
|
||||
HEAP32[__environ + i * 4 >> 2] = ptr;
|
||||
writeAsciiToMemory(string, ptr);
|
||||
bufSize += string.length + 1
|
||||
});
|
||||
return 0
|
||||
}
|
||||
|
||||
function _environ_sizes_get(penviron_count, penviron_buf_size) {
|
||||
var strings = getEnvStrings();
|
||||
HEAP32[penviron_count >> 2] = strings.length;
|
||||
var bufSize = 0;
|
||||
strings.forEach(function(string) {
|
||||
bufSize += string.length + 1
|
||||
});
|
||||
HEAP32[penviron_buf_size >> 2] = bufSize;
|
||||
return 0
|
||||
}
|
||||
|
||||
function _exit(status) {
|
||||
exit(status)
|
||||
}
|
||||
|
||||
function _fd_close(fd) {
|
||||
return 0
|
||||
}
|
||||
|
||||
function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {}
|
||||
|
||||
function _fd_write(fd, iov, iovcnt, pnum) {
|
||||
var num = 0;
|
||||
for (var i = 0; i < iovcnt; i++) {
|
||||
var ptr = HEAP32[iov + i * 8 >> 2];
|
||||
var len = HEAP32[iov + (i * 8 + 4) >> 2];
|
||||
for (var j = 0; j < len; j++) {
|
||||
SYSCALLS.printChar(fd, HEAPU8[ptr + j])
|
||||
}
|
||||
num += len
|
||||
}
|
||||
HEAP32[pnum >> 2] = num;
|
||||
return 0
|
||||
}
|
||||
|
||||
function _pthread_create() {
|
||||
return 6
|
||||
}
|
||||
|
||||
function _pthread_join() {
|
||||
return 28
|
||||
}
|
||||
|
||||
function _sysconf(name) {
|
||||
switch (name) {
|
||||
case 30:
|
||||
return 16384;
|
||||
case 85:
|
||||
var maxHeapSize = 2147483648;
|
||||
return maxHeapSize / 16384;
|
||||
case 132:
|
||||
case 133:
|
||||
case 12:
|
||||
case 137:
|
||||
case 138:
|
||||
case 15:
|
||||
case 235:
|
||||
case 16:
|
||||
case 17:
|
||||
case 18:
|
||||
case 19:
|
||||
case 20:
|
||||
case 149:
|
||||
case 13:
|
||||
case 10:
|
||||
case 236:
|
||||
case 153:
|
||||
case 9:
|
||||
case 21:
|
||||
case 22:
|
||||
case 159:
|
||||
case 154:
|
||||
case 14:
|
||||
case 77:
|
||||
case 78:
|
||||
case 139:
|
||||
case 82:
|
||||
case 68:
|
||||
case 67:
|
||||
case 164:
|
||||
case 11:
|
||||
case 29:
|
||||
case 47:
|
||||
case 48:
|
||||
case 95:
|
||||
case 52:
|
||||
case 51:
|
||||
case 46:
|
||||
return 200809;
|
||||
case 27:
|
||||
case 246:
|
||||
case 127:
|
||||
case 128:
|
||||
case 23:
|
||||
case 24:
|
||||
case 160:
|
||||
case 161:
|
||||
case 181:
|
||||
case 182:
|
||||
case 242:
|
||||
case 183:
|
||||
case 184:
|
||||
case 243:
|
||||
case 244:
|
||||
case 245:
|
||||
case 165:
|
||||
case 178:
|
||||
case 179:
|
||||
case 49:
|
||||
case 50:
|
||||
case 168:
|
||||
case 169:
|
||||
case 175:
|
||||
case 170:
|
||||
case 171:
|
||||
case 172:
|
||||
case 97:
|
||||
case 76:
|
||||
case 32:
|
||||
case 173:
|
||||
case 35:
|
||||
case 80:
|
||||
case 81:
|
||||
case 79:
|
||||
return -1;
|
||||
case 176:
|
||||
case 177:
|
||||
case 7:
|
||||
case 155:
|
||||
case 8:
|
||||
case 157:
|
||||
case 125:
|
||||
case 126:
|
||||
case 92:
|
||||
case 93:
|
||||
case 129:
|
||||
case 130:
|
||||
case 131:
|
||||
case 94:
|
||||
case 91:
|
||||
return 1;
|
||||
case 74:
|
||||
case 60:
|
||||
case 69:
|
||||
case 70:
|
||||
case 4:
|
||||
return 1024;
|
||||
case 31:
|
||||
case 42:
|
||||
case 72:
|
||||
return 32;
|
||||
case 87:
|
||||
case 26:
|
||||
case 33:
|
||||
return 2147483647;
|
||||
case 34:
|
||||
case 1:
|
||||
return 47839;
|
||||
case 38:
|
||||
case 36:
|
||||
return 99;
|
||||
case 43:
|
||||
case 37:
|
||||
return 2048;
|
||||
case 0:
|
||||
return 2097152;
|
||||
case 3:
|
||||
return 65536;
|
||||
case 28:
|
||||
return 32768;
|
||||
case 44:
|
||||
return 32767;
|
||||
case 75:
|
||||
return 16384;
|
||||
case 39:
|
||||
return 1e3;
|
||||
case 89:
|
||||
return 700;
|
||||
case 71:
|
||||
return 256;
|
||||
case 40:
|
||||
return 255;
|
||||
case 2:
|
||||
return 100;
|
||||
case 180:
|
||||
return 64;
|
||||
case 25:
|
||||
return 20;
|
||||
case 5:
|
||||
return 16;
|
||||
case 6:
|
||||
return 6;
|
||||
case 73:
|
||||
return 4;
|
||||
case 84: {
|
||||
if (typeof navigator === "object") return navigator["hardwareConcurrency"] || 1;
|
||||
return 1
|
||||
}
|
||||
}
|
||||
setErrNo(28);
|
||||
return -1
|
||||
}
|
||||
var asmLibraryArg = {
|
||||
"a": _abort,
|
||||
"n": _clock_gettime,
|
||||
"i": _dlopen,
|
||||
"e": _dlsym,
|
||||
"l": _emscripten_memcpy_big,
|
||||
"m": _emscripten_resize_heap,
|
||||
"o": _emscripten_thread_sleep,
|
||||
"p": _environ_get,
|
||||
"g": _environ_sizes_get,
|
||||
"j": _exit,
|
||||
"h": _fd_close,
|
||||
"k": _fd_seek,
|
||||
"c": _fd_write,
|
||||
"d": _pthread_create,
|
||||
"f": _pthread_join,
|
||||
"b": _sysconf
|
||||
};
|
||||
var asm = createWasm();
|
||||
var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() {
|
||||
return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["r"]).apply(null, arguments)
|
||||
};
|
||||
var _getModelBufferMemoryOffset = Module["_getModelBufferMemoryOffset"] = function() {
|
||||
return (_getModelBufferMemoryOffset = Module["_getModelBufferMemoryOffset"] = Module["asm"]["s"]).apply(null, arguments)
|
||||
};
|
||||
var _getInputMemoryOffset = Module["_getInputMemoryOffset"] = function() {
|
||||
return (_getInputMemoryOffset = Module["_getInputMemoryOffset"] = Module["asm"]["t"]).apply(null, arguments)
|
||||
};
|
||||
var _getInputHeight = Module["_getInputHeight"] = function() {
|
||||
return (_getInputHeight = Module["_getInputHeight"] = Module["asm"]["u"]).apply(null, arguments)
|
||||
};
|
||||
var _getInputWidth = Module["_getInputWidth"] = function() {
|
||||
return (_getInputWidth = Module["_getInputWidth"] = Module["asm"]["v"]).apply(null, arguments)
|
||||
};
|
||||
var _getInputChannelCount = Module["_getInputChannelCount"] = function() {
|
||||
return (_getInputChannelCount = Module["_getInputChannelCount"] = Module["asm"]["w"]).apply(null, arguments)
|
||||
};
|
||||
var _getOutputMemoryOffset = Module["_getOutputMemoryOffset"] = function() {
|
||||
return (_getOutputMemoryOffset = Module["_getOutputMemoryOffset"] = Module["asm"]["x"]).apply(null, arguments)
|
||||
};
|
||||
var _getOutputHeight = Module["_getOutputHeight"] = function() {
|
||||
return (_getOutputHeight = Module["_getOutputHeight"] = Module["asm"]["y"]).apply(null, arguments)
|
||||
};
|
||||
var _getOutputWidth = Module["_getOutputWidth"] = function() {
|
||||
return (_getOutputWidth = Module["_getOutputWidth"] = Module["asm"]["z"]).apply(null, arguments)
|
||||
};
|
||||
var _getOutputChannelCount = Module["_getOutputChannelCount"] = function() {
|
||||
return (_getOutputChannelCount = Module["_getOutputChannelCount"] = Module["asm"]["A"]).apply(null, arguments)
|
||||
};
|
||||
var _loadModel = Module["_loadModel"] = function() {
|
||||
return (_loadModel = Module["_loadModel"] = Module["asm"]["B"]).apply(null, arguments)
|
||||
};
|
||||
var _runInference = Module["_runInference"] = function() {
|
||||
return (_runInference = Module["_runInference"] = Module["asm"]["C"]).apply(null, arguments)
|
||||
};
|
||||
var ___errno_location = Module["___errno_location"] = function() {
|
||||
return (___errno_location = Module["___errno_location"] = Module["asm"]["E"]).apply(null, arguments)
|
||||
};
|
||||
var calledRun;
|
||||
|
||||
function ExitStatus(status) {
|
||||
this.name = "ExitStatus";
|
||||
this.message = "Program terminated with exit(" + status + ")";
|
||||
this.status = status
|
||||
}
|
||||
dependenciesFulfilled = function runCaller() {
|
||||
if (!calledRun) run();
|
||||
if (!calledRun) dependenciesFulfilled = runCaller
|
||||
};
|
||||
|
||||
function run(args) {
|
||||
args = args || arguments_;
|
||||
if (runDependencies > 0) {
|
||||
return
|
||||
}
|
||||
preRun();
|
||||
if (runDependencies > 0) {
|
||||
return
|
||||
}
|
||||
|
||||
function doRun() {
|
||||
if (calledRun) return;
|
||||
calledRun = true;
|
||||
Module["calledRun"] = true;
|
||||
if (ABORT) return;
|
||||
initRuntime();
|
||||
preMain();
|
||||
readyPromiseResolve(Module);
|
||||
if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"]();
|
||||
postRun()
|
||||
}
|
||||
if (Module["setStatus"]) {
|
||||
Module["setStatus"]("Running...");
|
||||
setTimeout(function() {
|
||||
setTimeout(function() {
|
||||
Module["setStatus"]("")
|
||||
}, 1);
|
||||
doRun()
|
||||
}, 1)
|
||||
} else {
|
||||
doRun()
|
||||
}
|
||||
}
|
||||
Module["run"] = run;
|
||||
|
||||
function exit(status, implicit) {
|
||||
if (implicit && noExitRuntime && status === 0) {
|
||||
return
|
||||
}
|
||||
if (noExitRuntime) {} else {
|
||||
EXITSTATUS = status;
|
||||
exitRuntime();
|
||||
if (Module["onExit"]) Module["onExit"](status);
|
||||
ABORT = true
|
||||
}
|
||||
quit_(status, new ExitStatus(status))
|
||||
}
|
||||
if (Module["preInit"]) {
|
||||
if (typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];
|
||||
while (Module["preInit"].length > 0) {
|
||||
Module["preInit"].pop()()
|
||||
}
|
||||
}
|
||||
noExitRuntime = true;
|
||||
run();
|
||||
|
||||
|
||||
return createTFLiteSIMDModule.ready
|
||||
}
|
||||
);
|
||||
})();
|
||||
if (typeof exports === 'object' && typeof module === 'object')
|
||||
module.exports = createTFLiteSIMDModule;
|
||||
else if (typeof define === 'function' && define['amd'])
|
||||
define([], function() {
|
||||
return createTFLiteSIMDModule;
|
||||
});
|
||||
else if (typeof exports === 'object')
|
||||
exports["createTFLiteSIMDModule"] = createTFLiteSIMDModule;
|
||||
BIN
thirdparty/tflite/tflite-simd.wasm
vendored
Normal file
BIN
thirdparty/tflite/tflite-simd.wasm
vendored
Normal file
Binary file not shown.
BIN
thirdparty/tflite/tflite.wasm
vendored
Normal file
BIN
thirdparty/tflite/tflite.wasm
vendored
Normal file
Binary file not shown.
@ -2,11 +2,13 @@
|
||||
"titles": {
|
||||
"join-by-room-name-here": "Enter a room name to quick join",
|
||||
"join-room": "Join room",
|
||||
"load-the-next-guest-in-queue": "Load the next guest in queue",
|
||||
"toggle-the-chat": "Toggle the Chat",
|
||||
"mute-the-speaker": "Mute the Speaker",
|
||||
"mute-the-mic": "Mute the Mic",
|
||||
"disable-the-camera": "Disable the Camera",
|
||||
"share-a-screen-with-others": "Share a Screen with others",
|
||||
"create-a-secondary-stream": "Create a Secondary Stream",
|
||||
"settings": "Settings",
|
||||
"hangup-the-call": "Hangup the Call",
|
||||
"alert-the-host-you-want-to-speak": "Alert the host you want to speak",
|
||||
@ -15,12 +17,17 @@
|
||||
"submit-any-error-logs": "Submit any error logs",
|
||||
"show-help-info": "Show Help Info",
|
||||
"language-options": "Language Options",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"add-group-chat-to-obs": "Add Group Chat",
|
||||
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "For large group rooms, this option can reduce the load on remote guests substantially",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
|
||||
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
|
||||
"add-your-camera-to-obs": "Add your Camera",
|
||||
"start-streaming": "start streaming",
|
||||
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
|
||||
@ -39,79 +46,72 @@
|
||||
"creative-commons-by-3-0": "Creative Commons BY 3.0",
|
||||
"youtube-video-demoing-how-to-do-this": "Youtube Video demoing how to do this",
|
||||
"invite-a-guest-or-camera-source-to-publish-into-the-group-room": "Invite a guest or camera source to publish into the group room",
|
||||
"if-enabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If enabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link in the a Browser Source to capture the video or audio",
|
||||
"if-enabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If enabled, you must manually add a video to a scene for it to appear.",
|
||||
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link as a browser source in your Studio software to capture the video or audio",
|
||||
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
|
||||
"disables-echo-cancellation-and-improves-audio-quality": "Disables Echo Cancellation and improves audio quality",
|
||||
"audio-only-sources-are-visually-hidden-from-scenes": "Audio-only sources are visually hidden from scenes",
|
||||
"guest-will-be-prompted-to-enter-a-display-name": "Guest will be prompted to enter a Display Name",
|
||||
"display-names-will-be-shown-in-the-bottom-left-corner-of-videos": "Display Names will be shown in the bottom-left corner of videos",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
"request-1080p60-from-the-guest-instead-of-720p60-if-possible": "Request 1080p60 from the Guest instead of 720p60, if possible",
|
||||
"the-default-microphone-will-be-pre-selected-for-the-guest": "The default microphone will be pre-selected for the guest",
|
||||
"the-default-camera-device-will-selected-automatically": "The default camera device will selected automatically",
|
||||
"the-guest-won-t-have-access-to-changing-camera-settings-or-screenshare": "The guest won't have access to changing camera settings or screenshare",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"the-guest-will-not-see-their-own-self-preview-after-joining": "The guest will not see their own self-preview after joining",
|
||||
"guests-will-have-an-option-to-poke-the-director-by-pressing-a-button": "Guests will have an option to poke the Director by pressing a button",
|
||||
"add-an-audio-compressor-to-the-guest-s-microphone": "Add an audio compressor to the guest's microphone",
|
||||
"add-an-equalizer-to-the-guest-s-microphone-that-the-director-can-control": "Add an Equalizer to the guest's microphone that the director can control",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-guest-can-only-see-the-director-s-video-if-provided": "The guest can only see the Director's video, if provided",
|
||||
"the-guest-s-microphone-will-be-muted-on-joining-they-can-unmute-themselves-": "The guest's microphone will be muted on joining. They can unmute themselves.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"have-the-guest-join-muted-so-only-the-director-can-unmute-the-guest-": "Have the guest join muted, so only the director can Unmute the guest.",
|
||||
"make-the-invite-url-encoded-so-parameters-are-harder-to-tinker-with-by-guests": "Make the invite URL encoded, so parameters are harder to tinker with by guests",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"move-the-user-to-another-room-controlled-by-another-director": "Move the user to another room, controlled by another director",
|
||||
"send-a-direct-message-to-this-user-": "Send a Direct Message to this user.",
|
||||
"add-this-video-to-any-remote-scene-1-": "Add this Video to any remote '&scene=1'",
|
||||
"remotely-mute-this-audio-in-all-remote-scene-views": "Remotely Mute this Audio in all remote '&scene' views",
|
||||
"remotely-change-the-volume-of-this-guest": "Remotely change the volume of this guest",
|
||||
"mute-this-guest-everywhere": "Mute this guest everywhere",
|
||||
"disable-video-preview": "Disable Video Preview",
|
||||
"low-quality-preview": "Low-Quality Preview",
|
||||
"high-quality-preview": "High-Quality Preview",
|
||||
"force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.",
|
||||
"start-recording-this-remote-stream-to-this-local-drive-experimental-": "Start Recording this remote stream to this local drive. *experimental*'",
|
||||
"the-remote-guest-will-record-their-local-stream-to-their-local-drive-experimental-": "The Remote Guest will record their local stream to their local drive. *experimental*",
|
||||
"toggle-voice-chat-with-this-guest": "Toggle Voice Chat with this Guest",
|
||||
"shift-this-video-down-in-order": "Shift this Video Down in Order",
|
||||
"current-index-order-of-this-video": "Current Index Order of this Video",
|
||||
"shift-this-video-up-in-order": "Shift this Video Up in Order",
|
||||
"remote-audio-settings": "Remote Audio Settings",
|
||||
"advanced-video-settings": "Advanced Video Settings",
|
||||
"activate-or-reload-this-video-device-": "Activate or Reload this video device.",
|
||||
"load-the-next-guest-in-queue": "Load the next guest in queue",
|
||||
"create-a-secondary-stream": "Create a Secondary Stream",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"start-streaming": "start streaming",
|
||||
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"toggle-solo-voice-chat": "Toggle Solo Voice Chat",
|
||||
"add-to-scene-2": "Add to Scene 2",
|
||||
"add-this-video-to-any-remote-scene-1-": "Add this Video to any remote '&scene=1'",
|
||||
"mute-this-guest-everywhere": "Mute this guest everywhere",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"remotely-mute-this-audio-in-all-remote-scene-views": "Remotely Mute this Audio in all remote '&scene' views",
|
||||
"add-to-scene-3": "Add to Scene 3",
|
||||
"add-to-scene-4": "Add to Scene 4",
|
||||
"add-to-scene-5": "Add to Scene 5",
|
||||
"add-to-scene-6": "Add to Scene 6",
|
||||
"add-to-scene-7": "Add to Scene 7",
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"force-the-remote-sender-to-issue-a-keyframe-to-all-scenes-fixing-pixel-smearing-issues-": "Force the remote sender to issue a keyframe to all scenes, fixing Pixel Smearing issues.",
|
||||
"request-the-statistics-of-this-video-in-any-active-scene": "Request the statistics of this video in any active scene",
|
||||
"solo-this-video-everywhere": "Solo this video everywhere",
|
||||
"hide-this-guest-everywhere": "Hide this guest everywhere",
|
||||
"set-to-default-audio-channel": "Set to Default Audio Channel",
|
||||
"toggle-the-remote-guest-s-speaker-output": "Toggle the remote guest's speaker output",
|
||||
"toggle-the-remote-guest-s-display-output": "Toggle the remote guest's display output",
|
||||
"shift-this-video-down-in-order": "Shift this Video Down in Order",
|
||||
"current-index-order-of-this-video": "Current Index Order of this Video",
|
||||
"shift-this-video-up-in-order": "Shift this Video Up in Order",
|
||||
"remotely-reload-the-guest-s-page-with-a-new-url": "Remotely reload the guest's page with a new URL",
|
||||
"change-user-parameters": "Change user parameters",
|
||||
"start-recording-this-remote-stream-to-this-local-drive-experimental-": "Start Recording this remote stream to this local drive. *experimental*'",
|
||||
"the-remote-guest-will-record-their-local-stream-to-their-local-drive-experimental-": "The Remote Guest will record their local stream to their local drive. *experimental*",
|
||||
"remotely-change-the-volume-of-this-guest": "Remotely change the volume of this guest",
|
||||
"disable-video-preview": "Disable Video Preview",
|
||||
"low-quality-preview": "Low-Quality Preview",
|
||||
"high-quality-preview": "High-Quality Preview",
|
||||
"set-to-audio-channel-1": "Set to Audio Channel 1",
|
||||
"set-to-audio-channel-2": "Set to Audio Channel 2",
|
||||
"set-to-audio-channel-3": "Set to Audio Channel 3",
|
||||
"set-to-audio-channel-4": "Set to Audio Channel 4",
|
||||
"set-to-audio-channel-5": "Set to Audio Channel 5",
|
||||
"toggle-the-remote-guest-s-speaker-output": "Toggle the remote guest's speaker output",
|
||||
"toggle-the-remote-guest-s-display-output": "Toggle the remote guest's display output",
|
||||
"set-to-audio-channel-6": "Set to Audio Channel 6",
|
||||
"set-to-audio-channel-7": "Set to Audio Channel 7",
|
||||
"set-to-audio-channel-8": "Set to Audio Channel 8",
|
||||
"force-the-remote-sender-to-issue-a-keyframe-to-all-scenes-fixing-pixel-smearing-issues-": "Force the remote sender to issue a keyframe to all scenes, fixing Pixel Smearing issues.",
|
||||
"remotely-reload-the-guest-s-page-with-a-new-url": "Remotely reload the guest's page with a new URL",
|
||||
"change-user-parameters": "Change user parameters",
|
||||
"solo-this-video-everywhere": "Solo this video everywhere",
|
||||
"request-the-statistics-of-this-video-in-any-active-scene": "Request the statistics of this video in any active scene",
|
||||
"remote-audio-settings": "Remote Audio Settings",
|
||||
"advanced-video-settings": "Advanced Video Settings",
|
||||
"add-to-scene-2": "Add to Scene 2",
|
||||
"activate-or-reload-this-video-device-": "Activate or Reload this video device.",
|
||||
"cannot-see-videos": "Cannot see videos",
|
||||
"cannot-hear-others": "Cannot hear others",
|
||||
"see-director-only": "See director only",
|
||||
@ -122,8 +122,7 @@
|
||||
"enable-custom-password": "Enable custom password"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\"></font>",
|
||||
"copy-this-url": "Copy this URL into a \"Browser Source\"",
|
||||
"copy-this-url": "Copy this URL into your studio's \"browser Source\"",
|
||||
"you-are-in-the-control-center": "Control center for room:",
|
||||
"joining-room": "You are in room",
|
||||
"add-group-chat": "Create a Room",
|
||||
@ -131,6 +130,7 @@
|
||||
"room-name": "Room Name",
|
||||
"password-input-field": "Password",
|
||||
"guests-only-see-director": "Guests can only see the Director's Video",
|
||||
"scenes-can-see-director": "Director will also be a performer",
|
||||
"default-codec-select": "Preferred Video Codec: ",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"show-tips": "Show me some tips..",
|
||||
@ -140,14 +140,20 @@
|
||||
"ask-for-permissions": "Allow Access to Camera/Microphone",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "1080p (hi-def)",
|
||||
"balanced": "720p (balanced)",
|
||||
"smooth-cool": "360p (smooth)",
|
||||
"max-resolution": "Max Resolution",
|
||||
"balanced": "Balanced",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"select-audio-source": " Audio Source(s) ",
|
||||
"no-audio": "No Audio",
|
||||
"select-output-source": " Audio Output Destination: ",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"add-a-password": " Add a Password:",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"note-share-audio": "\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<video id=\"screenshare\" autoplay=\"true\" muted=\"true\" loop=\"\" src=\"./media/screenshare.webm\"></video>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"audio-sources": "Audio Sources",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
@ -169,63 +175,100 @@
|
||||
"can-hear-only": "Can only hear the group chat",
|
||||
"cant-see-or-hear": "Cannot hear or see the group chat",
|
||||
"share-local-video-file": "Stream Media File",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"share-website-iframe": "Share Website",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"run-a-speed-test": "Run a Speed Test",
|
||||
"read-the-guides": "Browse the Guides",
|
||||
"info-blob": "",
|
||||
"hide-the-links": " LINKS (GUEST INVITES & SCENES)",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> Click Here for a quick overview and help\n\t\t\t\t\t",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> <span data-translate=\"click-here-for-help\">Click Here for a quick overview and help</span>\n\t\t\t\t\t",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Known Limitations with Group Rooms:</font><br>\n\t\t\t\t\t\t<li>A group room can handle up to around 30 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>Videos will appear of low quality on purpose for guests and director; this is to save bandwidth and CPU resources.",
|
||||
"invite-users-to-join": "Guests can use the link to join the group room",
|
||||
"this-is-obs-browser-source-link": "Use in studio software to capture the group video mix",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"this-is-obs-browser-source-link": "Use in your studio software to capture the group video mix",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.",
|
||||
"forward-to-room": "Transfer",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"add-to-scene": "Add to Scene",
|
||||
"mute-scene": "mute in scene",
|
||||
"mute-guest": "mute guest",
|
||||
"change-to-low-quality": " <i class=\"las la-video-slash\"></i>",
|
||||
"change-to-medium-quality": " <i class=\"las la-video\"></i>",
|
||||
"change-to-high-quality": " <i class=\"las la-binoculars\"></i>",
|
||||
"disconnect-guest": "Hangup",
|
||||
"record-local": " Record Local",
|
||||
"record-remote": " Record Remote",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"order-down": "<i class=\"las la-minus\"></i>",
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings",
|
||||
"advanced-camera-settings": "<i class=\"las la-sliders-h\"></i> Video Settings",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"welcome-to-obs-ninja-chat": "\n\t\t\t\t\tWelcome! You can send text messages directly to connected peers from here.\n\t\t\t\t",
|
||||
"names-and-labels-coming-soon": "\n\t\t\t\t\tNames identifying connected peers will be a feature in an upcoming release.\n\t\t\t\t",
|
||||
"send-chat": "Send",
|
||||
"available-languages": "Available Languages:",
|
||||
"add-more-here": "Add More Here!",
|
||||
"scenes-can-see-director": "Director will also be a performer",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"add-a-password": " Add a Password:",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Solo Talk",
|
||||
"add-to-scene": "add to scene 1",
|
||||
"mute-guest": "mute guest",
|
||||
"More-scene-options": "More scene options",
|
||||
"mute-scene": "mute in scene",
|
||||
"force-keyframe": "Rainbow Puke Fix",
|
||||
"stats-remote": " Scene Stats",
|
||||
"additional-controls": "Additional controls",
|
||||
"solo-video": "Highlight guest",
|
||||
"hide-guest": "hide guest",
|
||||
"toggle-remote-speaker": "Deafen Guest",
|
||||
"toggle-remote-display": "Blind Guest",
|
||||
"force-keyframe": "Rainbow Puke",
|
||||
"order-down": "<i class=\"las la-minus\"></i>",
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"change-url": "Change URL",
|
||||
"change-params": "URL Params",
|
||||
"solo-video": "Highlight guest",
|
||||
"stats-remote": " Scene Stats",
|
||||
"record-local": " Record",
|
||||
"record-remote": " Record Remote",
|
||||
"change-to-low-quality": " <i class=\"las la-video-slash\"></i>",
|
||||
"change-to-medium-quality": " <i class=\"las la-video\"></i>",
|
||||
"change-to-high-quality": " <i class=\"las la-binoculars\"></i>",
|
||||
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings",
|
||||
"advanced-camera-settings": "<i class=\"las la-sliders-h\"></i> Video Settings",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"send-chat": "Send",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"invisible-guests": "Not Visible",
|
||||
"available-languages": "Available Languages:",
|
||||
"add-more-here": "Add More Here!",
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
"enter-a-room-name-here": "Enter a Room Name here",
|
||||
"optional-room-password-here": "Optional room password here",
|
||||
"optional": "optional",
|
||||
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
|
||||
"add-an-optional-password": "Add an optional password",
|
||||
"enter-room-name-here": "Enter Room name here",
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"optional": "optional",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
}
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Připojit se s názvem místnosti zde",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Raum über Namen betreten",
|
||||
|
||||
@ -2,11 +2,13 @@
|
||||
"titles": {
|
||||
"join-by-room-name-here": "Enter a room name to quick join",
|
||||
"join-room": "Join room",
|
||||
"load-the-next-guest-in-queue": "Load the next guest in queue",
|
||||
"toggle-the-chat": "Toggle the Chat",
|
||||
"mute-the-speaker": "Mute the Speaker",
|
||||
"mute-the-mic": "Mute the Mic",
|
||||
"disable-the-camera": "Disable the Camera",
|
||||
"share-a-screen-with-others": "Share a Screen with others",
|
||||
"create-a-secondary-stream": "Create a Secondary Stream",
|
||||
"settings": "Settings",
|
||||
"hangup-the-call": "Hangup the Call",
|
||||
"alert-the-host-you-want-to-speak": "Alert the host you want to speak",
|
||||
@ -15,13 +17,18 @@
|
||||
"submit-any-error-logs": "Submit any error logs",
|
||||
"show-help-info": "Show Help Info",
|
||||
"language-options": "Language Options",
|
||||
"add-group-chat-to-obs": "Add Group Chat to OBS",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"add-group-chat-to-obs": "Add Group Chat",
|
||||
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "For large group rooms, this option can reduce the load on remote guests substantially",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
|
||||
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
|
||||
"add-your-camera-to-obs": "Add your Camera to OBS",
|
||||
"add-your-camera-to-obs": "Add your Camera",
|
||||
"start-streaming": "start streaming",
|
||||
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare into OBS",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
|
||||
"better-video-compression-and-quality-at-the-cost-of-increased-cpu-encoding-load": "Better video compression and quality at the cost of increased CPU encoding load",
|
||||
@ -39,79 +46,72 @@
|
||||
"creative-commons-by-3-0": "Creative Commons BY 3.0",
|
||||
"youtube-video-demoing-how-to-do-this": "Youtube Video demoing how to do this",
|
||||
"invite-a-guest-or-camera-source-to-publish-into-the-group-room": "Invite a guest or camera source to publish into the group room",
|
||||
"if-enabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If enabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link in the OBS Browser Source to capture the video or audio",
|
||||
"if-enabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If enabled, you must manually add a video to a scene for it to appear.",
|
||||
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link as a browser source in your Studio software to capture the video or audio",
|
||||
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
|
||||
"disables-echo-cancellation-and-improves-audio-quality": "Disables Echo Cancellation and improves audio quality",
|
||||
"audio-only-sources-are-visually-hidden-from-scenes": "Audio-only sources are visually hidden from scenes",
|
||||
"guest-will-be-prompted-to-enter-a-display-name": "Guest will be prompted to enter a Display Name",
|
||||
"display-names-will-be-shown-in-the-bottom-left-corner-of-videos": "Display Names will be shown in the bottom-left corner of videos",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
"request-1080p60-from-the-guest-instead-of-720p60-if-possible": "Request 1080p60 from the Guest instead of 720p60, if possible",
|
||||
"the-default-microphone-will-be-pre-selected-for-the-guest": "The default microphone will be pre-selected for the guest",
|
||||
"the-default-camera-device-will-selected-automatically": "The default camera device will selected automatically",
|
||||
"the-guest-won-t-have-access-to-changing-camera-settings-or-screenshare": "The guest won't have access to changing camera settings or screenshare",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"the-guest-will-not-see-their-own-self-preview-after-joining": "The guest will not see their own self-preview after joining",
|
||||
"guests-will-have-an-option-to-poke-the-director-by-pressing-a-button": "Guests will have an option to poke the Director by pressing a button",
|
||||
"add-an-audio-compressor-to-the-guest-s-microphone": "Add an audio compressor to the guest's microphone",
|
||||
"add-an-equalizer-to-the-guest-s-microphone-that-the-director-can-control": "Add an Equalizer to the guest's microphone that the director can control",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-guest-can-only-see-the-director-s-video-if-provided": "The guest can only see the Director's video, if provided",
|
||||
"the-guest-s-microphone-will-be-muted-on-joining-they-can-unmute-themselves-": "The guest's microphone will be muted on joining. They can unmute themselves.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"have-the-guest-join-muted-so-only-the-director-can-unmute-the-guest-": "Have the guest join muted, so only the director can Unmute the guest.",
|
||||
"make-the-invite-url-encoded-so-parameters-are-harder-to-tinker-with-by-guests": "Make the invite URL encoded, so parameters are harder to tinker with by guests",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"move-the-user-to-another-room-controlled-by-another-director": "Move the user to another room, controlled by another director",
|
||||
"send-a-direct-message-to-this-user-": "Send a Direct Message to this user.",
|
||||
"add-this-video-to-any-remote-scene-1-": "Add this Video to any remote '&scene=1'",
|
||||
"remotely-mute-this-audio-in-all-remote-scene-views": "Remotely Mute this Audio in all remote '&scene' views",
|
||||
"remotely-change-the-volume-of-this-guest": "Remotely change the volume of this guest",
|
||||
"mute-this-guest-everywhere": "Mute this guest everywhere",
|
||||
"disable-video-preview": "Disable Video Preview",
|
||||
"low-quality-preview": "Low-Quality Preview",
|
||||
"high-quality-preview": "High-Quality Preview",
|
||||
"force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.",
|
||||
"start-recording-this-remote-stream-to-this-local-drive-experimental-": "Start Recording this remote stream to this local drive. *experimental*'",
|
||||
"the-remote-guest-will-record-their-local-stream-to-their-local-drive-experimental-": "The Remote Guest will record their local stream to their local drive. *experimental*",
|
||||
"toggle-voice-chat-with-this-guest": "Toggle Voice Chat with this Guest",
|
||||
"shift-this-video-down-in-order": "Shift this Video Down in Order",
|
||||
"current-index-order-of-this-video": "Current Index Order of this Video",
|
||||
"shift-this-video-up-in-order": "Shift this Video Up in Order",
|
||||
"remote-audio-settings": "Remote Audio Settings",
|
||||
"advanced-video-settings": "Advanced Video Settings",
|
||||
"activate-or-reload-this-video-device-": "Activate or Reload this video device.",
|
||||
"load-the-next-guest-in-queue": "Load the next guest in queue",
|
||||
"create-a-secondary-stream": "Create a Secondary Stream",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"start-streaming": "start streaming",
|
||||
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"toggle-solo-voice-chat": "Toggle Solo Voice Chat",
|
||||
"add-to-scene-2": "Add to Scene 2",
|
||||
"add-this-video-to-any-remote-scene-1-": "Add this Video to any remote '&scene=1'",
|
||||
"mute-this-guest-everywhere": "Mute this guest everywhere",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"remotely-mute-this-audio-in-all-remote-scene-views": "Remotely Mute this Audio in all remote '&scene' views",
|
||||
"add-to-scene-3": "Add to Scene 3",
|
||||
"add-to-scene-4": "Add to Scene 4",
|
||||
"add-to-scene-5": "Add to Scene 5",
|
||||
"add-to-scene-6": "Add to Scene 6",
|
||||
"add-to-scene-7": "Add to Scene 7",
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"force-the-remote-sender-to-issue-a-keyframe-to-all-scenes-fixing-pixel-smearing-issues-": "Force the remote sender to issue a keyframe to all scenes, fixing Pixel Smearing issues.",
|
||||
"request-the-statistics-of-this-video-in-any-active-scene": "Request the statistics of this video in any active scene",
|
||||
"solo-this-video-everywhere": "Solo this video everywhere",
|
||||
"hide-this-guest-everywhere": "Hide this guest everywhere",
|
||||
"set-to-default-audio-channel": "Set to Default Audio Channel",
|
||||
"toggle-the-remote-guest-s-speaker-output": "Toggle the remote guest's speaker output",
|
||||
"toggle-the-remote-guest-s-display-output": "Toggle the remote guest's display output",
|
||||
"shift-this-video-down-in-order": "Shift this Video Down in Order",
|
||||
"current-index-order-of-this-video": "Current Index Order of this Video",
|
||||
"shift-this-video-up-in-order": "Shift this Video Up in Order",
|
||||
"remotely-reload-the-guest-s-page-with-a-new-url": "Remotely reload the guest's page with a new URL",
|
||||
"change-user-parameters": "Change user parameters",
|
||||
"start-recording-this-remote-stream-to-this-local-drive-experimental-": "Start Recording this remote stream to this local drive. *experimental*'",
|
||||
"the-remote-guest-will-record-their-local-stream-to-their-local-drive-experimental-": "The Remote Guest will record their local stream to their local drive. *experimental*",
|
||||
"remotely-change-the-volume-of-this-guest": "Remotely change the volume of this guest",
|
||||
"disable-video-preview": "Disable Video Preview",
|
||||
"low-quality-preview": "Low-Quality Preview",
|
||||
"high-quality-preview": "High-Quality Preview",
|
||||
"set-to-audio-channel-1": "Set to Audio Channel 1",
|
||||
"set-to-audio-channel-2": "Set to Audio Channel 2",
|
||||
"set-to-audio-channel-3": "Set to Audio Channel 3",
|
||||
"set-to-audio-channel-4": "Set to Audio Channel 4",
|
||||
"set-to-audio-channel-5": "Set to Audio Channel 5",
|
||||
"toggle-the-remote-guest-s-speaker-output": "Toggle the remote guest's speaker output",
|
||||
"toggle-the-remote-guest-s-display-output": "Toggle the remote guest's display output",
|
||||
"set-to-audio-channel-6": "Set to Audio Channel 6",
|
||||
"set-to-audio-channel-7": "Set to Audio Channel 7",
|
||||
"set-to-audio-channel-8": "Set to Audio Channel 8",
|
||||
"force-the-remote-sender-to-issue-a-keyframe-to-all-scenes-fixing-pixel-smearing-issues-": "Force the remote sender to issue a keyframe to all scenes, fixing Pixel Smearing issues.",
|
||||
"remotely-reload-the-guest-s-page-with-a-new-url": "Remotely reload the guest's page with a new URL",
|
||||
"change-user-parameters": "Change user parameters",
|
||||
"solo-this-video-everywhere": "Solo this video everywhere",
|
||||
"request-the-statistics-of-this-video-in-any-active-scene": "Request the statistics of this video in any active scene",
|
||||
"remote-audio-settings": "Remote Audio Settings",
|
||||
"advanced-video-settings": "Advanced Video Settings",
|
||||
"add-to-scene-2": "Add to Scene 2",
|
||||
"activate-or-reload-this-video-device-": "Activate or Reload this video device.",
|
||||
"cannot-see-videos": "Cannot see videos",
|
||||
"cannot-hear-others": "Cannot hear others",
|
||||
"see-director-only": "See director only",
|
||||
@ -122,8 +122,7 @@
|
||||
"enable-custom-password": "Enable custom password"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "\n\t\t\t\t\t<font id=\"qos\">O</font>BS.Ninja \n\t\t\t\t",
|
||||
"copy-this-url": "Copy this URL into an OBS \"Browser Source\"",
|
||||
"copy-this-url": "Copy this URL into your studio's \"browser Source\"",
|
||||
"you-are-in-the-control-center": "Control center for room:",
|
||||
"joining-room": "You are in room",
|
||||
"add-group-chat": "Create a Room",
|
||||
@ -131,23 +130,30 @@
|
||||
"room-name": "Room Name",
|
||||
"password-input-field": "Password",
|
||||
"guests-only-see-director": "Guests can only see the Director's Video",
|
||||
"scenes-can-see-director": "Director will also be a performer",
|
||||
"default-codec-select": "Preferred Video Codec: ",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"show-tips": "Show me some tips..",
|
||||
"added-notes": "\n\t\t\t\t\t\t\t\t<u>\n\t\t\t\t\t\t\t\t\t<i>Important Tips:</i><br><br>\n\t\t\t\t\t\t\t\t</u>\n\t\t\t\t\t\t\t\t<li>Disabling video sharing between guests will improve performance</li>\n\t\t\t\t\t\t\t\t<li>Invite only guests to the room that you trust.</li>\n\t\t\t\t\t\t\t\t<li>The \"Recording\" option is considered experimental.</li>\n\t\t\t\t\t\t\t\t<li><a href=\"https://params.obs.ninja\" style=\"color:black;\"><u>Advanced URL parameters</u></a> are available to customize rooms.</li>\n\t\t\t\t\t\t\t",
|
||||
"added-notes": "\n\t\t\t\t\t\t\t\t<u>\n\t\t\t\t\t\t\t\t\t<i>Important Tips:</i><br><br>\n\t\t\t\t\t\t\t\t</u>\n\t\t\t\t\t\t\t\t<li>Disabling video sharing between guests will improve performance</li>\n\t\t\t\t\t\t\t\t<li>Invite only guests to the room that you trust.</li>\n\t\t\t\t\t\t\t\t<li>The \"Recording\" option is considered experimental.</li>",
|
||||
"back": "Back",
|
||||
"add-your-camera": "Add your Camera to OBS",
|
||||
"add-your-camera": "Add your Camera",
|
||||
"ask-for-permissions": "Allow Access to Camera/Microphone",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "1080p (hi-def)",
|
||||
"balanced": "720p (balanced)",
|
||||
"smooth-cool": "360p (smooth)",
|
||||
"max-resolution": "Max Resolution",
|
||||
"balanced": "Balanced",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"select-audio-source": " Audio Source(s) ",
|
||||
"no-audio": "No Audio",
|
||||
"select-output-source": " Audio Output Destination: ",
|
||||
"remote-screenshare-obs": "Remote Screenshare into OBS",
|
||||
"note-share-audio": "\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<video id=\"screenshare\" autoplay=\"true\" muted=\"true\" loop=\"\" src=\"./images/screenshare.webm\"></video>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"add-a-password": " Add a Password:",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"audio-sources": "Audio Sources",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
@ -169,63 +175,100 @@
|
||||
"can-hear-only": "Can only hear the group chat",
|
||||
"cant-see-or-hear": "Cannot hear or see the group chat",
|
||||
"share-local-video-file": "Stream Media File",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"share-website-iframe": "Share Website",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"run-a-speed-test": "Run a Speed Test",
|
||||
"read-the-guides": "Browse the Guides",
|
||||
"info-blob": "\n\t\t\t\t\t\t\t<h2>What is OBS.Ninja</h2>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<li>100% \n\t\t\t\t\t\t\t\t<b>free</b>; no downloads; no personal data collection; no sign-in\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>Bring video from your smartphone, computer, or friends directly into your OBS video stream</li>\n\t\t\t\t\t\t\t<li>We use cutting edge Peer-to-Peer forwarding technology that offers privacy and ultra-low latency</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t",
|
||||
"info-blob": "",
|
||||
"hide-the-links": " LINKS (GUEST INVITES & SCENES)",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> Click Here for a quick overview and help\n\t\t\t\t\t",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Known Limitations with Group Rooms:</font><br>\n\t\t\t\t\t\t<li>A group room can handle up to around 30 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room. To achieve more than around 7-guests though, you will likely want to <a href=\"https://www.youtube.com/watch?v=bpRa8-UYCGc\" title=\"Youtube Video demoing how to do this\">disable video sharing between guests</a>. Using &broadcast, &roombitrate=0 or &novideo are options there.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>Videos will appear of low quality on purpose for guests and director; this is to save bandwidth and CPU resources. It will be high-quality within OBS still though.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>The state of the scenes, such as which videos are active in a scene, are lost when the director resets the control-room or the scene.</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\tFurther Notes:<br><br>\n\t\t\t\t\t\t<li>Links to Solo-views of each guest video are offered under videos as they load. These can be used within an OBS Browser Source.</li>\n\t\t\t\t\t\t<li>You can use the auto-mixing Group Scenes, the green links, to auto arrange multiple videos for you in OBS.</li>\n\t\t\t\t\t\t<li>You can use this control room to record isolated video or audio streams, but it is an experimental feature still.</li>\n\t\t\t\t\t\t<li>If you transfer a guest from one room to another, they won't know which room they have been transferred to.</li>\n\t\t\t\t\t\t<li>OBS will see a guest's video in high-quality; the default video bitrate is 2500kbps. Setting higher bitrates will improve motion.</li>\n\t\t\t\t\t\t<li>VP8 is typically the default video codec, but using &codec=vp9 or &codec=h264 as a URL in OBS can help to reduce corrupted video puke issues.</li>\n\t\t\t\t\t\t<li>&stereo=2 can be added to guests to turn off audio effects, such as echo cancellation and noise-reduction.</li>\n\t\t\t\t\t\t<li>https://invite.cam is a free service provided that can help obfuscuate the URL parameters of an invite link given to guests.</li>\n\t\t\t\t\t\t<li>Adding &showonly=SOME_OBS_VIRTUALCAM to the guest invite links allows for only a single video to be seen by the guests; this can be output of the OBS Virtual Camera for example</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\n\t\t\t\t\t\tFor advanced URL options and parameters, <a href=\"https://github.com/steveseguin/obsninja/wiki/Advanced-Settings\">see the Wiki.</a>\n\t\t\t\t\t",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> <span data-translate=\"click-here-for-help\">Click Here for a quick overview and help</span>\n\t\t\t\t\t",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Known Limitations with Group Rooms:</font><br>\n\t\t\t\t\t\t<li>A group room can handle up to around 30 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>Videos will appear of low quality on purpose for guests and director; this is to save bandwidth and CPU resources.",
|
||||
"invite-users-to-join": "Guests can use the link to join the group room",
|
||||
"this-is-obs-browser-source-link": "Use in OBS or other studio software to capture the group video mix",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"this-is-obs-browser-source-link": "Use in your studio software to capture the group video mix",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.",
|
||||
"forward-to-room": "Transfer",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"add-to-scene": "Add to Scene",
|
||||
"mute-scene": "mute in scene",
|
||||
"mute-guest": "mute guest",
|
||||
"change-to-low-quality": " <i class=\"las la-video-slash\"></i>",
|
||||
"change-to-medium-quality": " <i class=\"las la-video\"></i>",
|
||||
"change-to-high-quality": " <i class=\"las la-binoculars\"></i>",
|
||||
"disconnect-guest": "Hangup",
|
||||
"record-local": " Record Local",
|
||||
"record-remote": " Record Remote",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"order-down": "<i class=\"las la-minus\"></i>",
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings",
|
||||
"advanced-camera-settings": "<i class=\"las la-sliders-h\"></i> Video Settings",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"welcome-to-obs-ninja-chat": "\n\t\t\t\t\tWelcome to OBS.Ninja! You can send text messages directly to connected peers from here.\n\t\t\t\t",
|
||||
"names-and-labels-coming-soon": "\n\t\t\t\t\tNames identifying connected peers will be a feature in an upcoming release.\n\t\t\t\t",
|
||||
"send-chat": "Send",
|
||||
"available-languages": "Available Languages:",
|
||||
"add-more-here": "Add More Here!",
|
||||
"scenes-can-see-director": "Director will also be a performer",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"add-a-password": " Add a Password:",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Solo Talk",
|
||||
"add-to-scene": "add to scene 1",
|
||||
"mute-guest": "mute guest",
|
||||
"More-scene-options": "More scene options",
|
||||
"mute-scene": "mute in scene",
|
||||
"force-keyframe": "Rainbow Puke Fix",
|
||||
"stats-remote": " Scene Stats",
|
||||
"additional-controls": "Additional controls",
|
||||
"solo-video": "Highlight guest",
|
||||
"hide-guest": "hide guest",
|
||||
"toggle-remote-speaker": "Deafen Guest",
|
||||
"toggle-remote-display": "Blind Guest",
|
||||
"force-keyframe": "Rainbow Puke",
|
||||
"order-down": "<i class=\"las la-minus\"></i>",
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"change-url": "Change URL",
|
||||
"change-params": "URL Params",
|
||||
"solo-video": "Highlight guest",
|
||||
"stats-remote": " Scene Stats",
|
||||
"record-local": " Record",
|
||||
"record-remote": " Record Remote",
|
||||
"change-to-low-quality": " <i class=\"las la-video-slash\"></i>",
|
||||
"change-to-medium-quality": " <i class=\"las la-video\"></i>",
|
||||
"change-to-high-quality": " <i class=\"las la-binoculars\"></i>",
|
||||
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings",
|
||||
"advanced-camera-settings": "<i class=\"las la-sliders-h\"></i> Video Settings",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"send-chat": "Send",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"invisible-guests": "Not Visible",
|
||||
"available-languages": "Available Languages:",
|
||||
"add-more-here": "Add More Here!",
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
"enter-a-room-name-here": "Enter a Room Name here",
|
||||
"optional-room-password-here": "Optional room password here",
|
||||
"optional": "optional",
|
||||
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
|
||||
"add-an-optional-password": "Add an optional password",
|
||||
"enter-room-name-here": "Enter Room name here",
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"optional": "optional",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
}
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Rejoindre via le nom de salle ici",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Ga binnen met een kamer naam",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja - Pig Latin",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Erehay ouyay ancay epray-enerategay",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Botão de levantar a mão",
|
||||
"show-labels": "Mostrar identificadores",
|
||||
"transfer-to-a-new-room": "Transferir para uma nova Sala",
|
||||
"enable-custom-password": "Ativar password personalizada"
|
||||
"enable-custom-password": "Ativar password personalizada",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Estatísticas da Cena",
|
||||
"apply-new-guest-settings": "Aplicar definições",
|
||||
"cancel": "Cancelar",
|
||||
"add-to-calendar": "Adicionar detalhes ao seu calendário:"
|
||||
"add-to-calendar": "Adicionar detalhes ao seu calendário:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Introduza aqui numa sala pelo seu nome",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja (RU)",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -127,7 +127,13 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -235,7 +241,54 @@
|
||||
"stats-remote": " Scene Stats",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"add-to-calendar": "Add details to your Calendar:"
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"additional-controls": "Additional controls",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user