From e5f203e178cb00a64c176e2a0ddd21374a5672b0 Mon Sep 17 00:00:00 2001 From: Joel Calado Date: Sun, 2 May 2021 08:25:36 +0100 Subject: [PATCH 01/19] fix typo --- turnserver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/turnserver.md b/turnserver.md index 18b4815..d880cca 100644 --- a/turnserver.md +++ b/turnserver.md @@ -1,4 +1,4 @@ -## Install and setup gudie for a TURN Relay Server +## Install and setup guide for a TURN Relay Server #### why? You may want to deploy one to ensure high compatiblity with remote guests. If you try to use the official OBS.Ninja TURN servers for a private deployment, you may find yourself getting kicked off. From 3859cb2762a3f44b3707252238e7245df66e644e Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Tue, 4 May 2021 07:34:44 -0400 Subject: [PATCH 02/19] Fires every Feb 31st now --- .github/workflows/update-advanced-settings-toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-advanced-settings-toc.yml b/.github/workflows/update-advanced-settings-toc.yml index 1266830..6367a35 100644 --- a/.github/workflows/update-advanced-settings-toc.yml +++ b/.github/workflows/update-advanced-settings-toc.yml @@ -2,7 +2,7 @@ name: Update Advanced Settings Markdown TOC on: workflow_dispatch: schedule: - - cron: '0 3 * * *' + - cron: '0 0 5 31 2 ?' jobs: update-toc: From f734d631181c91b143f39d31b6f7aa16b7c319f2 Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Tue, 4 May 2021 07:36:30 -0400 Subject: [PATCH 03/19] Update update-advanced-settings-toc.yml --- .github/workflows/update-advanced-settings-toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-advanced-settings-toc.yml b/.github/workflows/update-advanced-settings-toc.yml index 6367a35..8667e93 100644 --- a/.github/workflows/update-advanced-settings-toc.yml +++ b/.github/workflows/update-advanced-settings-toc.yml @@ -2,7 +2,7 @@ name: Update Advanced Settings Markdown TOC on: workflow_dispatch: schedule: - - cron: '0 0 5 31 2 ?' + - cron: '0 0 5 31 2' jobs: update-toc: From b92af980fbe0d8ab1a1ab35a7521bab74544ccc0 Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Tue, 4 May 2021 07:39:44 -0400 Subject: [PATCH 04/19] Update update-advanced-settings-toc.yml --- .github/workflows/update-advanced-settings-toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-advanced-settings-toc.yml b/.github/workflows/update-advanced-settings-toc.yml index 8667e93..5e58316 100644 --- a/.github/workflows/update-advanced-settings-toc.yml +++ b/.github/workflows/update-advanced-settings-toc.yml @@ -2,7 +2,7 @@ name: Update Advanced Settings Markdown TOC on: workflow_dispatch: schedule: - - cron: '0 0 5 31 2' + - cron: '0 0 29 2 1' jobs: update-toc: From 2be4038885d32f480762bdfc014e5e0623462bfe Mon Sep 17 00:00:00 2001 From: Duncan Barnes Date: Wed, 5 May 2021 12:19:48 +0100 Subject: [PATCH 05/19] iFrame styling in CSS not JS Small change, moved iframe styling to CSS, allows &css param to override iframe styling without requiring !important on the end of values. --- main.css | 8 ++++++++ main.js | 4 ---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/main.css b/main.css index ad72b91..2f92681 100644 --- a/main.css +++ b/main.css @@ -2467,6 +2467,14 @@ span#guestTips { display: block; margin: auto; } + +#iframe_source{ + width: 100%; + height: 100%; + margin: auto; + border: 10px dashed rgb(64 65 62) +} + #shareScreenGear{ display:none; } diff --git a/main.js b/main.js index 316b565..3e24749 100644 --- a/main.js +++ b/main.js @@ -6686,10 +6686,6 @@ session.publishIFrame = function(iframeURL){ iframe.allow="autoplay;camera;microphone"; iframe.allowtransparency="true"; iframe.allowfullscreen ="true"; - iframe.style.width="100%"; - iframe.style.height="100%"; - iframe.style.margin="auto"; - iframe.style.border = "10px dashed rgb(64 65 62)"; iframe.src = session.iframeSrc; iframe.id = "iframe_source" session.iframeEle = iframe; From 495f508919e55b32004e3eebb70bb7238e0375ac Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Fri, 7 May 2021 04:16:45 -0400 Subject: [PATCH 06/19] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 22d67bb..8c1515e 100644 --- a/README.md +++ b/README.md @@ -63,9 +63,6 @@ http://chat.overlay.ninja/ A website designed to also work with OBS.Ninja as a Broadcasting tool. Share your webcam, window, desktop, or video file with friends and family. Peer-2-peer, so privacy can be maintained, but you can also list your broadcasts for others to watch. https://steves.app/ -### StageTEN.tv -A browser-based studio solution and simplified alternative to OBS, with built-in OBS.Ninja functionality. It is a server-based approach to group interactions and live production. Steve Seguin is affiliated with StageTEn, yet StageTEN is not affiliated with OBS.Ninja. - ## Privacy I try to avoid data collection whenever possible and video streams are generally designed to be private, but use at your own risk. It is best to not share links created with OBS.Ninja with those you do not trust. I've provided instructions on how to deploy a TURN server if IP-address privacy is an issue for you. See: [turnserver.md](turnserver.md) From 2bf59f0c2a5631e11df0db061f5ee2c42a8f5736 Mon Sep 17 00:00:00 2001 From: Jumper78 <52802286+Jumper78@users.noreply.github.com> Date: Wed, 12 May 2021 13:13:08 +0200 Subject: [PATCH 07/19] correct link to advanced documentation the link to advanced documentation has pointed to a non-existing page; I pointed it to: https://docs.obs.ninja/advanced-settings --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 44f5074..82f98b5 100644 --- a/index.html +++ b/index.html @@ -594,7 +594,7 @@
See the - documentation for more options and info. + documentation for more options and info.
@@ -1506,7 +1506,7 @@ From bc5fd78196cc46bce19bc184b99689f40dd3ecb4 Mon Sep 17 00:00:00 2001 From: Joel Calado Date: Wed, 12 May 2021 19:19:43 +0100 Subject: [PATCH 08/19] overhaul of the electron capture UI --- electron.html | 269 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 173 insertions(+), 96 deletions(-) diff --git a/electron.html b/electron.html index b021e7a..1ed5d3c 100644 --- a/electron.html +++ b/electron.html @@ -1,11 +1,13 @@ - - -
+ +
- - - - + + - - - - - - - - - - - - -

-
- - -

- - -
+
+
+ + + +
+
+ +
+
@@ -166,6 +241,54 @@ input[type='checkbox']:checked { if (navigator.userAgent.indexOf('Mac OS X') != -1){ document.getElementById("warning4mac").style.display="block"; +} else if (location.hostname.toLowerCase() == "obs.ninja"){ + try { + if (navigator.userAgent.toLowerCase().indexOf(' electron/') > -1) { // for now, just PC or Linux versions only. + function compareVersions(version){ + version = version.split("."); + fetch('https://api.github.com/repos/steveseguin/electroncapture/releases/latest') + .then(response => response.json()) + .then(data => { + console.log("recentVersion: "+data.tag_name); + var recentVersion = data.tag_name.split("."); + var ood = false; + if (recentVersion[0]>version[0]){ + ood = true; + } else if (recentVersion[0]==version[0]) { + if (recentVersion[1]>version[1]){ + ood = true; + } else if (recentVersion[1]==version[1]) { + if (recentVersion[2]>version[2]){ + ood = true; + } + } + } + if (ood){ + document.getElementById("electronVersion").style.display = "block"; + document.getElementById("currentElectronVersion").innerText = data.tag_name; + } + }); + } + if (urlParams.has('version')){ + var ver = urlParams.get('version'); + console.log("version: "+ver); + compareVersions(ver); + } else{ + var checkVersion = setTimeout(function(){ // pre 1.5.2 + compareVersions("0.0.0"); + },500); + + const ipcRenderer = require('electron').ipcRenderer; + console.log("ELECTRON DETECTED"); + ipcRenderer.on('appVersion', function(event, version) { + clearTimeout(checkVersion); + console.log("version: "+version); + compareVersions(version); + }) + ipcRenderer.send('getAppVersion'); + } + } + } catch(e){console.error(e);} } var audioOutputSelect = document.querySelector('select#audioOutput'); @@ -249,9 +372,9 @@ if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(naviga isMobile=true; // if iOS, default to H264? meh. let's not. } // Windows can show the cursor, since it captures in a different way. -if (navigator.platform.indexOf("Win") != -1){ - document.getElementById("showcursor").checked=true; -} +//if (navigator.platform.indexOf("Win") != -1){ +// document.getElementById("showcursor").checked=true; +//} function updateURLParameter(url, param, paramVal){ var TheAnchor = null; @@ -307,52 +430,6 @@ if (urlParams.has('name')){ function modURL(ele=false){ var url = document.getElementById('changeText').value; console.log(url); - if ((url.split("view").length>0) || (url.split("room").length>0)){ - if (!document.getElementById("showcursor").checked){ - url=updateURLParameter(url, "nocursor", ""); - } else { - url=updateURLParameter(url, "nocursor", false); - } - - if (ele!=false){ - if (ele.id =="prefervp9"){ - if (document.getElementById("prefervp9").checked){ - url=updateURLParameter(url, "codec", "vp9"); - } else { - url=updateURLParameter(url, "codec", false); - } - } - - if (ele.id =="highbitrate"){ - if (document.getElementById("highbitrate").checked){ - url=updateURLParameter(url, "bitrate", "10000"); - } else { - url=updateURLParameter(url, "bitrate", false); - } - } - - if (ele.id =="stereo"){ - if (document.getElementById("stereo").checked){ - url=updateURLParameter(url, "proaudio", ""); - document.getElementById("messageDiv").innerHTML = "Audio bitrate increased to 256-kbps.\n\nPlease note that the Sender must also have the &proaudio flag added for full-effect"; - document.getElementById("messageDiv").style.display="block"; - setTimeout(function(){document.getElementById("messageDiv").style.opacity="1.0";},0); - } else { - url=updateURLParameter(url, "proaudio", false); - setTimeout(function(){document.getElementById("messageDiv").style.opacity="0";},0); - } - } - - if (ele.id =="buffer"){ - if (document.getElementById("buffer").checked){ - url=updateURLParameter(url, "buffer", ""); - } else { - url=updateURLParameter(url, "buffer", false); - } - } - } - - } document.getElementById('changeText').value = url; console.log(url); return url; From 74670f5dd04c194708b4a6829fecf04037b03269 Mon Sep 17 00:00:00 2001 From: Joel Calado Date: Wed, 12 May 2021 21:11:58 +0100 Subject: [PATCH 09/19] remember last used url --- electron.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/electron.html b/electron.html index 1ed5d3c..952f31b 100644 --- a/electron.html +++ b/electron.html @@ -238,6 +238,7 @@ label[for="audioOutput"] { * tree. Alternative licencing options can be made available on request. * */ +document.querySelector("#changeText").value = localStorage.getItem('lastURL'); if (navigator.userAgent.indexOf('Mac OS X') != -1){ document.getElementById("warning4mac").style.display="block"; @@ -435,6 +436,7 @@ function modURL(ele=false){ return url; } function gohere(){ + localStorage.setItem('lastURL', document.getElementById('changeText').value); 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."); From 14cf419e318430d6c3c218a8bcd8c8241b57e430 Mon Sep 17 00:00:00 2001 From: Joel Calado Date: Wed, 12 May 2021 22:34:46 +0100 Subject: [PATCH 10/19] last 5 urls instead of last url --- electron.html | 94 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 75 insertions(+), 19 deletions(-) diff --git a/electron.html b/electron.html index 952f31b..c8a93bd 100644 --- a/electron.html +++ b/electron.html @@ -23,7 +23,6 @@ body { padding: 0 0px; height: 100%; width: 100%; - /* background-color: #202738; */ background-color: -webkit-linear-gradient(to top, #363644, 50%, #151b29); /* Chrome 10-25, Safari 5.1-6 */ background: linear-gradient(to top, #363644, 50%, #151b29); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */ font-size: 2em; @@ -69,19 +68,15 @@ button.glyphicon-button.active.focus { input#changeText { font-size: 1em; align-self: center; - /* height: 30px; */ width: 100%; - /* margin: auto auto; */ padding: 1em; font-weight: bold; font-family: system-ui; background: white; border-bottom: 4px solid #6aab23; box-shadow: 0px 30px 40px -32px #6aab23; - /* border: none; */ border-top-left-radius: 10px; border-bottom-left-radius: 10px; - /* border-bottom: 2px solid #6aab23; */ transition: all 0.2s linear; } @@ -111,7 +106,7 @@ input[type='checkbox'] { input[type='checkbox']:checked { background: #1A1; } -#audioOutput { +#audioOutput, #lastUrls { font-size: calc(16px + 0.3vw); width: 730px; height: 100%; @@ -134,7 +129,17 @@ label[for="changeText"] { padding-top: 10px; padding-right: 10px; } -div#audioOutputContainer { + +label[for="lastUrls"] { +font-size: 3em; + color: #1a1; + text-shadow: 0px 0px 30px #1a1; + padding-top: 10px; + padding-right: 10px; + cursor: pointer; +} + +div#audioOutputContainer, #history { display: flex; flex-direction: row; flex-wrap: nowrap; @@ -157,9 +162,9 @@ div#audioOutputContainer { -moz-transform-origin: 0 0; } - #audioOutput{ - font-size: calc(14px + 1.4vw); - max-width:486px + .container{ + /* font-size: calc(14px + 1.4vw); */ + max-width:750px; } } @@ -175,15 +180,11 @@ div#audioOutputContainer { div#urlInput { margin: 4em; - /* background: #353543; */ - /* border-radius: 10px; */ - /* box-shadow: 0px 36px 40px -41px #24baff; */ - /* border-bottom: 3px solid #24baff; */ display: flex; flex-direction: row; } -label[for="audioOutput"] { +label[for="audioOutput"], label[for="lastUrls"] { font-size: 3em; } @@ -204,6 +205,20 @@ label[for="audioOutput"] { color:white; } + ul#lastUrls { + list-style: none; + background: #101520; + color: white; + padding: 1em; +} + +ul#lastUrls li { + padding: 5px 0px; +} +ul#lastUrls li:nth-child(even) { + background-color: #182031; +} + @@ -223,8 +238,15 @@ label[for="audioOutput"] {
- -
+ + +
+ + +
+ @@ -238,7 +260,28 @@ label[for="audioOutput"] { * tree. Alternative licencing options can be made available on request. * */ -document.querySelector("#changeText").value = localStorage.getItem('lastURL'); +var lastUrls = JSON.parse(localStorage.getItem('lastUrls')); +if (lastUrls != undefined) { + document.querySelector("#changeText").value = lastUrls[0]; + + lastUrls.forEach((url)=>{ + var o = document.createElement('option'); + o.value = url; + o.text = url; + document.querySelector("#lastUrls").appendChild(o); + }) +} + +function setUrl(){ + document.querySelector("#changeText").value = document.querySelector("#lastUrls").value; + gohere(); +} + +function resetHistory(){ + localStorage.clear(); + document.querySelector('#lastUrls').innerHTML = ''; + lastUrls = []; +} if (navigator.userAgent.indexOf('Mac OS X') != -1){ document.getElementById("warning4mac").style.display="block"; @@ -428,6 +471,18 @@ if (urlParams.has('name')){ } } +function addUrlToHistory(url){ + if (lastUrls == undefined){ + lastUrls = []; + } + if ( lastUrls[0] != url ) { + lastUrls.unshift(url); + if (lastUrls.length == 6) { + lastUrls.pop(); + } + } +} + function modURL(ele=false){ var url = document.getElementById('changeText').value; console.log(url); @@ -436,7 +491,8 @@ function modURL(ele=false){ return url; } function gohere(){ - localStorage.setItem('lastURL', document.getElementById('changeText').value); + addUrlToHistory(document.getElementById('changeText').value); + localStorage.setItem('lastUrls', JSON.stringify(lastUrls)); 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."); From 8cbd26e34b64894bc8377e99d7322ebd54437d7f Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Thu, 13 May 2021 02:41:10 -0400 Subject: [PATCH 11/19] Update electron.html --- electron.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electron.html b/electron.html index c8a93bd..4a20067 100644 --- a/electron.html +++ b/electron.html @@ -311,7 +311,7 @@ if (navigator.userAgent.indexOf('Mac OS X') != -1){ document.getElementById("electronVersion").style.display = "block"; document.getElementById("currentElectronVersion").innerText = data.tag_name; } - }); + }).catch(console.error); } if (urlParams.has('version')){ var ver = urlParams.get('version'); From d66a44e57c176aec1920cef7b4525aa4aac7e63f Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Thu, 13 May 2021 02:50:43 -0400 Subject: [PATCH 12/19] Update electron.html --- electron.html | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/electron.html b/electron.html index 4a20067..9f38e35 100644 --- a/electron.html +++ b/electron.html @@ -60,6 +60,7 @@ button.glyphicon-button.active.focus { right: 2px; top: 1px; color:white; + cursor:pointer; } #header{ width:100%; @@ -114,6 +115,7 @@ input[type='checkbox']:checked { border-radius: 10px; padding: 1em; background: #eaeaea; + cursor:pointer; } label[for="audioOutput"] { font-size: 3em; @@ -234,7 +236,7 @@ ul#lastUrls li:nth-child(even) { - +
@@ -263,13 +265,18 @@ ul#lastUrls li:nth-child(even) { var lastUrls = JSON.parse(localStorage.getItem('lastUrls')); if (lastUrls != undefined) { document.querySelector("#changeText").value = lastUrls[0]; - - lastUrls.forEach((url)=>{ - var o = document.createElement('option'); - o.value = url; - o.text = url; - document.querySelector("#lastUrls").appendChild(o); - }) + if (lastUrls.length>0){ + lastUrls.forEach((url)=>{ + var o = document.createElement('option'); + o.value = url; + o.text = url; + document.querySelector("#lastUrls").appendChild(o); + }) + } else { + document.querySelector("#history").style.display="none"; + } +} else { + document.querySelector("#history").style.display="none"; } function setUrl(){ @@ -503,26 +510,3 @@ getPermssions(); - - - - - - - - - - - - - - - - - - - - - - - From 3882583d6c98ac6fca2c4dbb090cdf1dcf3d5a23 Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Thu, 13 May 2021 03:15:17 -0400 Subject: [PATCH 13/19] Update electron.html --- electron.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/electron.html b/electron.html index 9f38e35..ecf59b3 100644 --- a/electron.html +++ b/electron.html @@ -232,17 +232,17 @@ ul#lastUrls li:nth-child(even) {

-
+
-
+
-
+
From 15030fe1236fc8ca9b8c20e4e2ca16f05def533f Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Thu, 13 May 2021 05:10:55 -0400 Subject: [PATCH 14/19] Add files via upload --- changepass.html | 25 ++++++++++++++++ electron.html | 2 +- index.html | 14 ++++----- main.css | 10 +------ main.js | 78 ++++++++++++------------------------------------- monitor.html | 7 ++--- speedtest.css | 7 +++++ speedtest.html | 16 +++++++++- webrtc.js | 2 +- 9 files changed, 79 insertions(+), 82 deletions(-) create mode 100644 changepass.html diff --git a/changepass.html b/changepass.html new file mode 100644 index 0000000..097f777 --- /dev/null +++ b/changepass.html @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/electron.html b/electron.html index ecf59b3..a4d5b64 100644 --- a/electron.html +++ b/electron.html @@ -509,4 +509,4 @@ function gohere(){ getPermssions(); - + \ No newline at end of file diff --git a/index.html b/index.html index 82f98b5..b57b742 100644 --- a/index.html +++ b/index.html @@ -55,7 +55,7 @@ } - + @@ -167,7 +167,7 @@ @@ -771,7 +771,7 @@
  • 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

  • - For advanced URL options and parameters, see the Wiki. + For advanced URL options and parameters, see the Documentation.
    diff --git a/main.css b/main.css index 2f92681..73adcf6 100644 --- a/main.css +++ b/main.css @@ -226,7 +226,7 @@ button.white:active { text-shadow: 0.05em 0.05em 0px rgba(0,0,0,1); width:100%; height:100vh; - z-index: 1; + z-index: 6; vertical-align: top; text-align: center; top: 0; @@ -2467,14 +2467,6 @@ span#guestTips { display: block; margin: auto; } - -#iframe_source{ - width: 100%; - height: 100%; - margin: auto; - border: 10px dashed rgb(64 65 62) -} - #shareScreenGear{ display:none; } diff --git a/main.js b/main.js index 3e24749..6d26add 100644 --- a/main.js +++ b/main.js @@ -550,60 +550,8 @@ if (window.obsstudio) { }); }); - window.obsstudio.onVisibilityChange = function obsvisibility(visibility){ - try { - log("OBS VISIBILITY:"+visibility); - if (session.disableOBS===false){ - var bundle = {}; - bundle.sceneUpdate = []; - for (var UUID in session.rpcs){ - if (session.rpcs[UUID].visibility!==visibility){ // only move forward if there is a change; the event likes to double fire you see. - - session.rpcs[UUID].visibility = visibility; - var msg = {}; - msg.visibility = visibility; - - if (session.rpcs[UUID].videoElement.style.display == "none"){ // Flag will be left alone, but message will say its disabled. - msg.visibility = false; - } - if (session.optimize!==false){ - ////////////// bandwidth stuff - var bandwidth = parseInt(session.rpcs[UUID].targetBandwidth); // we don't want to change the target bandwidth, as that's still the real goal and are point of reference for reverting this change. - log("bandwidth:"+bandwidth); - if (visibility==false){ // limit bandwidth if not visible - if ((bandwidth > session.optimize) || (bandwidth<0)){ // limit to optimized bitrate - bandwidth = session.optimize; - } - } - if (session.rpcs[UUID].bandwidth !== bandwidth){ // bandwidth already set correctly. don't resend. - msg.bitrate = bandwidth; - if (session.sendRequest(msg, UUID)){ - session.rpcs[UUID].bandwidth=bandwidth; // this is letting the system know what the actual bandwidth is, even if it isn't the real target. - } else { - errorlog("Unable to set update OBS Visibility"); - } - } else { - session.sendRequest(msg, UUID); - msg.UUID = UUID; - bundle.sceneUpdate.push(msg) - } - ///////////////// end bandwidth stuff - } else { - session.sendRequest(msg, UUID); - msg.UUID = UUID; - bundle.sceneUpdate.push(msg) - } - } - } - for (var UUID in session.rpcs){ - session.sendRequest(bundle, UUID); - } - } - } catch (e){errorlog(e)}; - }; } - window.onload = function winonLoad() { // This just keeps people from killing the live stream accidentally. Also give me a headsup that the stream is ending window.addEventListener("beforeunload", function(e) { try { @@ -910,9 +858,13 @@ if (/CriOS/i.test(navigator.userAgent) && (iOS || iPad)) { } } +if (urlParams.has('tips')){ + getById("guestTips").style.display="flex"; +} + if (urlParams.has('broadcast') || urlParams.has('bc')) { log("Broadcast flag set"); - session.broadcast = urlParams.get('broadcast') || urlParams.get('bc'); + session.broadcast = urlParams.get('broadcast') || urlParams.get('bc') || null; //if ((iOS) || (iPad)) { // session.nopreview = false; //} else { @@ -942,7 +894,7 @@ if (urlParams.has('showlist')) { var directorLanding = false; if (urlParams.has('director') || urlParams.has('dir')) { - directorLanding = urlParams.get('director') || urlParams.get('dir'); + directorLanding = urlParams.get('director') || urlParams.get('dir') || null; if (directorLanding === null) { directorLanding = true; } else if (directorLanding.length === 0) { @@ -2516,6 +2468,7 @@ if (urlParams.has('turn')) { } } else if ((turnstring == "false") || (turnstring == "off") || (turnstring == "0")) { // disable TURN servers + if (!session.configuration){session.configuration={};} session.configuration = { iceServers: [ { urls: ["stun:stun.l.google.com:19302", "stun:stun4.l.google.com:19302"]} // more than 4 stun+turn servers will cause firefox issues? (2 + 2 for now then) @@ -2530,9 +2483,12 @@ if (urlParams.has('turn')) { turn.username = turnstring[0]; // myusername turn.credential = turnstring[1]; //mypassword turn.urls = [turnstring[2]]; // ["turn:turn.obs.ninja:443"]; - session.configuration.iceServers = [{ - urls: ["stun:stun.l.google.com:19302", "stun:stun4.l.google.com:19302"] - }]; + session.configuration = { + iceServers: [ + { urls: ["stun:stun.l.google.com:19302", "stun:stun4.l.google.com:19302"]} // more than 4 stun+turn servers will cause firefox issues? (2 + 2 for now then) + ], + sdpSemantics: 'unified-plan' // future-proofing + }; session.configuration.iceServers.push(turn); } } catch (e) { @@ -4373,7 +4329,7 @@ function TFLiteWorker(){ URL.revokeObjectURL(session.tfliteModule.img.src); // no longer needed, free memory session.tfliteModule.img.ready = true; } - session.tfliteModule.img.src = "./media/bg_sample.jpg"; + session.tfliteModule.img.src = "./media/bg_sample.webp"; session.tfliteModule.img.ready = false; console.log('Starting Loop'); @@ -6686,6 +6642,10 @@ session.publishIFrame = function(iframeURL){ iframe.allow="autoplay;camera;microphone"; iframe.allowtransparency="true"; iframe.allowfullscreen ="true"; + iframe.style.width="100%"; + iframe.style.height="100%"; + iframe.style.margin="auto"; + iframe.style.border = "10px dashed rgb(64 65 62)"; iframe.src = session.iframeSrc; iframe.id = "iframe_source" session.iframeEle = iframe; @@ -16137,7 +16097,7 @@ function effectsDynamicallyUpdate(event, ele, preview=true){ } } else if (effect === "5"){ if (session.tfliteModule.img){ - session.tfliteModule.img.src = "./media/bg_sample.jpg"; + session.tfliteModule.img.src = "./media/bg_sample.webp"; } if ((session.effects<3) || (session.effects>5)){ session.effects = 5; diff --git a/monitor.html b/monitor.html index 912df1a..b4ef70c 100644 --- a/monitor.html +++ b/monitor.html @@ -260,11 +260,10 @@ var iframe = document.createElement("iframe"); - if (urlParams.has('remote') || urlParams.has('rem')) { - var remote = urlParams.get('remote') || urlParams.get('rem') || "nosecurity"; - remote = remote.trim(); + if (urlParams.has("remote")) { + var remote = urlParams.get("remote"); } else { - var remote = ""; + var remote=""; } if (urlParams.has("sid")) { diff --git a/speedtest.css b/speedtest.css index cd86776..6283e25 100644 --- a/speedtest.css +++ b/speedtest.css @@ -13,6 +13,10 @@ body { background-color: #141926; } +#add_screen{ + display:none; +} + h1 { color: white; margin: 20px 0px; @@ -24,6 +28,9 @@ h1 small { font-size: 0.5em; } +video { + transform: translate(0px, 0%) !important; +} #explanation { color: white; font-family: sans-serif; diff --git a/speedtest.html b/speedtest.html index 9573faf..508951c 100644 --- a/speedtest.html +++ b/speedtest.html @@ -54,6 +54,8 @@ } } + + function loadIframe() { // 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: loadIframe();"> !!! @@ -70,6 +72,8 @@ streamID = urlParams.get("sid"); } + + document.getElementById("remote").innerHTML = "Remote Monitoring Link



    "; var iframe = document.createElement("iframe"); @@ -80,7 +84,7 @@ iframe.allowfullscreen ="true"; //iframe.allow = "autoplay"; - var srcString = "./?push=" + streamID + "&cleanoutput&privacy&speedtest&webcam&audiodevice=0&fullscreen&transparent&remote"; + var srcString = "./?push=" + streamID + "&cleanoutput&privacy&speedtest&"+testType+"&audiodevice=0&fullscreen&transparent&remote"; if (urlParams.has("turn")) { srcString = srcString + "&turn=" + urlParams.get("turn"); @@ -363,10 +367,20 @@ +
    +
    \ No newline at end of file From 93a1813fda6d4226290363006c6ba52f00881ec1 Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Thu, 13 May 2021 05:21:52 -0400 Subject: [PATCH 16/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c1515e..6348c64 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Directions on how to deploy a TURN server are listed in the turnserver.md file. ## Server side / API software Since OBS.Ninja uses peer-2-peer technology, video connections are made directly between viewer and publisher in 90% of cases. Hosting a TURN server yourself may help improve performance, but less than 1% of users will see any benefit of this. Details on how to deploy a TURN server are provided. For those capable of hosting their own TURN server, that would be appreciated if possible, as TURN servers are the only real cost incurred by OBS.Ninja at present. (other than time, of course) -Other than TURN servers, OBS.Ninja also uses public STUN servers and a hosted handshake server. These are used to facilitate the initial setup of peer connections and are generally not required after a peer connection is established. These servers are free to access and use, even for private deployments. The handshake server's code is currently not available, so basic access to the Internet is still required to use OBS.Ninja even with a private deployment. +Other than TURN servers, OBS.Ninja also uses public STUN servers and a hosted handshake server. These are used to facilitate the initial setup of peer connections and are generally not required after a peer connection is established. These servers are free to access and use, even for private deployments. As of Version 17.3 of OBS.Ninja, you can host your own handshake server or use a third-party managed one (such as piesocket.com); please see details here: https://github.com/steveseguin/websocket_server Development builds of OBS.Ninja may include debugging software, but in-production releases have this removed. Double check to ensure "console.re" debugging is disabled before deployment, just to be safe. From 321f366c6b8cd9c3a538ba36a6ae600c4a771231 Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Fri, 14 May 2021 10:24:27 -0400 Subject: [PATCH 17/19] Add files via upload --- electron.html | 472 +++++++++++++++++++++++++++----------------------- 1 file changed, 260 insertions(+), 212 deletions(-) diff --git a/electron.html b/electron.html index a4d5b64..b7fc151 100644 --- a/electron.html +++ b/electron.html @@ -1,227 +1,274 @@ - + + - + div#urlInput { + margin: 4em; + display: flex; + flex-direction: row; + } + @media only screen and (max-width: 940px) { + body{ + zoom: 0.74; + -moz-transform: scale(0.74); + -moz-transform-origin: 0 0; + + } + .container{ + max-width:99%; + } + div#urlInput { + margin: 2em; + } + div#audioOutputContainer, #history { + margin: 2em; + } + } + @media only screen and (max-width: 840px) { + body{ + zoom: 0.64; + -moz-transform: scale(0.64); + -moz-transform-origin: 0 0; + + } + + } + + @media only screen and (max-height: 639px) { + div#urlInput { + margin: 2em; + } + div#audioOutputContainer, #history { + margin: 2em; + } + } + + @media only screen and (max-width: 767px) { + + div#urlInput { + margin: 2em 1em; + } + div#audioOutputContainer, #history { + margin: 2em 1em; + } + } + + + @media only screen and (max-height: 380px) { + div#urlInput { + margin: 1em; + } + div#audioOutputContainer, #history { + margin: 1em; + } + } + + + + label[for="audioOutput"], label[for="lastUrls"] { + font-size: 3em; + } + + #warning4mac, #electronVersion { + background: #8500f7; + box-shadow: 0px 0px 50px 10px #8500f7ab, inset 0px 0px 10px 2px #8d08ffba; + border: 2px solid #8500f7; + border-radius: 10px; + width: 90%; + padding:1em; + margin:0 auto; + color:white; + font-size:1.3em; + margin-bottom: 20px; + } + + #warning4mac a, #electronVersion a { + color:white; + } + + ul#lastUrls { + list-style: none; + background: #101520; + color: white; + padding: 1em; + } + + ul#lastUrls li { + padding: 5px 0px; + } + ul#lastUrls li:nth-child(even) { + background-color: #182031; + } + + + @@ -490,17 +537,18 @@ function addUrlToHistory(url){ } } -function modURL(ele=false){ +function modURL(){ var url = document.getElementById('changeText').value; - console.log(url); - document.getElementById('changeText').value = url; + if (url.startsWith("obs.ninja")){ + url = "https://"+url; + } console.log(url); return url; } function gohere(){ addUrlToHistory(document.getElementById('changeText').value); localStorage.setItem('lastUrls', JSON.stringify(lastUrls)); - var url = modURL(true); + var url = modURL(); 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."); } From e2e56e5f4b649226561d56e9815b91c761422d76 Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Fri, 14 May 2021 10:42:04 -0400 Subject: [PATCH 18/19] Add files via upload From d1c980f309bfbde97c2000c9c27d8b92a0bcd73a Mon Sep 17 00:00:00 2001 From: Steve Seguin Date: Mon, 17 May 2021 19:50:05 -0400 Subject: [PATCH 19/19] Add files via upload --- translations/es.json | 416 ++++++++++++++++++++----------------------- 1 file changed, 193 insertions(+), 223 deletions(-) diff --git a/translations/es.json b/translations/es.json index 4cc8639..2410b93 100644 --- a/translations/es.json +++ b/translations/es.json @@ -1,152 +1,140 @@ { "titles": { - "toggle-the-chat": "Toggle the Chat", - "mute-the-speaker": "Mute the Speaker", - "mute-the-mic": "Mute the Mic", - "disable-the-camera": "Disable the Camera", - "settings": "Settings", - "hangup-the-call": "Hangup the Call", - "show-help-info": "Show Help Info", - "language-options": "Language Options", - "tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple", - "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", - "disable-digital-audio-effects-and-increase-audio-bitrate": "Disable digital audio-effects and increase audio bitrate", - "the-guest-will-not-have-a-choice-over-audio-options": "The guest will not have a choice over audio-options", - "the-guest-will-only-be-able-to-select-their-webcam-as-an-option": "The guest will only be able to select their webcam as an option", - "hold-ctrl-and-the-mouse-wheel-to-zoom-in-and-out-remotely-of-compatible-video-streams": "Hold CTRL and the mouse wheel to zoom in and out remotely of compatible video streams", - "add-a-password-to-make-the-stream-inaccessible-to-those-without-the-password": "Add a password to make the stream inaccessible to those without the password", - "add-the-guest-to-a-group-chat-room-it-will-be-created-automatically-if-needed-": "Add the guest to a group-chat room; it will be created automatically if needed.", - "customize-the-room-settings-for-this-guest": "Customize the room settings for this guest", - "hold-ctrl-or-cmd-to-select-multiple-files": "Hold CTRL (or CMD) to select multiple files", - "enter-an-https-url": "Enter an HTTPS URL", - "lucy-g": "Lucy G", - "flaticon": "Flaticon", - "creative-commons-by-3-0": "Creative Commons BY 3.0", - "gregor-cresnar": "Gregor Cresnar", - "add-this-video-to-any-remote-scene-1-": "Add this Video to any remote '&scene=1'", - "forward-user-to-another-room-they-can-always-return-": "Forward user to another room. They can always return.", - "start-recording-this-stream-experimental-views": "Start Recording this stream. *experimental*' views", - "force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.", - "change-this-audio-s-volume-in-all-remote-scene-views": "Change this Audio's volume in all remote '&scene' views", - "remotely-mute-this-audio-in-all-remote-scene-views": "Remotely Mute this Audio in all remote '&scene' views", - "disable-video-preview": "Disable Video Preview", - "low-quality-preview": "Low-Quality Preview", - "high-quality-preview": "High-Quality Preview", - "send-direct-message": "Send Direct Message", - "advanced-settings-and-remote-control": "Advanced Settings and Remote Control", - "toggle-voice-chat-with-this-guest": "Toggle Voice Chat with this Guest", - "join-by-room-name-here": "Enter a room name to quick join", - "join-room": "Join room", - "share-a-screen-with-others": "Share a Screen with others", - "alert-the-host-you-want-to-speak": "Alert the host you want to speak", - "record-your-stream-to-disk": "Record your stream to disk", - "cancel-the-director-s-video-audio": "Cancel the Director's Video/Audio", - "submit-any-error-logs": "Submit any error logs", - "add-group-chat-to-obs": "Add Group Chat to OBS", - "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", - "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", - "remote-screenshare-into-obs": "Remote Screenshare into OBS", + "join-by-room-name-here": "Introduce un nombre de sala para entrar", + "join-room": "Unirse sala", + "load-the-next-guest-in-queue": "Cargar el siguiente invitado en la cola", + "toggle-the-chat": "Conmutar Chat", + "mute-the-speaker": "Mute Orador", + "mute-the-mic": "Mute Micro", + "disable-the-camera": "Desactivar Cámara", + "share-a-screen-with-others": "Compartir Pantalla con otros", + "create-a-secondary-stream": "Crear un Stream Secundario", + "settings": "Configuración", + "hangup-the-call": "Colgar", + "alert-the-host-you-want-to-speak": "Avisar Anfitrión que quieres hablar", + "record-your-stream-to-disk": "Grabar tu stream a disco", + "cancel-the-director-s-video-audio": "Cancelar el Video/Audio del Director", + "submit-any-error-logs": "Enviar cualquier registro de error", + "show-help-info": "Mostrar Ayuda", + "language-options": "Opciones Idioma", + "add-to-calendar": "Añadir al Calendario", + "add-group-chat-to-obs": "Añadir Chat Grupal", + "for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "Para salas de grupos grandes, esta opción reduce la carga en los clientes remotos de manera substancial", + "the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "El director será visible en las escenas, como si fuese a actuar.", + "useful-if-you-want-to-perform-and-direct-at-the-same-time": "Útil si quieres actuar y dirigir al mismo tiempo", + "which-video-codec-would-you-want-used-by-default-": "¿Qué codec de video quieres se utilice por defecto?", + "you-ll-enter-as-the-room-s-director": "Nunca entrarás como director de sala", + "add-your-camera-to-obs": "Añadir Cámara", + "start-streaming": "iniciar streaming", + "tip-hold-ctrl-command-to-select-multiple": "truco: Mantén pulsado CTRL (o CMD) para selección Múltiple", + "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 para juegos 1080p60, si tu PC y conexión lo permiten", + "better-video-compression-and-quality-at-the-cost-of-increased-cpu-encoding-load": "Mejor compresión y calidad del video pese al incremento de carga en la CPU", + "disable-digital-audio-effects-and-increase-audio-bitrate": "Deshabilitar los efectos de sonido digital e incrementar el bitrate audio", + "the-guest-will-not-have-a-choice-over-audio-options": "El invitado no tendrá opciones de audio a escoger", + "the-guest-will-only-be-able-to-select-their-webcam-as-an-option": "El invitado sólo podrá seleccionar su opción de cámara", + "hold-ctrl-and-the-mouse-wheel-to-zoom-in-and-out-remotely-of-compatible-video-streams": "Mantén CTRL y la rueda del ratón para hacer zoom en los videos", "encode-the-url-so-that-it-s-harder-for-a-guest-to-modify-the-settings-": "Encode the URL so that it's harder for a guest to modify the settings.", - "more-options": "More Options", + "add-a-password-to-make-the-stream-inaccessible-to-those-without-the-password": "Añade un password para evitar el acceso al video sin la clave", + "add-the-guest-to-a-group-chat-room-it-will-be-created-automatically-if-needed-": "Añade al invitado a una sala de chat grupal; se creará automáticamente en caso necesario.", + "customize-the-room-settings-for-this-guest": "Customizar la configuración de sala para este invitado", + "more-options": "Más Opciones", + "hold-ctrl-or-cmd-to-select-multiple-files": "Mantener CTRL (o CMD) para seleccionar varios ficheros", + "enter-an-https-url": "Introduce una URL HTTPS", + "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.", - "remotely-change-the-volume-of-this-guest": "Remotely change the volume of this guest", - "mute-this-guest-everywhere": "Mute this guest everywhere", - "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*", - "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", + "force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.", "toggle-solo-voice-chat": "Toggle Solo Voice Chat", - "add-to-scene-2": "Add to Scene 2", + "add-this-video-to-any-remote-scene-1-": "Añadir este Video a '&scene=1' remoto", + "mute-this-guest-everywhere": "Mute this guest everywhere", + "add-this-video-to-any-remote-scene-2-": "Añadir este Video a '&scene=2' remoto", + "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", - "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.", + "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", - "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", + "start-recording-this-remote-stream-to-this-local-drive-experimental-": "Comenzar Grabación de este stream remoto en local. *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": "Deshabilitar Previsualización", + "low-quality-preview": "Previo Baja Calidad", + "high-quality-preview": "Previo Alta Calidad", + "set-to-audio-channel-1": "Activar Canal Audio 1", + "set-to-audio-channel-2": "Activar Canal Audio 2", + "set-to-audio-channel-3": "Activar Canal Audio 3", + "set-to-audio-channel-4": "Activar Canal Audio 4", + "set-to-audio-channel-5": "Activar Canal Audio 5", + "set-to-audio-channel-6": "Activar Canal Audio 6", + "remote-audio-settings": "Configuración Audio Remoto", + "advanced-video-settings": "Configuración Video Avanzada", + "add-to-scene-2": "Añadir a Escena 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", "show-mini-preview": "Show Mini preview", "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", - "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" + "show-labels": "Mostrar Rótulos", + "transfer-to-a-new-room": "Transferir a nueva Sala", + "enable-custom-password": "Activar password personalizado" }, "innerHTML": { - "logo-header": "OBS.Ninja ", - "copy-this-url": "Copia esta URL a una fuente \"Navegador\" de OBS", - "you-are-in-the-control-center": "Estás en la sala de centro de control", + "copy-this-url": "Copia esta URL como fuente \"Navegador\" de OBS", + "you-are-in-the-control-center": "Estás en la sala del panel de control", "joining-room": "Estás entrado en la sala", "add-group-chat": "Agregar grupo de chat a OBS", "rooms-allow-for": "Las salas permiten un chat grupal simplificado y la administración avanzada de múltiples transmisiones a la vez.", "room-name": "Nombre de sala", "password-input-field": "Password", - "enter-the-rooms-control": "Entrar a la sala de centro de control", - "show-tips": "Muéstrame algunos consejos..", - "added-notes": "\n\t\t\t\tNotas adicionales:\n\t\t\t\t
  • Cualquiera puede entrar en una sala si conoce el nombre, así que mantenlo único
  • \n\t\t\t\t
  • Tener más de cuatro (4) personas en una sala no es recomendable debido a razones de rendimiento, pero depende de tu hardware.
  • \n\t\t\t\t
  • Los dispositivos iOS están limitados a tamaños de grupo de no más de dos (2) personas. Esto es una limitación de hardware.
  • \n\t\t\t\t
  • La opción de \"Grabación\" es nueva y se considera experimental.
  • \n\t\t\t\t
  • Tienes que \"Añadir\" una señal de video a la \"Escena de grupo\" para que aparezca allí.
  • \n\t\t\t\t
  • Hay un botón nuevo añadido \"Pantalla completa mejorada\" a la vista de invitados.
  • \n\t\t\t\t", + "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": "Entrar al panel de control", + "show-tips": "Muéstrame algunos consejos.", + "added-notes": "\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tConsejos Importantes:

    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
  • Deshabilitar el video compartido entre invitados mejora el rendimiento
  • \n\t\t\t\t\t\t\t\t
  • Invite only guests to the room that you trust.
  • \n\t\t\t\t\t\t\t\t
  • La opción \"Recording\" se considera experimental.
  • ", "back": "Atrás", "add-your-camera": "Agregar tu camara a OBS", "ask-for-permissions": "Allow Access to Camera/Microphone", @@ -157,149 +145,131 @@ "smooth-cool": "Fluido", "select-audio-source": "Seleccionar fuentes de audio", "no-audio": "Sin Audio", - "select-output-source": " Destino de la salida de audio: \n\t\t\t\t\t", - "remote-screenshare-obs": "Compartir pantalla remota en OBS", - "note-share-audio": "\n\t\t\t\t\tNota: No te olvides de hacer clic \"Compartir audio\" en Chrome.
    (Firefox no soporta compartir audio.)", + "select-output-source": " Destino de la salida de audio: ", + "select-digital-effect": " Efectos Video Digital: ", + "no-effects-applied": "Sin efectos aplicados", + "blurred-background": "Fondo Difuminado", + "digital-greenscreen": "Pantalla Verde Digital", + "virtual-background": "Fondo Virtual", + "add-a-password": " Añadir un Password:", + "use-chrome-instead": "Recomendamos utilizar un navegador basado en Chromium.
    \n \t\t\t\t\t\tSafari puede sufrir problemas de audio", + "remote-screenshare-obs": "Compartir pantalla", "select-screen-to-share": "SELECCIONAR PANTALLA PARA COMPARTIR", "audio-sources": "Fuentes de Audio", "create-reusable-invite": "Crear una invitación reutilizable", - "here-you-can-pre-generate": "Aquí puedes pregenerar un enlace reutilizable para la fuente de navegador y un enlace para invitados.", + "here-you-can-pre-generate": "Aquí puedes generar un enlace reutilizable como fuente del navegador e invitados.", "generate-invite-link": "GENERAR EL LINK DE INVITACIÓN", "advanced-paramaters": "Parámetros Avanzados", "unlock-video-bitrate": "Desbloquear Video Bitrate (20mbps)", "force-vp9-video-codec": "Forzar VP9 Video Codec (menos artefactos)", - "enable-stereo-and-pro": "Habilitar Estéreo y Pro HD Audio", + "enable-stereo-and-pro": "Habilitar Estéreo y Pro Audio HD", "video-resolution": "Resolución de vídeo: ", "hide-mic-selection": "Force Default Microphone", "hide-screen-share": "Ocultar opción compartir pantalla", "allow-remote-control": "Control remoto del zoom de la cámara (android)", - "add-a-password-to-stream": " Añadir un password:", - "add-the-guest-to-a-room": " Añadir al invitado a una sala:", - "invite-group-chat-type": "Este invitado a la sala puede:", + "obfuscate_url": "Obfuscar la URL Invitación", + "add-a-password-to-stream": " Añadir password:", + "add-the-guest-to-a-room": " Añadir invitado a una sala:", + "invite-group-chat-type": "Este invitado de la sala puede:", "can-see-and-hear": "Puede ver y oir el chat de grupo", "can-hear-only": "Sólo puede oir el chat de grupo", - "cant-see-or-hear": "No puede ni oir ni ver el chat de grupo", - "share-local-video-file": "Stream Media File", - "share-website-iframe": "Share Website", + "cant-see-or-hear": "No puede oir ni ver el chat de grupo", + "share-local-video-file": "Stream Fichero Multimedia", + "select-the-video-files-to-share": "SELECCIONA EL FICHERO DE VIDEO A COMPARTIR", + "share-website-iframe": "Comparte Sitio Web", + "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

    Qué es OBS.Ninja


    \n\t\t\t\t\t\t
  • 100% gratis; sin descargas; sin recopilación de datos personales; sin registros
  • \n\t\t\t\t\t\t
  • Lleva video desde tu móbil, portátil, ordenador de sobremesa, o de tus amigos directamente a tu stream en OBS
  • \n\t\t\t\t\t\t
  • Utilizamos tecnología innovadora Peer-to-Peer que ofrece privacidad y ultra baja latencia
  • \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t
  • Youtube video Demo aquí
  • \n\t\t\t\t\t\t", - "add-to-scene": "Add to Scene", - "forward-to-room": "Transfer", - "record": "Grabar", - "disconnect-guest": "Hangup", - "mute": "Silenciar", + "info-blob": "", + "hide-the-links": " ENLACES (INVITACIONES & ESCENAS)", + "click-for-quick-room-overview": "\n\t\t\t\t\t\t Pulsar aquí para un resumen rápido y ayuda\n\t\t\t\t\t", + "click-here-for-help": "Pulsar aquí para un resumen rápido y ayuda", + "welcome-to-control-room": "\n\t\t\t\t\t\tBienvenido. Esta es la sala de control del director para el grupo de chat.

    \n\t\t\t\t\t\tPuedes organizar un grupo de chat con amigos utilizando una sala. Comparte el enlace azul con los invitados para que puedan entrar directamente al chat.\n\t\t\t\t\t\t

    \n\t\t\t\t\t\tLimitaciones conocidas de las Salas:
    \n\t\t\t\t\t\t
  • Una sala grupal puede gestionar hasta unos 30 invitados, dependiendo de varios factores, incluyendo CPU y ancho de banda disponible en todos los invitados en la sala.
  • \n\t\t\t\t\t\t\n\t\t\t\t\t\t
  • El Video aparece en baja calidad a propósito en los invitados y director; esto es para reducir los recursos de ancho de banda y CPU.", + "invite-users-to-join": "Los Invitados pueden utilizar el enlace para unirse sala grupal", + "guests-hear-others": "Invitados escuchan a otros", + "capture-a-group-scene": "CAPTURA UNA ESCENA DE GRUPO", + "this-is-obs-browser-source-link": "Utilizar en OBS u otro software para capturar la mezcla de video grupal", + "auto-add-guests": "Auto añadir invitados", + "pro-audio-mode": "Modo Pro-audio", + "hide-audio-only-sources": "Ocultar fuentes de sólo audio", + "ask-for-display-name": "Preguntar nombre a mostrar", + "show-display-names": "Mostrar nombres", + "show-active-speaker": "Mostrar orador activo", + "auto-select-microphone": "Auto-selección micro por defecto", + "auto-select-camera": "Auto-selección cámara por defecto", + "hide-setting-buttons": "Ocultar botón configuración", + "mini-self-preview": "Mini visor propio", + "virtual-backgrounds": "Fondo virtual", + "powerful-computers-only": "¡Sólo utilizar con PC potente y grupo pequeño!", + "guests-see-HD-video": "Invitados ven video HD", + "no-self-preview": "Desactivar visualización propia", + "raise-hand-button": "Mostrar botón de 'Levantar-mano'", + "enable-compressor": "Activar compresor de audio", + "enable-equalizer": "Activar ecualizador como opción", + "low-cpu=broadcast-codec": "Codec emisión de bajo consumo CPU", + "only-see-director-feed": "Sólo ver la fuente del director", + "mute-microphone-by-default": "Mute del micro por defecto", + "guest-joins-with-no-camera": "Invitados entran sin cámara", + "unmute-by-director-only": "Quitar mute sólo director", + "obfuscate-link": "Ofuscar enlace y parámetros", + "this-can-reduce-packet-loss": "Esto puede reducir la corrupción de video causada por pérdida de paquetes", + "use-h264-codec": "Usar codec H264", + "show-active-speakers": "Mostar orador activo", + "force-mono-audio": "Forzar audio mono", + "learn-more-about-params": "Aprende sobre los parámetros URL en ", + "more-than-four-can-join": "Estos espacios para invitados son sólo un ejemplo. Pueden unirse más de cuatro invitados.", + "forward-to-room": "Enviar", + "send-direct-chat": " Mensaje", + "disconnect-guest": "Colgar", + "voice-chat": " Hablar Solo", + "add-to-scene": "añadir a escena 1", + "mute-guest": "mute invitado", + "More-scene-options": "Más opciones de escena", + "mute-scene": "mute en escena", + "force-keyframe": "Reparar Arcoiris", + "stats-remote": " Valores Escena", + "additional-controls": "Controles Adicionales", + "solo-video": "Resaltar invitado", + "hide-guest": "ocultar invitado", + "toggle-remote-speaker": "Mutear Invitado", + "toggle-remote-display": "Cegar Invitado", + "order-down": "", + "order-up": "", + "change-url": "Cambiar URL", + "change-params": "Param. URL", + "record-local": " Grabación Local", + "record-remote": " Grabación Remota", "change-to-low-quality": "  ", "change-to-medium-quality": "  ", "change-to-high-quality": "  ", - "send-direct-chat": " Message", - "advanced-camera-settings": " Advanced", - "voice-chat": " Voice Chat", + "advanced-audio-settings": " Configuración Audio", + "advanced-camera-settings": " Configuración Video", + "select-local-image": "Selecciona una Imagen local", + "close-settings": "Cerrar Configuración", + "advanced": "Avanzado ", "open-in-new-tab": "Abrir en una pestaña nueva", "copy-to-clipboard": "Copia al portapapeles", - "click-for-quick-room-overview": "❔ Haz clic aquí para obtener información general rápida y ayuda", - "push-to-talk-enable": "🔊 Habilitar pulsar para hablar en el modo director", - "welcome-to-control-room": "Bienvenidos. Esta es la sala de control para el chat grupal. Hay diferentes cosas para las que puedes usar esta habitación:

    \t
  • Puedes organizar un chat grupal con amigos usando una sala. Comparte el enlace azul para invitar a los que se unirán al chat automáticamente.
  • \t
  • Una sala de grupo puede manejar de 4 a 30 invitados, dependiendo de numerosos factores, incluida la CPU y el ancho de banda disponible de todos los invitados en la sala.
  • \t
  • Las vistas individuales de cada vídeo se ofrecen según los videos se van cargando. Estos se pueden usar dentro de una fuente de navegador de OBS.
  • \t
  • Puedes usar la escena de grupo de mezcla automática, el enlace verde, para organizar automáticamente varios videos en OBS.
  • \t
  • Puedes usar esta sala de control para grabar transmisiones de vídeo o audio aisladas, pero es una característica experimental.
  • \t
  • Los videos en la sala del Director serán de baja calidad; para ahorrar ancho de banda/CPU
  • \t
  • Los invitados en la sala verán los videos de los demás con una calidad muy limitada para ahorrar ancho de banda/CPU.
  • \t
  • OBS verá el video de un invitado en alta calidad; la bitrate predeterminado es 2500 kbps.
  • \t
    \tA medida que los invitados se unen, sus videos aparecerán a continuación. Puedes llevar sus transmisiones de vídeo a OBS como escenas individuales o puedes agregarlas a la escena de grupo.\t
    La escena de grupo mezcla automáticamente los videos que se han agregado a la escena. Ten en cuenta que el Auto-Mixer requiere que los invitados se agreguen manualmente para que aparezcan en él; no se agregan automáticamente.

    Los dispositivos móviles de Apple, como iPhones y iPads, no son totalmente compatibles con el videochat de grupo. Esta es una restricción de hardware.

    \tPara opciones y parámetros avanzados, ver la Wiki.", - "more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.", - "welcome-to-obs-ninja-chat": "\n\t\t\t\t\tBienvenido a OBS.Ninja! Puedes enviar mensajes de texto directamente a compañeros conectados desde aquí.\n\t\t\t\t", - "names-and-labels-coming-soon": "\n\t\t\t\t\tNombres identificando a los compañeros conectados serán una nueva característica en una próxima versión.\n\t\t\t\t", "send-chat": "Enviar", - "available-languages": "Idiomas disponibles:", - "add-more-here": "¡Añade más aquí!", - "waiting-for-camera-to-load": "waiting-for-camera-to-load", - "start": "START", - "share-your-mic": "Share your microphone", - "share-your-camera": "Share your Camera", - "share-your-screen": "Share your Screen", - "join-room-with-mic": "Join room with Microphone", - "share-screen-with-room": "Share-screen with Room", - "join-room-with-camera": "Join room with Camera", - "click-start-to-join": "Click Start to Join", - "guests-only-see-director": "Guests can only see the Director's Video", - "default-codec-select": "Preferred Video Codec: ", - "obfuscate_url": "Obfuscate the Invite URL", - "hide-the-links": " LINKS (GUEST INVITES & SCENES)", - "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", - "mute-scene": "mute in scene", - "mute-guest": "mute guest", - "record-local": " Record Local", - "record-remote": " Record Remote", - "order-down": "", - "order-up": "", - "advanced-audio-settings": " Audio Settings", - "scenes-can-see-director": "Director will also be a performer", - "select-digital-effect": " Digital Video Effects: ", - "add-a-password": " Add a Password:", - "hide-guest": "hide guest", - "toggle-remote-speaker": "Deafen Guest", - "toggle-remote-display": "Blind Guest", - "force-keyframe": "Rainbow Puke", - "change-url": "Change URL", - "change-params": "URL Params", - "solo-video": "Highlight guest", - "stats-remote": " Scene Stats", - "apply-new-guest-settings": "Apply settings", - "cancel": "Cancel", - "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.
    \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" + "apply-new-guest-settings": "Aplicar configuración", + "cancel": "Cancelar", + "invisible-guests": "No Visible", + "available-languages": "Idiomas Disponibles:", + "add-more-here": "¡Añade más Aquí!", + "add-to-calendar": "Añadir detalles a tu Calendario:", + "add-to-google-calendar": "Añadir a Calendario Google", + "add-to-outlook-calendar": "Añadir a Calendario Outlook", + "add-to-yahoo-calendar": "Añadir a Calendario Yahoo" }, "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", - "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" + "join-by-room-name-here": "Unirse por Nombre de Sala aquí", + "enter-a-room-name-here": "Introduce un Nombre de Sala aquí", + "optional-room-password-here": "Password de sala opcional aquí", + "give-this-media-source-a-name-optional-": "Dar a la fuente de nedios un nombre (opcional)", + "add-an-optional-password": "Añadir una password opcional", + "enter-room-name-here": "Introduce el nombre de Sala aquí", + "enter-chat-message-to-send-here": "Introduce el mensaje de chat a enviar aquí", + "optional": "opcional", + "enter-the-room-name-here": "Introduce el nombre de Sala aquí", + "enter-the-room-password-here": "Introduce el password de la Sala aquí" } } \ No newline at end of file