mirror of
https://github.com/eliasstepanik/vdo.ninja.git
synced 2026-01-11 13:48:38 +00:00
Add files via upload
This commit is contained in:
parent
51fb3137a2
commit
ad4d5585b6
468
convert.html
468
convert.html
@ -1,235 +1,235 @@
|
||||
<head>
|
||||
<link rel="stylesheet" href="./main.css?ver=40" />
|
||||
<style>
|
||||
.container {
|
||||
max-width: 80%;
|
||||
width: fit-content;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.card {
|
||||
margin: 10px;
|
||||
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 10%);
|
||||
background-color: #ddd;
|
||||
color: black;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.card>div {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.card h2 {
|
||||
font-size: 1.5em;
|
||||
padding: 10px;
|
||||
background-color: #457b9d;
|
||||
color: white;
|
||||
border-bottom: 2px solid #3b6a87;
|
||||
}
|
||||
|
||||
small {
|
||||
font-style: italic;
|
||||
display: block;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
span.warning {
|
||||
color: rgb(212, 191, 0);
|
||||
}
|
||||
|
||||
input {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
video {
|
||||
max-width: 640px;
|
||||
max-height: 360px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
audio {
|
||||
max-width: 640px;
|
||||
max-height: 360px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
div#processing {
|
||||
display: none;
|
||||
justify-content: center;
|
||||
place-items: center;
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
background: #141926;
|
||||
flex-direction: column;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body style='color:white'>
|
||||
<div id="header">
|
||||
<a id="logoname" href="./" style="text-decoration: none; color: white; margin: 2px">
|
||||
<span data-translate="logo-header">
|
||||
<font id="qos">V</font>DO.Ninja
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div id="info">
|
||||
<h1>Web-based Media Conversion Tools</h1>
|
||||
<div class="card">
|
||||
<h2>WebM to MP4 (fixed 1280x720 resolution) <span class='warning'>(very slow!)</span></h2>
|
||||
<div>
|
||||
<small>The same as: fmpeg -i input.webm -vf scale=1280:720 output.mp4</small>
|
||||
<input type="file" id="uploader" title="Convert WebM to MP4">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>MKV to MP4 (no transcoding)</h2>
|
||||
<div>
|
||||
<small>The same as: fmpeg -i INPUTFILE -vcodec copy -acodec copy output.mp4</small>
|
||||
<input type="file" id="uploader2" accept=".mkv" title="Convert MKV to MP4">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>WebM MP4 files (no transcoding, attempts to force high resolutions)</h2>
|
||||
<div>
|
||||
<input type="file" id="uploader3" accept=".webm" title="Convert WebM to MP4">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>WebM to Audio-only files (opus or wav)</h2>
|
||||
<div>
|
||||
<input type="file" id="uploader4" accept=".webm" title="Convert WebM to OPUS">
|
||||
</div>
|
||||
</div>
|
||||
<div id="processing">
|
||||
<span id="message"></span>
|
||||
<video id="player" controls style="display:none"></video>
|
||||
<audio id="player2" controls style="display:none"></audio>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
if (window.location.hostname.indexOf("vdo.ninja") == 0) {
|
||||
window.location = window.location.href.replace("vdo.ninja","isolated.vdo.ninja"); // FFMPEG requires an isolated domain.
|
||||
}
|
||||
</script>
|
||||
|
||||
<script src="./thirdparty/ffmpeg.min.js"></script>
|
||||
<script>
|
||||
|
||||
function download(data, filename) {
|
||||
const blob = new Blob([data.buffer]);
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.style.display = 'none';
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a);
|
||||
window.URL.revokeObjectURL(url);
|
||||
}, 100);
|
||||
}
|
||||
|
||||
const { createFFmpeg, fetchFile } = FFmpeg;
|
||||
const ffmpeg = createFFmpeg({ log: true });
|
||||
|
||||
const transcode = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
document.getElementById('uploader').style.display = "none";
|
||||
document.getElementById('uploader2').style.display = "none";
|
||||
document.getElementById('uploader3').style.display = "none";
|
||||
document.getElementById('message').innerText = "Transcoding file... this will take a while";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
await ffmpeg.run('-i', name, '-vf', 'scale=1280:720', 'output.mp4');
|
||||
const data = ffmpeg.FS('readFile', 'output.mp4');
|
||||
const video = document.getElementById('player');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play video or download it.";
|
||||
}
|
||||
|
||||
const transmux = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
document.getElementById('uploader').style.display = "none";
|
||||
document.getElementById('uploader2').style.display = "none";
|
||||
document.getElementById('uploader3').style.display = "none";
|
||||
document.getElementById('message').innerText = "Transcoding file... this will take a while";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
await ffmpeg.run('-i', name, '-vcodec', 'copy', '-acodec', 'copy', 'output.mp4');
|
||||
const data = ffmpeg.FS('readFile', 'output.mp4');
|
||||
const video = document.getElementById('player');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
|
||||
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play video or download it.";
|
||||
}
|
||||
|
||||
const force1080 = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
const sourceBuffer = await fetch("./media/cap.webm").then(r => r.arrayBuffer());
|
||||
document.getElementById('uploader').style.display = "none";
|
||||
document.getElementById('uploader2').style.display = "none";
|
||||
document.getElementById('uploader3').style.display = "none";
|
||||
document.getElementById('message').innerText = "Tweaking file... this will take a moment";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
ffmpeg.FS("writeFile", "cap.webm", new Uint8Array(sourceBuffer, 0, sourceBuffer.byteLength));
|
||||
|
||||
await ffmpeg.run("-i", "concat:cap.webm|" + name, "-safe", "0", "-c", "copy", "-avoid_negative_ts", "1", "-strict", "experimental", "output.mp4");
|
||||
const data = ffmpeg.FS('readFile', 'output.mp4');
|
||||
const video = document.getElementById('player');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play video or download it.";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
}
|
||||
|
||||
const convertToAudioOnly = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
document.getElementById('message').innerText = "Transcoding file... this will take a while";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
const video = document.getElementById('player');
|
||||
|
||||
await ffmpeg.run('-i', name, '-vn', '-acodec', 'copy', 'output.opus');
|
||||
const data = ffmpeg.FS('readFile', 'output.opus');
|
||||
|
||||
console.log(data.buffer.byteLength);
|
||||
if (data.buffer.byteLength) {
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'audio/opus' }));
|
||||
download(data, name.split(".")[0] + ".opus");
|
||||
} else {
|
||||
await ffmpeg.run('-i', name, '-vn', '-acodec', 'copy', 'output.wav');
|
||||
const data2 = ffmpeg.FS('readFile', 'output.wav');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'audio/pcm' }));
|
||||
download(data2, name.split(".")[0] + ".wav");
|
||||
}
|
||||
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play audio or download it.";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
}
|
||||
|
||||
document.getElementById('uploader').addEventListener('change', transcode);
|
||||
document.getElementById('uploader2').addEventListener('change', transmux);
|
||||
document.getElementById('uploader3').addEventListener('change', force1080);
|
||||
document.getElementById('uploader4').addEventListener('change', convertToAudioOnly);
|
||||
</script>
|
||||
<head>
|
||||
<link rel="stylesheet" href="./main.css?ver=40" />
|
||||
<style>
|
||||
.container {
|
||||
max-width: 80%;
|
||||
width: fit-content;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.card {
|
||||
margin: 10px;
|
||||
box-shadow: 0 4px 8px 0 rgb(0 0 0 / 10%);
|
||||
background-color: #ddd;
|
||||
color: black;
|
||||
margin-bottom: 1.5em;
|
||||
}
|
||||
|
||||
.card>div {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.card h2 {
|
||||
font-size: 1.5em;
|
||||
padding: 10px;
|
||||
background-color: #457b9d;
|
||||
color: white;
|
||||
border-bottom: 2px solid #3b6a87;
|
||||
}
|
||||
|
||||
small {
|
||||
font-style: italic;
|
||||
display: block;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
span.warning {
|
||||
color: rgb(212, 191, 0);
|
||||
}
|
||||
|
||||
input {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
video {
|
||||
max-width: 640px;
|
||||
max-height: 360px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
audio {
|
||||
max-width: 640px;
|
||||
max-height: 360px;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
div#processing {
|
||||
display: none;
|
||||
justify-content: center;
|
||||
place-items: center;
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
font-size: 1.5em;
|
||||
font-weight: bold;
|
||||
background: #141926;
|
||||
flex-direction: column;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body style='color:white'>
|
||||
<div id="header">
|
||||
<a id="logoname" href="./" style="text-decoration: none; color: white; margin: 2px">
|
||||
<span data-translate="logo-header">
|
||||
<font id="qos">V</font>DO.Ninja
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div id="info">
|
||||
<h1>Web-based Media Conversion Tools</h1>
|
||||
<div class="card">
|
||||
<h2>WebM to MP4 (fixed 1280x720 resolution) <span class='warning'>(very slow!)</span></h2>
|
||||
<div>
|
||||
<small>The same as: fmpeg -i input.webm -vf scale=1280:720 output.mp4</small>
|
||||
<input type="file" id="uploader" title="Convert WebM to MP4">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>MKV to MP4 (no transcoding)</h2>
|
||||
<div>
|
||||
<small>The same as: fmpeg -i INPUTFILE -vcodec copy -acodec copy output.mp4</small>
|
||||
<input type="file" id="uploader2" accept=".mkv" title="Convert MKV to MP4">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>WebM MP4 files (no transcoding, attempts to force high resolutions)</h2>
|
||||
<div>
|
||||
<input type="file" id="uploader3" accept=".webm" title="Convert WebM to MP4">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>WebM to Audio-only files (opus or wav)</h2>
|
||||
<div>
|
||||
<input type="file" id="uploader4" accept=".webm" title="Convert WebM to OPUS">
|
||||
</div>
|
||||
</div>
|
||||
<div id="processing">
|
||||
<span id="message"></span>
|
||||
<video id="player" controls style="display:none"></video>
|
||||
<audio id="player2" controls style="display:none"></audio>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
if (window.location.hostname.indexOf("vdo.ninja") == 0) {
|
||||
window.location = window.location.href.replace("vdo.ninja","isolated.vdo.ninja"); // FFMPEG requires an isolated domain.
|
||||
}
|
||||
</script>
|
||||
|
||||
<script src="./thirdparty/ffmpeg.min.js"></script>
|
||||
<script>
|
||||
|
||||
function download(data, filename) {
|
||||
const blob = new Blob([data.buffer]);
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.style.display = 'none';
|
||||
a.href = url;
|
||||
a.download = filename;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(a);
|
||||
window.URL.revokeObjectURL(url);
|
||||
}, 100);
|
||||
}
|
||||
|
||||
const { createFFmpeg, fetchFile } = FFmpeg;
|
||||
const ffmpeg = createFFmpeg({ log: true });
|
||||
|
||||
const transcode = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
document.getElementById('uploader').style.display = "none";
|
||||
document.getElementById('uploader2').style.display = "none";
|
||||
document.getElementById('uploader3').style.display = "none";
|
||||
document.getElementById('message').innerText = "Transcoding file... this will take a while";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
await ffmpeg.run('-i', name, '-vf', 'scale=1280:720', 'output.mp4');
|
||||
const data = ffmpeg.FS('readFile', 'output.mp4');
|
||||
const video = document.getElementById('player');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play video or download it.";
|
||||
}
|
||||
|
||||
const transmux = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
document.getElementById('uploader').style.display = "none";
|
||||
document.getElementById('uploader2').style.display = "none";
|
||||
document.getElementById('uploader3').style.display = "none";
|
||||
document.getElementById('message').innerText = "Transcoding file... this will take a while";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
await ffmpeg.run('-i', name, '-vcodec', 'copy', '-acodec', 'copy', 'output.mp4');
|
||||
const data = ffmpeg.FS('readFile', 'output.mp4');
|
||||
const video = document.getElementById('player');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
|
||||
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play video or download it.";
|
||||
}
|
||||
|
||||
const force1080 = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
const sourceBuffer = await fetch("./media/cap.webm").then(r => r.arrayBuffer());
|
||||
document.getElementById('uploader').style.display = "none";
|
||||
document.getElementById('uploader2').style.display = "none";
|
||||
document.getElementById('uploader3').style.display = "none";
|
||||
document.getElementById('message').innerText = "Tweaking file... this will take a moment";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
ffmpeg.FS("writeFile", "cap.webm", new Uint8Array(sourceBuffer, 0, sourceBuffer.byteLength));
|
||||
|
||||
await ffmpeg.run("-i", "concat:cap.webm|" + name, "-safe", "0", "-c", "copy", "-avoid_negative_ts", "1", "-strict", "experimental", "output.mp4");
|
||||
const data = ffmpeg.FS('readFile', 'output.mp4');
|
||||
const video = document.getElementById('player');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'video/mp4' }));
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play video or download it.";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
}
|
||||
|
||||
const convertToAudioOnly = async ({ target: { files } }) => {
|
||||
const { name } = files[0];
|
||||
document.getElementById('message').innerText = "Transcoding file... this will take a while";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
await ffmpeg.load();
|
||||
ffmpeg.FS('writeFile', name, await fetchFile(files[0]));
|
||||
const video = document.getElementById('player');
|
||||
|
||||
await ffmpeg.run('-i', name, '-vn', '-acodec', 'copy', 'output.opus');
|
||||
const data = ffmpeg.FS('readFile', 'output.opus');
|
||||
|
||||
console.log(data.buffer.byteLength);
|
||||
if (data.buffer.byteLength) {
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'audio/opus' }));
|
||||
download(data, name.split(".")[0] + ".opus");
|
||||
} else {
|
||||
await ffmpeg.run('-i', name, '-vn', '-acodec', 'copy', 'output.wav');
|
||||
const data2 = ffmpeg.FS('readFile', 'output.wav');
|
||||
video.src = URL.createObjectURL(new Blob([data.buffer], { type: 'audio/pcm' }));
|
||||
download(data2, name.split(".")[0] + ".wav");
|
||||
}
|
||||
|
||||
video.style.display = "block";
|
||||
document.getElementById('message').innerText = "Operation Done. Play audio or download it.";
|
||||
document.getElementById('processing').style.display = 'flex';
|
||||
}
|
||||
|
||||
document.getElementById('uploader').addEventListener('change', transcode);
|
||||
document.getElementById('uploader2').addEventListener('change', transmux);
|
||||
document.getElementById('uploader3').addEventListener('change', force1080);
|
||||
document.getElementById('uploader4').addEventListener('change', convertToAudioOnly);
|
||||
</script>
|
||||
</body>
|
||||
47
index.html
47
index.html
@ -55,7 +55,7 @@
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="./lineawesome/css/line-awesome.min.css" />
|
||||
<link rel="stylesheet" href="./main.css?ver=69" />
|
||||
<link rel="stylesheet" href="./main.css?ver=70" />
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.min.js"></script>
|
||||
<style id="lightbox-animations" type="text/css"></style>
|
||||
</head>
|
||||
@ -68,7 +68,7 @@
|
||||
<link itemprop="url" href="./media/obsNinja_logo_full.png" />
|
||||
</span>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/CodecsHandler.js?ver=33"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=214"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=215"></script>
|
||||
<input id="zoomSlider" type="range" style="display: none;" />
|
||||
<div id="header">
|
||||
|
||||
@ -118,6 +118,12 @@
|
||||
<i id="queuetoggle" class="toggleSize las la-stream my-float"></i>
|
||||
<div id="queueNotification"></div>
|
||||
</div>
|
||||
|
||||
<div id="sharefilebutton" title="Transfer any file to the group" alt="Transfer any file to the group" onmousedown="event.preventDefault(); event.stopPropagation();" onclick="toggleFileshare()" tabindex="16" role="button" aria-pressed="false" onkeyup="enterPressedClick(event,this);" class="float" style="cursor: pointer;" >
|
||||
<i id="filesharetoggle" class="toggleSize las la-file-upload my-float"></i>
|
||||
<div id="transferNotification"></div>
|
||||
</div>
|
||||
|
||||
<div id="chatbutton" title="Toggle the Chat" alt="Toggle the Chat" onmousedown="event.preventDefault(); event.stopPropagation();" onclick="toggleChat()" tabindex="16" role="button" aria-pressed="false" onkeyup="enterPressedClick(event,this);" class="advanced float" style="cursor: pointer;" >
|
||||
<i id="chattoggle" class="toggleSize las la-comment-alt my-float"></i>
|
||||
<div id="chatNotification"></div>
|
||||
@ -647,6 +653,9 @@
|
||||
<h1>File Sharing seems to be broken on Chrome v88.</h1>
|
||||
<p>Try <a href="https://github.com/aws/amazon-chime-sdk-js/issues/1031">turning off hardware-accleration</a> in Chrome/Edge to fix the issue, or maybe use a different browser.</p>
|
||||
</div>
|
||||
<br /><br />
|
||||
To host a file for download, rather than for streaming, try the following instead:
|
||||
<input id="fileselector2" onchange="session.hostFile(this,event);" type="file" title="Transfer any file"/>
|
||||
</div>
|
||||
|
||||
<div class="outer close">
|
||||
@ -731,7 +740,7 @@
|
||||
👋 👀 Welcome to VDO Ninja! We've rebranded! 📼 Nothing else is changing and we're staying 100% free.
|
||||
</h4>
|
||||
<br />
|
||||
🌻 Site Updated on July 8th. The <a href="https://docs.vdo.ninja/release-notes/v18_3">v18.3 release notes are here</a>. If new issues occur, the previous version can also be <a href="https://vdo.ninja/v18/">found here</a>.
|
||||
🌻 Site Updated on July XXth. The <a href="https://docs.vdo.ninja/release-notes/v18_3">v18.3 release notes are here</a>. If new issues occur, the previous version can also be <a href="https://vdo.ninja/v18/">found here</a>.
|
||||
|
||||
<br />
|
||||
<br />
|
||||
@ -863,7 +872,7 @@
|
||||
<input type="checkbox" data-param="&sticky" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="remote-monitoring">Invite saved to cookie</span>
|
||||
<span data-translate="invite-saved-to-cookie">Invite saved to cookie</span>
|
||||
<Br />
|
||||
|
||||
<label class="switch" title="Guest will be prompted to enter a Display Name">
|
||||
@ -1134,7 +1143,7 @@
|
||||
<h4 style='color:#CCC;margin:20px 20px 0 20px;' data-translate='more-than-four-can-join' >These four guest slots are just for demonstration. More than four guests can actually join a room.</h4>
|
||||
</div></div>
|
||||
</div>
|
||||
|
||||
<div id="overlayClockContainer" data-initial="600" class="advanced"><span id="overlayClock"></span></div>
|
||||
<div id="overlayMsgs" onclick="function(e){e.target.innerHTML = '';}" style="display:none"></div>
|
||||
<div id="bigPlayButton" onclick="function(e){e.target.innerHTML = '';}" style="display:none"></div>
|
||||
<div id="controls_blank" style="display: none;">
|
||||
@ -1169,7 +1178,7 @@
|
||||
</button>
|
||||
|
||||
<!---- /////// BREAK //////// -->
|
||||
<hr /><span style="user-select: none;grid-column: 1;width:100%;margin:5px 0 ;font-size:80%; cursor: pointer;" onclick="toggleByDataset('1');getById('chevarrow3').classList.toggle('bottom');getById('chevarrow3').classList.toggle('right');"><i id="chevarrow3" style="padding:0px 7px 0 3px;" class="chevron right" aria-hidden="true"></i><span data-translate="More-scene-options">More scene options</span></span>
|
||||
<span style="user-select: none;grid-column: 1;width:100%;margin:5px 0 ;font-size:80%; cursor: pointer;" onclick="toggleByDataset('1');getById('chevarrow3').classList.toggle('bottom');getById('chevarrow3').classList.toggle('right');"><i id="chevarrow3" style="padding:0px 7px 0 3px;" class="chevron right" aria-hidden="true"></i><span data-translate="More-scene-options">More scene options</span></span>
|
||||
|
||||
<button data-action-type="addToScene" class="hidden" data-cluster="1" style="grid-column: 1;" data-scene="2" title="Add this Video to any remote '&scene=2'" onclick="directEnable(this, event, 2);">
|
||||
<i class="las la-plus-square" style="color:#060"></i>
|
||||
@ -1215,7 +1224,7 @@
|
||||
</button>
|
||||
|
||||
<!---- /////// BREAK //////// -->
|
||||
<hr /><span style="user-select: none;grid-column: 1;width:100%;margin:5px 0 ;font-size:80%;cursor: pointer;" onclick="toggleByDataset('2');getById('chevarrow4').classList.toggle('bottom');getById('chevarrow4').classList.toggle('right');"><i id="chevarrow4" class="chevron right" aria-hidden="true" style="padding:0px 7px 0 3px;" ></i><span data-translate="additional-controls">Additional controls</span></span>
|
||||
<span style="user-select: none;grid-column: 1;width:100%;margin:5px 0 ;font-size:80%;cursor: pointer;" onclick="toggleByDataset('2');getById('chevarrow4').classList.toggle('bottom');getById('chevarrow4').classList.toggle('right');"><i id="chevarrow4" class="chevron right" aria-hidden="true" style="padding:0px 7px 0 3px;" ></i><span data-translate="additional-controls">Additional controls</span></span>
|
||||
|
||||
|
||||
<button class="hidden" data-cluster="2" data-action-type="solo-video" style="grid-column: 1; text-shadow: 0px 0px yellow;" data-value="0" title="Solo this video everywhere" onclick="requestInfocus(this);">
|
||||
@ -1228,7 +1237,7 @@
|
||||
<span data-translate="hide-guest" >hide guest</span>
|
||||
</button>
|
||||
|
||||
<button class="hidden" data-cluster="2" data-action-type="toggle-remote-speaker" title="Toggle the remote guest's speaker output" onclick="remoteSpeakerMute(this, event);">
|
||||
<button class="hidden" data-cluster="2" data-action-type="toggle-remote-speaker"title="Toggle the remote guest's speaker output" onclick="remoteSpeakerMute(this, event);">
|
||||
<i class="las la-volume-off"></i> <span data-translate="toggle-remote-speaker">Deafen Guest</span>
|
||||
</button>
|
||||
|
||||
@ -1259,6 +1268,8 @@
|
||||
<span data-translate="change-params">URL Params</span>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
<button class="hidden" data-cluster="2" data-action-type="recorder-local" title="Start Recording this remote stream to this local drive. *experimental*'" onclick="recordVideo(this, event)">
|
||||
<i class="las la-circle"></i>
|
||||
<span data-translate="record-local"> Record Local</span>
|
||||
@ -1268,6 +1279,16 @@
|
||||
<span data-translate="record-remote"> Record Remote</span>
|
||||
</button>
|
||||
|
||||
<button class="hidden" data-cluster="2" data-action-type="open-file-share" data-value="0" title="Allow the guest to select a file to upload to the director. Once shared, it will show in the chat as a download link." onclick="requestFileUpload(this)">
|
||||
<i class="las la-file-upload"></i>
|
||||
<span data-translate="request-upload"> Request File</span>
|
||||
</button>
|
||||
|
||||
<button class="hidden" data-cluster="2" data-action-type="create-timer" data-value="0" title="Set a countdown timer that this guest sees" onclick="directTimer(this, event);">
|
||||
<i class="las la-clock"></i>
|
||||
<span data-translate="create-timer">Create Timer</span>
|
||||
</button>
|
||||
|
||||
|
||||
<font class="tooltip hidden" data-cluster="2" style="height: 0; border: 0;">
|
||||
<input data-action-type="volume" type="range" min="0" max="200" value="100" title="Remotely change the volume of this guest" oninput="remoteVolumeUI(this)" ondblclick="this.value=100;remoteVolume(this);remoteVolumeUI(this);" onchange="remoteVolume(this);" style="grid-column: 2; margin:5px; width: 93%; position: relative;top: 0.6em; background-color:#fff0;"/><span class="tooltiptext" style='float: right; overflow: auto; left: 40px; width: 2.5em; top: -13px; margin: 0; position:relative;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus,Code2000, Code2001, Code2002, Musica, serif, LastResort;' >100</span>
|
||||
@ -1469,6 +1490,7 @@
|
||||
|
||||
</span>
|
||||
<button id="shareScreenGear" style="width: 135px; padding:20px;text-align:center;" onclick="grabScreen()"><b>Share Screen</b><br /><i style="padding:5px; font-size:300%;" class="las la-desktop"></i></button>
|
||||
|
||||
<button id="pIpStartButton" style="width: 135px; background-color:#EFEFEF;padding:20px;text-align:center;display:none;"><b>Preview PiP VIdeo</b><br /><i style="padding:5px; font-size:300%;color:black;" class="las la-compress-arrows-alt"></i></button>
|
||||
<br />
|
||||
|
||||
@ -1669,10 +1691,13 @@
|
||||
window.location = window.location.href.replace("www.obs.ninja","obs.ninja"); // the session.salt is domain specific; let's consolidate www as a result.
|
||||
} else if (window.location.hostname.indexOf("www.vdo.ninja") == 0) {
|
||||
window.location = window.location.href.replace("www.vdo.ninja","vdo.ninja"); // the session.salt is domain specific; let's consolidate www as a result.
|
||||
} else if (("isSecureContext" in window) && (window.isSecureContext===false)){
|
||||
console.error("This site must be run in a secure context; please ensure all links, iframes, and parent windows are using SSL");
|
||||
}
|
||||
|
||||
|
||||
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
|
||||
session.version = "18.3";
|
||||
session.version = "18.4b";
|
||||
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
|
||||
@ -1749,11 +1774,11 @@
|
||||
// session.title // "zzzz"
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/aes.js"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=12"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="lib-js" src="./lib.js?ver=14"></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=239"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=237"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
31
main.css
31
main.css
@ -168,6 +168,10 @@ button.grey {
|
||||
background-color: #673100 !important;
|
||||
}
|
||||
|
||||
.directorBlue {
|
||||
background-color: #5c7785 !important;
|
||||
}
|
||||
|
||||
button.red {
|
||||
-webkit-app-region: no-drag;
|
||||
padding: 10px;
|
||||
@ -245,7 +249,26 @@ button.white:active {
|
||||
pointer-events: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
#overlayClockContainer{
|
||||
margin: 0 auto;
|
||||
background-color: #0000;
|
||||
color: white;
|
||||
font-family: Cousine, monospace;
|
||||
font-size: calc(6vh + 6vw / 2);
|
||||
letter-spacing: 0.0em;
|
||||
text-shadow: 0.05em 0.05em 0px rgb(0 0 0);
|
||||
width: 100%;
|
||||
z-index: 6;
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
position: fixed;
|
||||
overflow-wrap: anywhere;
|
||||
pointer-events: none;
|
||||
}
|
||||
#overlayClock{
|
||||
padding:2px 20px;
|
||||
background-color: #0009;
|
||||
}
|
||||
#overlayMsgs{
|
||||
margin:0 auto;
|
||||
background-color: #0000;
|
||||
@ -467,7 +490,11 @@ hr {
|
||||
background: #999999;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
#activeShares>div{
|
||||
font-weight: normal;
|
||||
font-size: 12px;
|
||||
margin: 10px 0 0 0;
|
||||
}
|
||||
.puslate {
|
||||
border-radius: 50%;
|
||||
box-shadow: 0 0 0 0 rgba(14, 19, 26, 1);
|
||||
|
||||
120
main.js
120
main.js
@ -36,7 +36,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
try {
|
||||
log("Lang Template: " + ln_template);
|
||||
changeLg(ln_template);
|
||||
getById("mainmenu").style.opacity = 1;
|
||||
//getById("mainmenu").style.opacity = 1;
|
||||
} catch (error) {
|
||||
errorlog(error);
|
||||
getById("mainmenu").style.opacity = 1;
|
||||
@ -54,7 +54,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
getById("helpbutton").style.opacity = 0;
|
||||
getById("reportbutton").style.display = "none";
|
||||
getById("reportbutton").style.opacity = 0;
|
||||
getById("mainmenu").style.opacity = 1;
|
||||
//getById("mainmenu").style.opacity = 1;
|
||||
getById("mainmenu").style.margin = "30px 0";
|
||||
getById("translateButton").style.display = "none";
|
||||
getById("translateButton").style.opacity = 0;
|
||||
@ -65,7 +65,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
try {
|
||||
changeLg("blank");
|
||||
getById("mainmenu").style.opacity = 1;
|
||||
//getById("mainmenu").style.opacity = 1;
|
||||
if (session.label === false) {
|
||||
document.title = location.hostname;
|
||||
}
|
||||
@ -78,8 +78,8 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
getById("qos").style.fontSize = "70%";
|
||||
getById("logoname").style.display = "none";
|
||||
getById("logoname").style.margin = "0 0 0 5px";
|
||||
|
||||
} catch (error) {
|
||||
getById("mainmenu").style.opacity = 1;
|
||||
errorlog(error);
|
||||
}
|
||||
} else { // check if automatic language translation is available
|
||||
@ -534,7 +534,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.password = urlParams.get('password') || urlParams.get('pass') || urlParams.get('pw') || urlParams.get('p');
|
||||
if (!session.password) {
|
||||
window.focus();
|
||||
session.password = await promptAlt(miscTranslations["enter-password"], true);
|
||||
session.password = await promptAlt(miscTranslations["enter-password"], true, true);
|
||||
} else if (session.password === "false") {
|
||||
session.password = false;
|
||||
session.defaultPassword = false;
|
||||
@ -553,6 +553,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.defaultPassword = false;
|
||||
getById("addPasswordBasic").style.display = "none";
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (urlParams.has('hash') || urlParams.has('crc') || urlParams.has('check')) { // could be brute forced in theory, so not as safe as just not using a hash check.
|
||||
@ -560,13 +561,13 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
var hash_input = urlParams.get('hash') || urlParams.get('crc') || urlParams.get('check');
|
||||
if (session.password === false) {
|
||||
window.focus();
|
||||
session.password = await promptAlt(miscTranslations["enter-password-2"], true);
|
||||
session.password = await promptAlt(miscTranslations["enter-password-2"], true, true);
|
||||
session.password = sanitizePassword(session.password);
|
||||
getById("passwordRoom").value = session.password;
|
||||
session.defaultPassword = false;
|
||||
}
|
||||
|
||||
session.generateHash(session.password + session.salt, 6).then(function(hash) { // million to one error.
|
||||
generateHash(session.password + session.salt, 6).then(function(hash) { // million to one error.
|
||||
log("hash is " + hash);
|
||||
if (hash.substring(0, 4) !== hash_input) { // hash crc checks are just first 4 characters.
|
||||
session.taintedSession = true;
|
||||
@ -812,6 +813,16 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('outboundvideobitrate') || urlParams.has('ovb')) {
|
||||
session.outboundVideoBitrate = parseInt(urlParams.get('outboundvideobitrate')) || parseInt(urlParams.get('ovb')) || false;
|
||||
}
|
||||
|
||||
if (urlParams.has('nofileshare') || urlParams.has('nodownloads') || urlParams.has('nofiles')){
|
||||
session.hostedFiles = false;
|
||||
session.nodownloads = true;
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
} else if (session.mobile){
|
||||
getById('sharefilebutton').style.display = "none";
|
||||
getById('sharefilebutton').classList.add("advanced");
|
||||
}
|
||||
|
||||
if (urlParams.has('webp')){
|
||||
session.webp = true;
|
||||
@ -1261,7 +1272,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.forceios = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('nocursor')) {
|
||||
if (urlParams.has('nocursor')) { // on the screen, not in screen share
|
||||
session.nocursor = true;
|
||||
log("DISABLE CURSOR");
|
||||
var styletmp = document.createElement('style');
|
||||
@ -1277,6 +1288,10 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
document.head.appendChild(styletmp);
|
||||
|
||||
}
|
||||
|
||||
if (urlParams.has('cursor') || urlParams.has('screensharecursor')) {
|
||||
session.screensharecursor = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('vbr')) {
|
||||
session.cbr = 0;
|
||||
@ -1363,12 +1378,15 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
if (urlParams.has('beep') || urlParams.has('notify') || urlParams.has('tone')) {
|
||||
session.beepToNotify = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('r2d2')) {
|
||||
getById("testtone").innerHTML = "";
|
||||
getById("testtone").src = "./media/robot.mp3";
|
||||
session.beepToNotify = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('easyexit') || urlParams.has('ee')) {
|
||||
session.noExitPrompt = true;
|
||||
}
|
||||
|
||||
if (urlParams.has('videobitrate') || urlParams.has('bitrate') || urlParams.has('vb')) {
|
||||
session.bitrate = urlParams.get('videobitrate') || urlParams.get('bitrate') || urlParams.get('vb');
|
||||
@ -1769,6 +1787,39 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
session.speedtest = urlParams.get('speedtest').toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
var iceServers = [{ urls: ["stun:stun.l.google.com:19302", "stun:stun4.l.google.com:19302"]}]; // google stun servers.
|
||||
|
||||
if (urlParams.has('stun')) {
|
||||
var stunstring = urlParams.get('stun');
|
||||
stunstring = stunstring.split(";");
|
||||
if (stunstring !== "false") { // false disables the TURN server. Useful for debuggin
|
||||
var stun = {};
|
||||
if (stunstring.length==3){
|
||||
stun.username = stunstring[0]; // myusername
|
||||
stun.credential = stunstring[1]; //mypassword
|
||||
stun.urls = [stunstring[2]]; // ["turn:turn.obs.ninja:443"];
|
||||
} else if (stunstring.length==1){
|
||||
stun.urls = [stunstring[0]];
|
||||
}
|
||||
iceServers = [stun];
|
||||
} else {
|
||||
iceServers = [];
|
||||
}
|
||||
}
|
||||
if (urlParams.has('addstun')) {
|
||||
var stunstring = urlParams.get('addstun');
|
||||
stunstring = stunstring.split(";");
|
||||
var stun = {};
|
||||
if (stunstring.length==3){
|
||||
stun.username = stunstring[0]; // myusername
|
||||
stun.credential = stunstring[1]; //mypassword
|
||||
stun.urls = [stunstring[2]]; // ["turn:turn.obs.ninja:443"];
|
||||
} else if (stunstring.length==1){
|
||||
stun.urls = [stunstring[0]];
|
||||
}
|
||||
iceServers = iceServers.concat(stun);
|
||||
}
|
||||
|
||||
if (urlParams.has('turn')) {
|
||||
var turnstring = urlParams.get('turn');
|
||||
@ -1818,9 +1869,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
};
|
||||
} else if ((turnstring == "false") || (turnstring == "off") || (turnstring == "0")) { // disable TURN servers
|
||||
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)
|
||||
],
|
||||
iceServers: iceServers,
|
||||
sdpSemantics: 'unified-plan' // future-proofing
|
||||
};
|
||||
} else {
|
||||
@ -1829,14 +1878,15 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
turnstring = turnstring.split(";");
|
||||
if (turnstring !== "false") { // false disables the TURN server. Useful for debuggin
|
||||
var turn = {};
|
||||
turn.username = turnstring[0]; // myusername
|
||||
turn.credential = turnstring[1]; //mypassword
|
||||
turn.urls = [turnstring[2]]; // ["turn:turn.obs.ninja:443"];
|
||||
|
||||
if (turnstring.length==3){
|
||||
turn.username = turnstring[0]; // myusername
|
||||
turn.credential = turnstring[1]; //mypassword
|
||||
turn.urls = [turnstring[2]]; // ["turn:turn.obs.ninja:443"];
|
||||
} else if (turnstring.length==1){
|
||||
turn.urls = [turnstring[0]];
|
||||
}
|
||||
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)
|
||||
],
|
||||
iceServers: iceServers,
|
||||
sdpSemantics: 'unified-plan' // future-proofing
|
||||
};
|
||||
|
||||
@ -1850,7 +1900,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
}
|
||||
} else {
|
||||
chooseBestTURN(); // vdo.ninja turn servers, if needed.
|
||||
chooseBestTURN(iceServers); // vdo.ninja turn servers, if needed.
|
||||
}
|
||||
|
||||
|
||||
@ -2106,6 +2156,24 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
var director_room_input = urlParams.get('director') || urlParams.get('dir');
|
||||
director_room_input = sanitizeRoomName(director_room_input);
|
||||
log("director_room_input:" + director_room_input);
|
||||
|
||||
if (urlParams.has('codirector') || urlParams.has('directorpassword') || urlParams.has('dirpass') || urlParams.has('dp')) {
|
||||
session.directorPassword = urlParams.get('codirector') || urlParams.get('directorpassword') || urlParams.get('dirpass') || urlParams.get('dp');
|
||||
if (!session.directorPassword) {
|
||||
window.focus();
|
||||
session.directorPassword = await promptAlt(miscTranslations["enter-director-password"], true);
|
||||
}
|
||||
if (session.directorPassword){
|
||||
await generateHash(session.directorPassword + session.salt + "abc123", 12).then(function(hash) { // million to one error.
|
||||
log("dir room hash is " + hash);
|
||||
session.directorHash = hash;
|
||||
return;
|
||||
});
|
||||
} else {
|
||||
session.directorPassword = false;
|
||||
}
|
||||
}
|
||||
|
||||
createRoom(director_room_input);
|
||||
}
|
||||
if (session.chatbutton === true) {
|
||||
@ -3026,6 +3094,7 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
|
||||
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 {
|
||||
session.ws.close();
|
||||
if (session.videoElement.recording) {
|
||||
@ -3041,9 +3110,14 @@ async function main(){ // main asyncronous thread; mostly initializes the user s
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
//setTimeout(function(){session.hangup();},0);
|
||||
return undefined; // ADDED OCT 29th; get rid of popup. Just close the socket connection if the user is refreshing the page. It's one or the other.
|
||||
|
||||
|
||||
if (!session.noExitPrompt && !session.cleanOutput && (session.permaid!==false || session.director)){
|
||||
(e || window.event).returnValue = "Are you sure you want to exit?"; //Gecko + IE
|
||||
return "Are you sure you want to exit?";
|
||||
} else {
|
||||
//setTimeout(function(){session.hangup();},0);
|
||||
return undefined; // ADDED OCT 29th; get rid of popup. Just close the socket connection if the user is refreshing the page. It's one or the other.
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -70,6 +70,8 @@
|
||||
<option value="usc1">Chicago, USA</option>
|
||||
<option value="usw1">Los Angeles, USA</option>
|
||||
<option value="aus1">Sidney, Australia</option>
|
||||
<option value="jap1">Tokyo, Japan</option>
|
||||
<option value="sing1">Singapore</option>
|
||||
</select>
|
||||
<br /><br /><br />
|
||||
</div>
|
||||
|
||||
@ -116,7 +116,34 @@
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"add-group-chat-to-obs": "Add Group Chat",
|
||||
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "For large group rooms, this option can reduce the load on remote guests substantially",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
|
||||
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
|
||||
"add-your-camera-to-obs": "Add your Camera",
|
||||
"start-streaming": "start streaming",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
|
||||
"better-video-compression-and-quality-at-the-cost-of-increased-cpu-encoding-load": "Better video compression and quality at the cost of increased CPU encoding load",
|
||||
"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",
|
||||
"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.",
|
||||
"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",
|
||||
"more-options": "More Options",
|
||||
"hold-ctrl-or-cmd-to-select-multiple-files": "Hold CTRL (or CMD) to select multiple files",
|
||||
"enter-an-https-url": "Enter an HTTPS URL",
|
||||
"creative-commons-by-3-0": "Creative Commons BY 3.0",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"copy-this-url": "Copy this URL into your \"browser source\"",
|
||||
@ -134,7 +161,8 @@
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
@ -226,14 +254,73 @@
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"logo-header": "\n\t\t\t\t\t<font id=\"qos\">V</font>DO.Ninja \n\t\t\t\t",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"add-group-chat": "Create a Room",
|
||||
"rooms-allow-for": "Rooms allow for group-chat and the tools to manage multiple guests.",
|
||||
"room-name": "Room Name",
|
||||
"password-input-field": "Password",
|
||||
"guests-only-see-director": "Guests can only see the Director's Video",
|
||||
"scenes-can-see-director": "Director will also be a performer",
|
||||
"default-codec-select": "Preferred Video Codec: ",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"show-tips": "Show me some tips..",
|
||||
"added-notes": "\n\t\t\t\t\t\t\t\t<u>\n\t\t\t\t\t\t\t\t\t<i>Important Tips:</i><br><br>\n\t\t\t\t\t\t\t\t</u>\n\t\t\t\t\t\t\t\t<li>Disabling video sharing between guests will improve performance</li>\n\t\t\t\t\t\t\t\t<li>Invite only guests to the room that you trust.</li>\n\t\t\t\t\t\t\t\t<li>The \"Recording\" option is considered experimental.</li>\n\t\t\t\t\t\t\t\t<li><a href=\"https://params.vdo.ninja\" style=\"color:black;\"><u>Advanced URL parameters</u></a> are available to customize rooms.</li>\n\t\t\t\t\t\t\t",
|
||||
"back": "Back",
|
||||
"add-your-camera": "Add your Camera",
|
||||
"ask-for-permissions": "Allow Access to Camera/Microphone",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"no-audio": "No Audio",
|
||||
"add-a-password": " Add a Password:",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"audio-sources": "Audio Sources",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"here-you-can-pre-generate": "Here you can pre-generate a reusable Browser Source link and a related guest invite link.",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"advanced-paramaters": "Advanced Options",
|
||||
"unlock-video-bitrate": "Unlock Video Bitrate (20mbps)",
|
||||
"force-vp9-video-codec": "Force VP9 Video Codec",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"hide-mic-selection": "Force Default Microphone",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"obfuscate_url": "Obfuscate the Invite URL",
|
||||
"add-a-password-to-stream": " Add a password:",
|
||||
"add-the-guest-to-a-room": " Add the guest to a room:",
|
||||
"invite-group-chat-type": "This room guest can:",
|
||||
"can-see-and-hear": "Can see and hear the group chat",
|
||||
"can-hear-only": "Can only hear the group chat",
|
||||
"cant-see-or-hear": "Cannot hear or see the group chat",
|
||||
"share-local-video-file": "Stream Media File",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"share-website-iframe": "Share Website",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"run-a-speed-test": "Run a Speed Test",
|
||||
"read-the-guides": "Browse the Guides",
|
||||
"info-blob": "",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"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-obs-ninja-chat": "\n\t\t\t\t\tWelcome! You can send text messages directly to connected peers from here.\n\t\t\t\t"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
"enter-your-message-here": "Enter your message here",
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
"enter-the-room-password-here": "Enter the room password here",
|
||||
"enter-a-room-name-here": "Enter a Room Name here",
|
||||
"optional-room-password-here": "Optional room password here",
|
||||
"optional": "optional",
|
||||
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
|
||||
"add-an-optional-password": "Add an optional password",
|
||||
"enter-room-name-here": "Enter Room name here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
@ -242,7 +329,7 @@
|
||||
"director-redirect-2": "\n\nPress OK to be redirected.",
|
||||
"add-a-label": "Add a label",
|
||||
"audio-processing-disabled": "Audio processing is disabled with this guest. Can't mute or change volume",
|
||||
"not-the-director": "<font color='red'>You are not the director of this room. You will have limited to no control. You can try claiming the room after the first director leaves.</font>",
|
||||
"not-the-director": "<font color='red'>You are not the director of this room. You will have limited to no control. See <a target='_blank' href='https://docs.vdo.ninja/director-settings/codirector'>&codirector</a> on how to become a co-director.</font>",
|
||||
"room-is-claimed": "The room is already claimed by someone else.\n\nOnly the first person to join a room is the assigned director.\n\nRefresh after the first director leaves to claim.",
|
||||
"streamid-already-published": "The stream ID you are publishing to is already in use.\n\nPlease try with a different invite link or refresh to retry again.\n\nYou will now be disconnected.",
|
||||
"director": "Director",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Připojit se s názvem místnosti zde",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Raum über Namen betreten",
|
||||
|
||||
@ -116,7 +116,34 @@
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"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",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
|
||||
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
|
||||
"add-your-camera-to-obs": "Add your Camera to OBS",
|
||||
"start-streaming": "start streaming",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare into OBS",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
|
||||
"better-video-compression-and-quality-at-the-cost-of-increased-cpu-encoding-load": "Better video compression and quality at the cost of increased CPU encoding load",
|
||||
"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",
|
||||
"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.",
|
||||
"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",
|
||||
"more-options": "More Options",
|
||||
"hold-ctrl-or-cmd-to-select-multiple-files": "Hold CTRL (or CMD) to select multiple files",
|
||||
"enter-an-https-url": "Enter an HTTPS URL",
|
||||
"creative-commons-by-3-0": "Creative Commons BY 3.0",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"copy-this-url": "Copy this URL into an OBS \"Browser Source\"",
|
||||
@ -134,7 +161,8 @@
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
@ -226,14 +254,73 @@
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"logo-header": "\n\t\t\t\t\t<font id=\"qos\">V</font>DO.Ninja \n\t\t\t\t",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"add-group-chat": "Create a Room",
|
||||
"rooms-allow-for": "Rooms allow for group-chat and the tools to manage multiple guests.",
|
||||
"room-name": "Room Name",
|
||||
"password-input-field": "Password",
|
||||
"guests-only-see-director": "Guests can only see the Director's Video",
|
||||
"scenes-can-see-director": "Director will also be a performer",
|
||||
"default-codec-select": "Preferred Video Codec: ",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"show-tips": "Show me some tips..",
|
||||
"added-notes": "\n\t\t\t\t\t\t\t\t<u>\n\t\t\t\t\t\t\t\t\t<i>Important Tips:</i><br><br>\n\t\t\t\t\t\t\t\t</u>\n\t\t\t\t\t\t\t\t<li>Disabling video sharing between guests will improve performance</li>\n\t\t\t\t\t\t\t\t<li>Invite only guests to the room that you trust.</li>\n\t\t\t\t\t\t\t\t<li>The \"Recording\" option is considered experimental.</li>\n\t\t\t\t\t\t\t\t<li><a href=\"https://params.vdo.ninja\" style=\"color:black;\"><u>Advanced URL parameters</u></a> are available to customize rooms.</li>\n\t\t\t\t\t\t\t",
|
||||
"back": "Back",
|
||||
"add-your-camera": "Add your Camera to OBS",
|
||||
"ask-for-permissions": "Allow Access to Camera/Microphone",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"no-audio": "No Audio",
|
||||
"add-a-password": " Add a Password:",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"remote-screenshare-obs": "Remote Screenshare into OBS",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"audio-sources": "Audio Sources",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"here-you-can-pre-generate": "Here you can pre-generate a reusable Browser Source link and a related guest invite link.",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"advanced-paramaters": "Advanced Options",
|
||||
"unlock-video-bitrate": "Unlock Video Bitrate (20mbps)",
|
||||
"force-vp9-video-codec": "Force VP9 Video Codec",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"hide-mic-selection": "Force Default Microphone",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"obfuscate_url": "Obfuscate the Invite URL",
|
||||
"add-a-password-to-stream": " Add a password:",
|
||||
"add-the-guest-to-a-room": " Add the guest to a room:",
|
||||
"invite-group-chat-type": "This room guest can:",
|
||||
"can-see-and-hear": "Can see and hear the group chat",
|
||||
"can-hear-only": "Can only hear the group chat",
|
||||
"cant-see-or-hear": "Cannot hear or see the group chat",
|
||||
"share-local-video-file": "Stream Media File",
|
||||
"select-the-video-files-to-share": "SELECT THE VIDEO FILES TO SHARE",
|
||||
"share-website-iframe": "Share Website",
|
||||
"enter-the-website-URL-you-wish-to-share": "Enter the URL website you wish to share.",
|
||||
"run-a-speed-test": "Run a Speed Test",
|
||||
"read-the-guides": "Browse the Guides",
|
||||
"info-blob": "\n\t\t\t\t\t\t\t<h2>What is VDO.Ninja</h2>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<li>100% <b>free</b>; no downloads; no personal data collection; no sign-in</li>\n\t\t\t\t\t\t\t<li>Bring live video from your smartphone, remote computer, or friends directly into OBS or other studio software.</li>\n\t\t\t\t\t\t\t<li>We use cutting edge Peer-to-Peer forwarding technology that offers privacy and ultra-low latency</li>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<li>Youtube video \n\t\t\t\t\t\t\t\t<i class=\"lab la-youtube\"></i>\n\t\t\t\t\t\t\t\t<a href=\"https://www.youtube.com/watch?v=vLpRzMjUDaE&list=PLWodc2tCfAH1WHjl4WAOOoRSscJ8CHACe&index=2\" alt=\"Youtube video demoing VDO.Ninja\">Demoing it here</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<i>\n\t\t\t\t\t\t\t\t<font style=\"color: red;\">Known issues:</font>\n\t\t\t\t\t\t\t</i>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tSome devices that use H264 hardware encoding can experience video glitching; switching to VP8 or VP9 as a codec can help.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tIf using multiple group scenes at a time, iOS devices may fail to work if the hardware encoders max out. Perhaps try VP8 as a codec instead.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t\tA list of less common issues can <a href=\"https://docs.vdo.ninja/common-errors-and-known-issues/known-issues-browser-bugs-and-more\">be found here</a>.\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<h4 style=\"color:#daad09;\">\n\t\t\t\t\t\t\t\t👋 👀 Welcome to VDO Ninja! We've rebranded! 📼 Nothing else is changing and we're staying 100% free.\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t🌻 Site Updated on July 8th. The <a href=\"https://docs.vdo.ninja/release-notes/v18_3\">v18.3 release notes are here</a>. If new issues occur, the previous version can also be <a href=\"https://vdo.ninja/v18/\">found here</a>.\n\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t<h3>\n\t\t\t\t\t\t\t 🛠 For support, see the <a href=\"https://www.reddit.com/r/VDONinja/\">sub-reddit <i class=\"lab la-reddit-alien\"></i></a> or join the <a href=\"https://discord.gg/T4xpQVv\">Discord <i class=\"lab la-discord\"></i></a>. The <a href=\"https://docs.vdo.ninja/\">documentation is here</a> and my personal email is <i>steve@seguin.email</i>\n\t\t\t\t\t\t\t</h3> \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"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-obs-ninja-chat": "\n\t\t\t\t\tWelcome to VDO.Ninja! You can send text messages directly to connected peers from here.\n\t\t\t\t"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
"enter-your-message-here": "Enter your message here",
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
"enter-the-room-password-here": "Enter the room password here",
|
||||
"enter-a-room-name-here": "Enter a Room Name here",
|
||||
"optional-room-password-here": "Optional room password here",
|
||||
"optional": "optional",
|
||||
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
|
||||
"add-an-optional-password": "Add an optional password",
|
||||
"enter-room-name-here": "Enter Room name here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
|
||||
@ -141,7 +141,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"copy-this-url": "Copia esta URL como fuente \"Navegador\" de OBS",
|
||||
@ -282,7 +285,8 @@
|
||||
"add-to-outlook-calendar": "Añadir a Calendario Outlook",
|
||||
"add-to-yahoo-calendar": "Añadir a Calendario Yahoo",
|
||||
"push-to-talk-enable": " enable director`s microphone or video<br>(only guests can see this feed)",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -297,7 +301,14 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"logo-header": "\n\t\t\t\t\t<font id=\"qos\">V</font>DO.Ninja \n\t\t\t\t",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs",
|
||||
"welcome-to-obs-ninja-chat": "\n\t\t\t\t\tWelcome to VDO.Ninja! You can send text messages directly to connected peers from here.\n\t\t\t\t"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Unirse por Nombre de Sala aquí",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Rejoindre via le nom de salle ici",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Ga binnen met een kamer naam",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja - Pig Latin",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Erehay ouyay ancay epray-enerategay",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Introduza aqui numa sala pelo seu nome",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja (RU)",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -155,7 +155,10 @@
|
||||
"a-direct-solo-view-of-the-video-audio-stream-with-nothing-else-its-audio-can-be-remotely-controlled-from-here": "A direct solo view of the video/audio stream with nothing else. Its audio can be remotely controlled from here",
|
||||
"this-guest-raised-their-hand-click-this-to-clear-notification-": "This guest raised their hand. Click this to clear notification.",
|
||||
"increase-this-at-your-peril-changes-the-total-inbound-video-bitrate-per-guest-mobile-devices-excluded-webp-mode-also-excluded-": "Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded.",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@ -311,7 +314,8 @@
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
@ -326,7 +330,12 @@
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
"record-director-local": " Record",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
|
||||
@ -147,7 +147,10 @@
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"hide-this-window": "Hide this window"
|
||||
"hide-this-window": "Hide this window",
|
||||
"cycle-the-cameras": "Cycle the Cameras",
|
||||
"have-screen-shares-stream-id-s-use-a-predictable-prefixed-value-instead-of-a-random-one-": "Have screen-shares stream ID's use a predictable prefixed value instead of a random one.",
|
||||
"toggle-solo-voice-chat-or-hold-ctrl-cmd-when-selecting-to-make-it-two-way-private-": "Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private."
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "\n\t\t\t\t\t<font id=\"qos\">O</font>BS.Ninja \n\t\t\t\t",
|
||||
@ -242,7 +245,8 @@
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"remote-monitoring": "Remote Monitoring",
|
||||
"invite-saved-to-cookie": "Invite saved to cookie",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
@ -304,7 +308,15 @@
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"only-director-can-hear-you": "Only the director can hear you currently.",
|
||||
"director-muted-you": "The director has muted you.",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"application-audio-capture": "For application-specific audio capture, <a href=\"https://docs.vdo.ninja/audio\" style=\"color: #007AC8;\">see here</a>",
|
||||
"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.",
|
||||
"animate-mixing": "Animate mixing",
|
||||
"prefix-screenshare": "Prefix screenshare IDs"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "приєднано до кімнати тут ",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user