mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-11 05:38:31 +00:00
bug fix for capped mobile bandwidth + &optimize=0 failing
This commit is contained in:
parent
87dc9e98a7
commit
60822c80a8
17
index.html
17
index.html
@ -57,7 +57,7 @@
|
||||
<meta property="twitter:image" content="./media/vdoNinja_logo_full.png" />
|
||||
<meta name="msapplication-TileColor" content="#da532c" />
|
||||
<meta name="theme-color" content="#ffffff" />
|
||||
<link rel="stylesheet" href="./main.css?ver=238" />
|
||||
<link rel="stylesheet" href="./main.css?ver=239" />
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.js"></script>
|
||||
<style id="lightbox-animations" type="text/css"></style>
|
||||
<!-- <link rel="manifest" href="manifest.json" /> -->
|
||||
@ -83,7 +83,7 @@
|
||||
</span>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=45"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=552"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=554"></script>
|
||||
<input id="zoomSlider" type="range" style="display: none;" />
|
||||
<span id="electronDragZone" style="pointer-events: none; z-index:-10; position:absolute;top:0;left:0;width:100%;height:2%;-webkit-app-region: drag;min-height:20px;"></span>
|
||||
<div id="header">
|
||||
@ -386,7 +386,7 @@
|
||||
</span>
|
||||
<div id="consentWarning" class="startupWarning hidden">
|
||||
<i class="las la-exclamation-circle"></i>
|
||||
<p><span data-translate="privacy-disabled">Privacy warning: The director will be able to remotely change your camera and microphone.</span></p>
|
||||
<p><span data-translate="privacy-disabled">Privacy warning: The director will be able to remotely change your camera, microphone, and URL.</span></p>
|
||||
</div>
|
||||
<div id="guestTips" style="display:none">
|
||||
<p data-translate="for-the-best-possible-experience-make-sure">For the best possible experience, make sure</p>
|
||||
@ -575,7 +575,7 @@
|
||||
</center>
|
||||
<div id="consentWarning2" class="startupWarning hidden">
|
||||
<i class="las la-exclamation-circle"></i>
|
||||
<p><span data-translate="privacy-disabled">Privacy warning: The director will be able to remotely change which camera and microphone is being used while this page is open, if you continue.</span></p>
|
||||
<p><span data-translate="privacy-disabled">Privacy warning: The director will be able to remotely change your camera, microphone, and URL while this page is open, if you continue.</span></p>
|
||||
</div>
|
||||
<div id="audioScreenShare1">
|
||||
<i class="las la-microphone-alt"></i>
|
||||
@ -1831,7 +1831,8 @@
|
||||
<button class='hidden drawActive' onclick="drawOnScreenObject.color(this);" data-color='black' style="background-color:black; margin: 0 0 0 4px; border-radius: 5px; padding: 3px 3px;">✏️</button>
|
||||
<button class='hidden drawActive' onclick="drawOnScreenObject.color(this);" data-color='white' style="background-color:white; margin: 0 0 0 4px; border-radius: 5px; padding: 3px 3px;">🎨</button>
|
||||
<br /><br />
|
||||
<button onclick="cycleStyleOptions();" id='toggleWaveformButton' title="Audio-only sources can be stylized in different ways" style="margin: 0 0 0 4px; border-radius: 5px; padding: 3px 3px;">Cycle between several audio-visualizations styles</button>
|
||||
<button class="generalButton" onclick="cycleStyleOptions();" id='toggleWaveformButton' title="Audio-only sources can be stylized in different ways">Cycle between several audio-visualizations styles</button>
|
||||
<button class="generalButton" onclick="clearStorage();" title="Clear site's local storage and settings">Clear site's local browser storage and saved settings</button>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -2256,7 +2257,7 @@
|
||||
|
||||
|
||||
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
|
||||
session.version = "22.9"; // nov 18th
|
||||
session.version = "22.10"; // nov 18th
|
||||
session.streamID = session.generateStreamID(); // randomly generates a streamID for this session. You can set your own programmatically if needed
|
||||
|
||||
session.defaultPassword = "someEncryptionKey123"; // Change this password if self-deploying for added security/privacy
|
||||
@ -2328,11 +2329,11 @@
|
||||
// session.defaultBackgroundImages = ["./media/bg_sample1.webp", "./media/bg_sample2.webp"]; // for &effects=5 (virtual backgrounds)
|
||||
// session.hidehome = true; // If used, 'hide home' will make the landing page inaccessible, along with hiding a few go-home elements.
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=587"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=595"></script>
|
||||
<!--
|
||||
// If you wish to change branding, blank offers a good clean start.
|
||||
<script type="text/javascript" id="main-js" src="./main.js" data-translation="blank"></script>
|
||||
-->
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=504"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=510"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
90
lib.js
90
lib.js
@ -57,7 +57,7 @@ var miscTranslations = {
|
||||
"transfer" : "transfer",
|
||||
"armed" : "armed",
|
||||
"transfer-guest-to-room" : "Transfer guests to room:\n\n(Please note: rooms must share the same password)",
|
||||
"transfer-guest-to-url" :"Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"transfer-guest-to-url" :"Transfer guests to new website URL.\n\nGuests will be prompted to accept unless they are using &consent",
|
||||
"change-url" : "change URL",
|
||||
"mute-in-scene" : "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
@ -1780,6 +1780,7 @@ function applySceneState(){ // guest side; tally light, etc.
|
||||
getById("obsState").classList.remove("recording");
|
||||
getById("obsState").classList.remove("ondeck");
|
||||
getById("obsState").innerHTML = "INACTIVE";
|
||||
getById("obsState").classList.add("hidden"); // I don't think most people care to see inactive.
|
||||
}
|
||||
|
||||
if (visibility){ // BASIC TALLY LIGHT (on deck disabled)
|
||||
@ -2124,6 +2125,13 @@ function removeStorage(cname){
|
||||
localStorage.removeItem(cname);
|
||||
}
|
||||
|
||||
function clearStorage(){
|
||||
localStorage.clear();
|
||||
if (!session.cleanOutput){
|
||||
warnUser("The local storage and saved settings have been cleared", 1000);
|
||||
}
|
||||
}
|
||||
|
||||
function setStorage(cname, cvalue, hours=9999){ // not actually a cookie
|
||||
var now = new Date();
|
||||
var item = {
|
||||
@ -2303,6 +2311,11 @@ function setupIncomingScreenTracking(v, UUID){ // SCREEN element.
|
||||
}
|
||||
|
||||
v.onpause = (event) => { // prevent things from pausing; human or other
|
||||
|
||||
if (v.dataset.UUID && session.rpcs[v.dataset.UUID] && (session.rpcs[v.dataset.UUID].manualBandwidth === 0)){
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!((event.ctrlKey) || (event.metaKey) )){
|
||||
warnlog("Video paused; force it to play again");
|
||||
//return;
|
||||
@ -2638,6 +2651,10 @@ function setupIncomingVideoTracking(v, UUID){ // video element.
|
||||
}
|
||||
|
||||
v.onpause = (event) => { // prevent things from pausing; human or other
|
||||
|
||||
if (v.dataset.UUID && session.rpcs[v.dataset.UUID] && (session.rpcs[v.dataset.UUID].manualBandwidth === 0)){
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!CtrlPressed){
|
||||
warnlog("Video paused; force it to play again");
|
||||
@ -3885,9 +3902,11 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var sssid = false;
|
||||
var sscount = 0;
|
||||
var mpl = session.slots || mediaPool.length;
|
||||
|
||||
var playarea = getById("gridlayout");
|
||||
var skip = false;
|
||||
|
||||
@ -3899,6 +3918,22 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
mediaPool.sort(compare_vids);
|
||||
}
|
||||
|
||||
|
||||
if (session.fakeFeeds && session.fakeFeeds.length && (mediaPool.length < session.fakeFeeds.length)){
|
||||
|
||||
for (let i=0;i<session.fakeFeeds.length;i++){
|
||||
if (mediaPool.length < session.fakeFeeds.length){
|
||||
mediaPool.push(session.fakeFeeds[i]);
|
||||
} else {
|
||||
try{
|
||||
session.fakeFeeds[i].remove();
|
||||
} catch(e){errorlog(e)}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var mpl = session.slots || mediaPool.length;
|
||||
|
||||
if (mpl>1){
|
||||
var BB = 0;
|
||||
var rw = 1;
|
||||
@ -4136,6 +4171,7 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
togglePreview.style.top = "calc("+hi+"px + 2vh)";
|
||||
togglePreview.style.maxHeight = parseInt(getById("gridlayout").offsetHeight)+"px";
|
||||
} catch(e){
|
||||
errorlog(e);
|
||||
container.style.top = hi+"px";
|
||||
togglePreview.style.top = hi+"px";
|
||||
}
|
||||
@ -4960,6 +4996,7 @@ function updateMixerRun(e=false){ // this is the main auto-mixing code. It's a
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
errorlog(e);
|
||||
var bigPlayButton = document.getElementById("bigPlayButton");
|
||||
if (bigPlayButton){
|
||||
bigPlayButton.parentNode.removeChild(bigPlayButton);
|
||||
@ -13831,13 +13868,13 @@ function joinRoom(roomname) {
|
||||
}
|
||||
}
|
||||
|
||||
function createRoom(roomname = false) {
|
||||
async function createRoom(roomname = false) {
|
||||
|
||||
if (roomname == false) {
|
||||
roomname = getById("videoname1").value;
|
||||
roomname = sanitizeRoomName(roomname);
|
||||
|
||||
clearDirectorSettings();
|
||||
clearDirectorSettings();
|
||||
|
||||
if (roomname.length != 0) {
|
||||
if (urlParams.has('dir')){
|
||||
@ -13886,12 +13923,12 @@ function createRoom(roomname = false) {
|
||||
|
||||
if ((session.defaultPassword === false) && (session.password)) {
|
||||
passAdd2 = "&password=" + session.password;
|
||||
return generateHash(session.password + session.salt, 4).then(function(hash) {
|
||||
return generateHash(session.password + session.salt, 4).then(async function(hash) {
|
||||
passAdd = "&hash=" + hash;
|
||||
createRoomCallback(passAdd, passAdd2);
|
||||
await createRoomCallback(passAdd, passAdd2);
|
||||
}).catch(errorlog);
|
||||
} else {
|
||||
createRoomCallback(passAdd, passAdd2);
|
||||
await createRoomCallback(passAdd, passAdd2);
|
||||
}
|
||||
|
||||
pokeIframeAPI("create-room", roomname);
|
||||
@ -13979,7 +14016,7 @@ async function toggleCoDirector(ele){
|
||||
|
||||
getById("codirectorSettings").style.display = "block";
|
||||
}
|
||||
function createRoomCallback(passAdd, passAdd2) {
|
||||
async function createRoomCallback(passAdd, passAdd2) {
|
||||
|
||||
if (!session.switchMode){
|
||||
getById("directorlayout").classList.remove("hidden");
|
||||
@ -14136,7 +14173,6 @@ function createRoomCallback(passAdd, passAdd2) {
|
||||
}, 200);};
|
||||
getById("reshare").parentNode.removeChild(getById("reshare"));
|
||||
|
||||
|
||||
//getById("mutespeakerbutton").style.display = null;
|
||||
if (session.speakerMuted_default===false){
|
||||
//session.speakerMuted = false; // the director will start with audio playback muted.
|
||||
@ -14252,6 +14288,14 @@ function createRoomCallback(passAdd, passAdd2) {
|
||||
|
||||
joinRoom(session.roomid);
|
||||
|
||||
try {
|
||||
if (!gotDevices2AlreadyRan){
|
||||
await enumerateDevices().then(gotDevices2); // this is needed for iOS; was previous set to timeout at 100ms, but would be useful everywhere I think
|
||||
}
|
||||
}catch(e){
|
||||
errorlog(e);
|
||||
}
|
||||
|
||||
if (session.autostart){
|
||||
setTimeout(function(){press2talk(true);},400);
|
||||
} else {
|
||||
@ -16291,6 +16335,7 @@ function gotDevices2(deviceInfos) {
|
||||
option.selected = "true";
|
||||
} else if (!session.sink && SelectedAudioOutputDevices && (SelectedAudioOutputDevices == option.value)){
|
||||
option.selected = "true";
|
||||
session.sink = option.value; // added 8-dec-22, as the director's saved mic wasn't applying otherwise.
|
||||
}
|
||||
option.text = deviceInfo.label || `Speaker ${audioOutputSelect.length + 1}`;
|
||||
audioOutputSelect.appendChild(option);
|
||||
@ -20068,6 +20113,7 @@ async function press2talk(clean = false) {
|
||||
session.videoElement.title = "This is the preview of the Director's audio and video output.";
|
||||
|
||||
session.videoElement.onpause = (event) => { // prevent things from pausing; human or other
|
||||
|
||||
if (!((event.ctrlKey) || (event.metaKey) )){
|
||||
log("Video paused; auto playing");
|
||||
event.currentTarget.play().then(_ => {
|
||||
@ -26188,12 +26234,17 @@ function updateLink(arg, input, solo=false) {
|
||||
|
||||
function changeURL(changeURL){
|
||||
window.focus();
|
||||
confirmAlt(miscTranslations["director-redirect-1"]+changeURL+miscTranslations["director-redirect-2"]).then(res=>{
|
||||
if (res){
|
||||
hangup();
|
||||
window.location.href = changeURL;
|
||||
};
|
||||
});
|
||||
if (session.consent){
|
||||
hangup();
|
||||
window.location.href = changeURL;
|
||||
} else {
|
||||
confirmAlt(miscTranslations["director-redirect-1"]+changeURL+miscTranslations["director-redirect-2"]).then(res=>{
|
||||
if (res){
|
||||
hangup();
|
||||
window.location.href = changeURL;
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function updateLinkInverse(arg, input) {
|
||||
@ -26513,6 +26564,11 @@ function unPauseVideo(videoEle, update=true){
|
||||
else if (!("prePausedBandwidth" in session.rpcs[videoEle.dataset.UUID])){return;} // not paused; useless to have, but might as well
|
||||
session.rpcs[videoEle.dataset.UUID].manualBandwidth = false;
|
||||
//session.rpcs[videoEle.dataset.UUID].manualAudioBandwidth = false;
|
||||
|
||||
if (session.rpcs[videoEle.dataset.UUID].videoElement){
|
||||
session.rpcs[videoEle.dataset.UUID].videoElement.play();
|
||||
}
|
||||
|
||||
delete(session.rpcs[videoEle.dataset.UUID].prePausedBandwidth);
|
||||
session.requestRateLimit(false, videoEle.dataset.UUID, false); // passing a bitrate of false forces the saved existing bitrate to be requested.
|
||||
videoEle.classList.remove("paused");
|
||||
@ -26528,6 +26584,10 @@ function pauseVideo(videoEle, update=true){
|
||||
else if (!(videoEle.dataset.UUID in session.rpcs)){return;}
|
||||
session.rpcs[videoEle.dataset.UUID].prePausedBandwidth = session.rpcs[videoEle.dataset.UUID].manualBandwidth; // useless, but whatever
|
||||
session.rpcs[videoEle.dataset.UUID].manualBandwidth = 0;
|
||||
|
||||
if (session.rpcs[videoEle.dataset.UUID].videoElement){
|
||||
session.rpcs[videoEle.dataset.UUID].videoElement.pause();
|
||||
}
|
||||
//session.rpcs[videoEle.dataset.UUID].manualAudioBandwidth = 0;
|
||||
session.requestRateLimit(false, videoEle.dataset.UUID, true); // passing a bitrate of false forces the saved existing bitrate to be requested.
|
||||
videoEle.classList.add("paused");
|
||||
|
||||
5
main.css
5
main.css
@ -1824,6 +1824,11 @@ h2 {
|
||||
label {
|
||||
color: #000;
|
||||
}
|
||||
.generalButton{
|
||||
border-radius: 3px;
|
||||
padding: 5px;
|
||||
margin: 0 0 10px 0;
|
||||
}
|
||||
|
||||
.inner:before,
|
||||
.inner:after {
|
||||
|
||||
91
main.js
91
main.js
@ -1012,7 +1012,6 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.autostart = true;
|
||||
}
|
||||
|
||||
|
||||
if (urlParams.has('datamode') || urlParams.has('dataonly')) { // this disables all media in/out.
|
||||
session.dataMode = true;
|
||||
}
|
||||
@ -1683,6 +1682,24 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('fakeguests') || urlParams.has('fakefeeds')) {
|
||||
var total = parseInt(urlParams.get('fakeguests')) || parseInt(urlParams.get('fakefeeds')) || 4;
|
||||
session.fakeFeeds = [];
|
||||
log("Creating "+total+" fake feeds");
|
||||
for (var i=0;i<total;i++){
|
||||
let fakeElement = document.createElement("video");
|
||||
fakeElement.autoplay = true;
|
||||
fakeElement.loop = true;
|
||||
fakeElement.muted = true;
|
||||
fakeElement.src = "./media/fakesteve.webm";
|
||||
fakeElement.id = parseInt(Math.random() * 10000000000);
|
||||
session.fakeFeeds.push(fakeElement);
|
||||
}
|
||||
if (session.view!==false){
|
||||
setTimeout(function(){updateMixer();},1000);
|
||||
}
|
||||
}
|
||||
|
||||
if (urlParams.has('directoronly') || urlParams.has('directorsonly') || urlParams.has('do')){
|
||||
session.viewDirectorOnly = true;
|
||||
}
|
||||
@ -2559,6 +2576,10 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('mixminus')){
|
||||
session.mixMinus = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('clearstorage') || urlParams.has('clear')){
|
||||
clearStorage();
|
||||
}
|
||||
|
||||
if (urlParams.has('videobitrate') || urlParams.has('bitrate') || urlParams.has('vb')) {
|
||||
session.bitrate = urlParams.get('videobitrate') || urlParams.get('bitrate') || urlParams.get('vb');
|
||||
@ -3809,7 +3830,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
}
|
||||
|
||||
createRoom(director_room_input);
|
||||
setTimeout(function(director_room_input){createRoom(director_room_input);},20, director_room_input);
|
||||
}
|
||||
if (session.chatbutton === true) {
|
||||
getById("chatbutton").classList.remove("hidden");
|
||||
@ -3919,39 +3940,41 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('waittimeout')){
|
||||
session.waitImageTimeout = parseInt(urlParams.get('waittimeout')) || 0;
|
||||
}
|
||||
session.waitImageTimeoutObject = setTimeout(function() {
|
||||
session.waitImageTimeoutObject = true;
|
||||
try {
|
||||
if ((session.view)) {
|
||||
if (document.getElementById("mainmenu")) {
|
||||
if (session.waitImage){
|
||||
getById("mainmenu").innerHTML += '<img id="retryimage"/>';
|
||||
getById("retryimage").src = decodeURIComponent(session.waitImage);
|
||||
getById("retryimage").onerror = function(){this.style.display='none';};
|
||||
|
||||
if (session.cover) {
|
||||
getById("retryimage").style.objectFit = "cover";
|
||||
}
|
||||
|
||||
} else if (!(session.cleanOutput)){
|
||||
getById("mainmenu").innerHTML += '<div class="retry-spinner" id="retrySpinner"></div>';
|
||||
getById("retrySpinner").onclick = function(){
|
||||
updateURL("cleanoutput");
|
||||
location.reload();
|
||||
if (!session.fakeFeeds){
|
||||
session.waitImageTimeoutObject = setTimeout(function() {
|
||||
session.waitImageTimeoutObject = true;
|
||||
try {
|
||||
if ((session.view)) {
|
||||
if (document.getElementById("mainmenu")) {
|
||||
if (session.waitImage){
|
||||
getById("mainmenu").innerHTML += '<img id="retryimage"/>';
|
||||
getById("retryimage").src = decodeURIComponent(session.waitImage);
|
||||
getById("retryimage").onerror = function(){this.style.display='none';};
|
||||
|
||||
if (session.cover) {
|
||||
getById("retryimage").style.objectFit = "cover";
|
||||
}
|
||||
|
||||
} else if (!(session.cleanOutput)){
|
||||
getById("mainmenu").innerHTML += '<div class="retry-spinner" id="retrySpinner"></div>';
|
||||
getById("retrySpinner").onclick = function(){
|
||||
updateURL("cleanoutput");
|
||||
location.reload();
|
||||
}
|
||||
getById("retrySpinner").title = miscTranslations["waiting-for-the-stream"]
|
||||
}
|
||||
if (urlParams.has('waitmessage')){
|
||||
getById("mainmenu").innerHTML += '<div id="retrymessage"></div>';
|
||||
getById("retrymessage").innerText = urlParams.get('waitmessage');
|
||||
getById("retrySpinner").title = urlParams.get('waitmessage');
|
||||
}
|
||||
getById("retrySpinner").title = miscTranslations["waiting-for-the-stream"]
|
||||
}
|
||||
if (urlParams.has('waitmessage')){
|
||||
getById("mainmenu").innerHTML += '<div id="retrymessage"></div>';
|
||||
getById("retrymessage").innerText = urlParams.get('waitmessage');
|
||||
getById("retrySpinner").title = urlParams.get('waitmessage');
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
errorlog(e);
|
||||
}
|
||||
} catch (e) {
|
||||
errorlog(e);
|
||||
}
|
||||
}, session.waitImageTimeout);
|
||||
}, session.waitImageTimeout);
|
||||
}
|
||||
|
||||
log("auto playing");
|
||||
if ((iPad || iOS) && navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1 && SafariVersion > 13) { // Modern iOS doesn't need pop up
|
||||
@ -4072,9 +4095,9 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('flagship')) {
|
||||
session.flagship = true;
|
||||
}
|
||||
if (!session.flagship && session.mobile && (session.limitTotalBitrate===false)){
|
||||
session.limitTotalBitrate = session.totalRoomBitrate_default; // 500, with the max per guest stream out at maxMobileBitrate (350kbps) or 35-kbps if more than X in the room.
|
||||
}
|
||||
//if (!session.flagship && session.mobile && (session.limitTotalBitrate===false)){
|
||||
// session.limitTotalBitrate = session.totalRoomBitrate_default; // 500, with the max per guest stream out at maxMobileBitrate (350kbps) or 35-kbps if more than X in the room.
|
||||
//}
|
||||
|
||||
if (urlParams.has('maxmobilebitrate')) {
|
||||
session.maxMobileBitrate = parseInt(urlParams.has('maxmobilebitrate')) || 0;
|
||||
|
||||
@ -222,7 +222,6 @@
|
||||
"joining-room": "You are in room",
|
||||
"push-to-talk-enable": " enable director`s microphone or video<br>(only guests can see this feed)",
|
||||
"hide-the-links": " LINKS (GUEST INVITES & SCENES)",
|
||||
"click-for-quick-room-overview": "\n<i class=\"las la-question-circle\"></i> <span data-translate=\"click-here-for-help\">Click Here for a quick overview and help</span>\n",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"welcome-to-control-room": "\n<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\nYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n<br><br>\nA group room can handle normally around 6 to 20 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room\n",
|
||||
"invite-users-to-join": "Guests can use the link to join the group room",
|
||||
@ -266,9 +265,9 @@
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"forward-to-room": "Transfer",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"send-direct-chat": "Message",
|
||||
"disconnect-guest": "Hangup",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Solo Talk",
|
||||
"voice-chat": " Solo Talk",
|
||||
"add-to-scene": "add to scene 1",
|
||||
"mute-guest": "mute guest",
|
||||
"More-scene-options": "More scene options",
|
||||
@ -281,24 +280,19 @@
|
||||
"hide-guest": "hide guest",
|
||||
"toggle-remote-speaker": "Deafen Guest",
|
||||
"toggle-remote-display": "Blind Guest",
|
||||
"order-down": "<i class=\"las la-minus\"></i>",
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"change-url": "Change URL",
|
||||
"change-params": "URL Params",
|
||||
"record-local": " Record Local",
|
||||
"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",
|
||||
"advanced-audio-settings": "Audio Settings",
|
||||
"advanced-camera-settings": "Video Settings",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "Max Resolution",
|
||||
@ -379,7 +373,7 @@
|
||||
"prefix-screenshare": "Prefix screenshare IDs",
|
||||
"more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.",
|
||||
"welcome-to-vdo-ninja-chat": "\nWelcome! You can send text messages directly to connected peers from here.\n",
|
||||
"privacy-disabled": "Privacy warning: The director will be able to remotely change which camera and microphone is being used while this page is open, if you continue.",
|
||||
"privacy-disabled": "Privacy warning: The director will be able to remotely change your camera, microphone, and URL while this page is open, if you continue.",
|
||||
"face-mesh": "Face mesh (slow load)",
|
||||
"anonymous-mask": "Anonymous mask",
|
||||
"dog-face": "Dog ears and nose",
|
||||
@ -498,7 +492,7 @@
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\nGuests will be prompted to accept unless they are using &consent",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
|
||||
@ -282,9 +282,9 @@
|
||||
"vertical-aspect-ratio": "竖屏视频模式",
|
||||
"learn-more-about-params": "了解有关 URL 参数的详细信息,请访问 ",
|
||||
"forward-to-room": "转移",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> 信息",
|
||||
"send-direct-chat": "信息",
|
||||
"disconnect-guest": "挂断",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> 单人发言",
|
||||
"voice-chat": " 单人发言",
|
||||
"add-to-scene": "添加到场景1",
|
||||
"mute-guest": "静音客人",
|
||||
"More-scene-options": "更多场景选项",
|
||||
@ -314,7 +314,7 @@
|
||||
"undeafen": "开启声音",
|
||||
"unblind": "开启视频",
|
||||
"close": "关闭",
|
||||
"send-message": "发送信息<s pan=\"\"> </s>",
|
||||
"send-message": "发送信息",
|
||||
"record-director-local": " 录制",
|
||||
"video-source": " 视频源 ",
|
||||
"max-resolution": "最大分辨率",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Chatovat",
|
||||
"send-direct-chat": "Chatovat",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Pokročilé",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"open-in-new-tab": "Otevřít v nové záložce",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"send-direct-chat": "Message",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Erweitert",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"open-in-new-tab": "In neuem Tab öffnen.",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -322,9 +322,9 @@
|
||||
"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",
|
||||
"send-direct-chat": "Message",
|
||||
"disconnect-guest": "Hangup",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Solo Talk",
|
||||
"voice-chat": " Solo Talk",
|
||||
"add-to-scene": "add to scene 1",
|
||||
"mute-guest": "mute guest",
|
||||
"More-scene-options": "More scene options",
|
||||
|
||||
@ -320,9 +320,9 @@
|
||||
"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": "Transferir",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Mensaje",
|
||||
"send-direct-chat": "Mensaje",
|
||||
"disconnect-guest": "Colgar",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Hablar solo",
|
||||
"voice-chat": " Hablar solo",
|
||||
"add-to-scene": "Añadir a escena 1",
|
||||
"mute-guest": "Silenciar invitado",
|
||||
"More-scene-options": "Más opciones de escena",
|
||||
@ -376,7 +376,7 @@
|
||||
"undeafen": "No ensordecer",
|
||||
"unblind": "Permitir ver video",
|
||||
"close": "Cerrar",
|
||||
"send-message": "enviar mensaje<s pan=\"\"> </s>",
|
||||
"send-message": "enviar mensaje",
|
||||
"record-director-local": " Grabar",
|
||||
"logo-header": "\n<font id=\"qos\">V</font>DO.Ninja \n",
|
||||
"only-director-can-hear-you": "Solo el direcctor puede escucharte actualmente.",
|
||||
|
||||
@ -320,9 +320,9 @@
|
||||
"learn-more-about-params": "URL parametroez gehiago ikasi hemen ",
|
||||
"more-than-four-can-join": "Lau gonbidatu hauen lekuak adibidea besterik ez dira. Lau gonbidatu baino gehiago batu daitezke.",
|
||||
"forward-to-room": "Bidali",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Mezua",
|
||||
"send-direct-chat": "Mezua",
|
||||
"disconnect-guest": "Eskegi",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Bakarrik hitz egin",
|
||||
"voice-chat": " Bakarrik hitz egin",
|
||||
"add-to-scene": "Gehitu 1.eszenara",
|
||||
"mute-guest": "Mututu gonbidatua",
|
||||
"More-scene-options": "Eszena aukera gehiago",
|
||||
@ -375,7 +375,7 @@
|
||||
"undeafen": "entzun",
|
||||
"unblind": "ikusarazi",
|
||||
"close": "itxi",
|
||||
"send-message": "bidali mezua<s pan=\"\"> </s>",
|
||||
"send-message": "bidali mezua",
|
||||
"record-director-local": " Grabazioa",
|
||||
"director-muted-you": "Zuzendariak isildu zaitu.",
|
||||
"mirror-video": "Ispilua",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"send-direct-chat": "Message",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Advanced",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"open-in-new-tab": "Ouvrir dans un nouvel onglet",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"send-direct-chat": "Message",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Advanced",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"open-in-new-tab": "Apri in una nuova Tab",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"send-direct-chat": "Message",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Advanced",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"open-in-new-tab": "新しいタブで開く",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Bericht",
|
||||
"send-direct-chat": "Bericht",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Geavanceerd",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Geluids Chat",
|
||||
"open-in-new-tab": "Open in nieuw tabblad",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Erehay ouyay ancay epray-enerategay",
|
||||
"send-direct-chat": "Erehay ouyay ancay epray-enerategay",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Erehay ouyay ancay epray-enerategay",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Erehay ouyay ancay epray-enerategay",
|
||||
"open-in-new-tab": "Openway inway ewnay Abtay",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -171,8 +171,8 @@
|
||||
"select-screen-to-share": "SELECIONAR A TELA PARA COMPARTILHAR",
|
||||
"select-the-video-files-to-share": "SELECIONE OS ARQUIVOS DE VÍDEO PARA COMPARTILHAR",
|
||||
"send-chat": "Enviar",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Mensagem",
|
||||
"send-message": "enviar mensagem<s pan=\"\"> </s>",
|
||||
"send-direct-chat": "Mensagem",
|
||||
"send-message": "enviar mensagem",
|
||||
"share-local-video-file": "Arquivo de mídia de transmissão",
|
||||
"share-screen-with-room": "Compartilhamento de tela com sala",
|
||||
"share-website-iframe": "Compartilhar site",
|
||||
@ -213,7 +213,7 @@
|
||||
"video-source": " Fonte de vídeo ",
|
||||
"virtual-background": "Plano de fundo virtual",
|
||||
"virtual-backgrounds": "Planos de fundo virtuais",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> Conversa individual",
|
||||
"voice-chat": " Conversa individual",
|
||||
"waiting-for-camera": "Aguardando o carregamento da câmera",
|
||||
"waiting-for-camera-to-load": "Aguardando a câmera carregar",
|
||||
"waiting-for-mic-to-load": "Aguardando o microfone carregar",
|
||||
|
||||
@ -279,7 +279,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Enviar mensagem",
|
||||
"send-direct-chat": "Enviar mensagem",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Avançadas",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Chat de voz",
|
||||
"open-in-new-tab": "Abrir num novo separador",
|
||||
@ -391,7 +391,7 @@
|
||||
"undeafen": "devolver som",
|
||||
"unblind": "devolver imagem",
|
||||
"close": "fechar",
|
||||
"send-message": "enviar mensagem<s pan=\"\"> </s>",
|
||||
"send-message": "enviar mensagem",
|
||||
"record-director-local": " Gravar",
|
||||
"only-director-can-hear-you": "Apenas o realizador o pode ouvir de momento.",
|
||||
"director-muted-you": "O realizador desativou o seu microfone.",
|
||||
|
||||
@ -303,9 +303,9 @@
|
||||
"vertical-aspect-ratio": "Портретный режим",
|
||||
"learn-more-about-params": "Узнать больше о возможных параметрах на ",
|
||||
"forward-to-room": "Перевести",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> личное сообщение",
|
||||
"send-direct-chat": "личное сообщение",
|
||||
"disconnect-guest": "Отключить",
|
||||
"voice-chat": "<i class=\"las la-microphone\" style=\"color:#090\"></i> разговор тет-а-тет",
|
||||
"voice-chat": " разговор тет-а-тет",
|
||||
"add-to-scene": "Добавить в 1 сцену",
|
||||
"mute-guest": "Выкл микрофоны гостям",
|
||||
"More-scene-options": "Больше настроек сцены",
|
||||
@ -335,7 +335,7 @@
|
||||
"unblind": "Вкл. видео на стороне гостя",
|
||||
"undeafen": "Вкл. звук на стороне гостя",
|
||||
"close": "Закрыть",
|
||||
"send-message": "Сообщение <s pan=\"\"> </s>",
|
||||
"send-message": "Сообщение ",
|
||||
"record-director-local": " Запись",
|
||||
"video-source": "Источник видео ",
|
||||
"max-resolution": "Лучшее качество",
|
||||
|
||||
@ -300,7 +300,7 @@
|
||||
"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>",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"send-direct-chat": "Message",
|
||||
"advanced-camera-settings": "<i class=\"las la-cog\"></i> Advanced",
|
||||
"voice-chat": "<i class=\"las la-microphone\"></i> Voice Chat",
|
||||
"open-in-new-tab": "Yeni Sekmede Aç",
|
||||
@ -412,7 +412,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
|
||||
@ -302,7 +302,7 @@
|
||||
"this-is-obs-browser-source-link": "Використовуйте OBS чи інший софт для захоплення групового чату",
|
||||
"more-than-four-can-join": "Це місця для гостей як приклад, їх може бути більше",
|
||||
"forward-to-room": "Трансфер",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Повідомлення",
|
||||
"send-direct-chat": "Повідомлення",
|
||||
"add-to-scene": "Add to Scene",
|
||||
"mute-scene": "не давати звук у сцені",
|
||||
"mute-guest": "відключити мікрофон",
|
||||
@ -383,7 +383,7 @@
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"send-message": "send message",
|
||||
"record-director-local": " Record",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user