mirror of
https://github.com/SrIzan10/vdo.ninja.git
synced 2026-05-01 11:05:24 +00:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
922a7f7965 | ||
|
|
295368aa4f | ||
|
|
4c87d10134 | ||
|
|
aa34df12b8 | ||
|
|
34b651209b | ||
|
|
73cabdf824 | ||
|
|
4cd4c1f171 | ||
|
|
3fd93ad6fb | ||
|
|
7bf131b83f | ||
|
|
8e023705f1 | ||
|
|
cf41eb1ff1 | ||
|
|
e1c2ad1748 | ||
|
|
bb5e19c70b | ||
|
|
1a00eaf2b7 | ||
|
|
78ac9f961c | ||
|
|
f57df65c4b | ||
|
|
2bbda7fa19 | ||
|
|
4c1151056a |
@@ -1,10 +1,10 @@
|
||||
# OBS.Ninja Contributor License Agreement (CLA)
|
||||
# VDO.Ninja Contributor License Agreement (CLA)
|
||||
|
||||
To ensure the long-term viability of the open-source OBS.Ninja project, and for the protection of its creator and its users, we request that contributors to the project first agree to some basic terms. The terms when accepted applies to all of your past, present and future contributions.
|
||||
To ensure the long-term viability of the open-source VDO.Ninja project, and for the protection of its creator and its users, we request that contributors to the project first agree to some basic terms. The terms when accepted applies to all of your past, present and future contributions.
|
||||
|
||||
# Contribution Policy
|
||||
|
||||
Contributions that only take 20 lines of code or less will have its Intellectual Property implicitly transferred to Stephen Seguin, the creator of OBS.Ninja. You agree with this rule by pushing your code or works to github, by sending the code or works to one of OBS.Ninja's core developers, or by distributing your code or works in any other way.
|
||||
Contributions that only take 20 lines of code or less will have its Intellectual Property implicitly transferred to Stephen Seguin, the creator of VDO.Ninja. You agree with this rule by pushing your code or works to github, by sending the code or works to one of VDO.Ninja's core developers, or by distributing your code or works in any other way.
|
||||
|
||||
For all code contributions that take more than 20 lines, you are invited to digitally sign the CLA with the provided CLA Assissant service. You may also print, sign, scan, and then email the CLA to steve@seguin.email.
|
||||
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
|
||||
#### ⚠ Notice! We've started our rebranding from OBS.Ninja to VDO.Ninja 🎈 -- nothing else will be changing. ✨
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/2575698/124821455-bbfec580-df3c-11eb-9641-3d036cdd6c41.png" data-canonical-src="https://user-images.githubusercontent.com/2575698/124821455-bbfec580-df3c-11eb-9641-3d036cdd6c41.png" width="200" />
|
||||
|
||||
<img src="media/obsNinja_logo_full.png" alt="Logo by brimace" height="150" />
|
||||
|
||||
## What is ~~OBS NINJA~~ **VDO NINJA**
|
||||
## What is **VDO NINJA**
|
||||
VDO.Ninja uses peer-to-peer technology to bring remote cameras into OBS or other studio software.
|
||||
|
||||
In most cases, all video data is transferred directly from peer to peer, without needing to go through any video server. This results in high-quality video with super low latency. In a small number of cases, video data may go through an encrypted TURN server, which is used to facilitate peer connections when otherwise not possible.
|
||||
@@ -81,3 +80,6 @@ Ideas, feedback, bugs, etc -- all welcomed. I'm dumping many of my ideas as iss
|
||||
|
||||
## Licence
|
||||
VDO.Ninja is available as 'mostly' open-source; please see the LICENCE.md file for details.
|
||||
|
||||
## Credit
|
||||
Thank you to everyone who has helped support this project so far. From the moderators, volunteers helping with support, those contributing media assets, the project sponsors, those reporting issues, those offering feedback, and any code submissions.
|
||||
|
||||
463
convert.html
463
convert.html
@@ -1,230 +1,235 @@
|
||||
<head>
|
||||
<link rel="stylesheet" href="./main.css?ver=39" />
|
||||
<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 src="https://unpkg.com/@ffmpeg/ffmpeg@0.9.6/dist/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>
|
||||
@@ -290,7 +290,7 @@
|
||||
<i class="las la-play"></i>
|
||||
</label>
|
||||
<div id="inputCombo">
|
||||
<input type="text" id="changeText" class="inputfield" value="http://vdo.ninja/?view=" onchange="modURL" onkeyup="enterPressed(event, gohere);" />
|
||||
<input type="text" id="changeText" class="inputfield" value="http://vdo.ninja/" onchange="modURL" onkeyup="enterPressed(event, gohere);" />
|
||||
<button onclick="gohere();" id="gobutton">GO</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -364,11 +364,9 @@ function resetHistory(){
|
||||
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
if (navigator.userAgent.indexOf('Mac OS X') != -1){
|
||||
document.getElementById("warning4mac").style.display="block";
|
||||
} else if (location.hostname.toLowerCase() == "obs.ninja"){
|
||||
if ((location.hostname.toLowerCase() == "vdo.ninja") || (location.hostname.toLowerCase() == "obs.ninja")){
|
||||
try {
|
||||
if (navigator.userAgent.toLowerCase().indexOf(' electron/') > -1) { // for now, just PC or Linux versions only.
|
||||
if (navigator.userAgent.toLowerCase().indexOf(' electron/') > -1) {
|
||||
function compareVersions(version){
|
||||
version = version.split(".");
|
||||
fetch('https://api.github.com/repos/steveseguin/electroncapture/releases/latest')
|
||||
|
||||
25
examples/changepass.html
Normal file
25
examples/changepass.html
Normal file
@@ -0,0 +1,25 @@
|
||||
<html><body><script>
|
||||
var generateHash = function (str, length=false){
|
||||
var buffer = new TextEncoder("utf-8").encode(str);
|
||||
return crypto.subtle.digest("SHA-256", buffer).then(
|
||||
function (hash) {
|
||||
hash = new Uint8Array(hash);
|
||||
if (length){
|
||||
hash = hash.slice(0, parseInt(parseInt(length)/2));
|
||||
}
|
||||
hash = toHexString(hash);
|
||||
return hash;
|
||||
}
|
||||
);
|
||||
};
|
||||
function toHexString(byteArray){
|
||||
return Array.prototype.map.call(byteArray, function(byte){
|
||||
return ('0' + (byte & 0xFF).toString(16)).slice(-2);
|
||||
}).join('');
|
||||
}
|
||||
var password = prompt("Please enter the password");
|
||||
|
||||
generateHash(password + location.hostname, 4).then(function(hash) { // million to one error.
|
||||
alert("hash value: "+hash)
|
||||
});
|
||||
</script></body></html>
|
||||
331
examples/dual.html
Normal file
331
examples/dual.html
Normal file
@@ -0,0 +1,331 @@
|
||||
<html>
|
||||
<head><title>Dual Input</title>
|
||||
<style>
|
||||
body{
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
iframe {
|
||||
border:0;
|
||||
margin:0;
|
||||
padding:0;
|
||||
display:block;
|
||||
margin:0px;
|
||||
min-height: 100px;
|
||||
min-width: 100px;
|
||||
max-height: 95%;
|
||||
max-width: 99%%;
|
||||
float: left;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
#viewlink {
|
||||
width:400px;
|
||||
}
|
||||
|
||||
|
||||
input{
|
||||
padding:5px;
|
||||
margin:5px;
|
||||
}
|
||||
button{
|
||||
padding:5px;
|
||||
margin:5px;
|
||||
position:relative;
|
||||
|
||||
}
|
||||
|
||||
.menu {
|
||||
z-index: 10;
|
||||
float:right;
|
||||
right: 20px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.close {
|
||||
background-color: #d33;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.reload {
|
||||
background-color: #0a0;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.popup {
|
||||
z-index: 9;
|
||||
background-color: #f1f1f1;
|
||||
border: 1px solid #d3d3d3;
|
||||
text-align: center;
|
||||
min-height: 100px;
|
||||
min-width: 100px;
|
||||
max-height: 95%;
|
||||
max-width: 99%;
|
||||
scale: 0.5;
|
||||
}
|
||||
|
||||
.popup {
|
||||
position: absolute;
|
||||
/*resize: both; !*enable this to css resize*! */
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.popup-header {
|
||||
cursor: move;
|
||||
background-color: #2196f3;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.popup .resizer-right {
|
||||
width: 5px;
|
||||
height: 100%;
|
||||
background: transparent;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
cursor: e-resize;
|
||||
}
|
||||
|
||||
.popup .resizer-bottom {
|
||||
width: 100%;
|
||||
height: 5px;
|
||||
background: transparent;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
cursor: n-resize;
|
||||
}
|
||||
|
||||
.popup .resizer-both {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
background: transparent;
|
||||
z-index: 10;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
cursor: nw-resize;
|
||||
}
|
||||
|
||||
|
||||
/*NOSELECT*/
|
||||
|
||||
.popup * {
|
||||
-webkit-touch-callout: none; /* iOS Safari */
|
||||
-webkit-user-select: none; /* Safari */
|
||||
-khtml-user-select: none; /* Konqueror HTML */
|
||||
-moz-user-select: none; /* Firefox */
|
||||
-ms-user-select: none; /* Internet Explorer/Edge */
|
||||
user-select: none; /* Non-prefixed version, currently
|
||||
supported by Chrome and Opera */
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<input placeholder="Enter an OBS.Ninja Room Link" id="viewlink" />
|
||||
|
||||
<button onclick="loadIframe();">Load URL</button>You can drag and resize the generated windows; multiple can be created.
|
||||
|
||||
<div id="container"></div>
|
||||
|
||||
<script>
|
||||
var currentZIndex = 100;
|
||||
function initDragElement(popup){
|
||||
|
||||
var pos1 = 0,
|
||||
pos2 = 0,
|
||||
pos3 = 0,
|
||||
pos4 = 0;
|
||||
|
||||
var elmnt = null;
|
||||
|
||||
var header = getHeader(popup);
|
||||
var iframe = getIFrame(popup);
|
||||
|
||||
popup.onmousedown = function() {
|
||||
this.style.zIndex = "" + ++currentZIndex;
|
||||
};
|
||||
|
||||
if (header) {
|
||||
header.parentPopup = popup;
|
||||
header.onmousedown = dragMouseDown;
|
||||
}
|
||||
|
||||
|
||||
function dragMouseDown(e) {
|
||||
elmnt = this.parentPopup;
|
||||
elmnt.style.zIndex = "" + ++currentZIndex;
|
||||
|
||||
e = e || window.event;
|
||||
// get the mouse cursor position at startup:
|
||||
pos3 = e.clientX;
|
||||
pos4 = e.clientY;
|
||||
document.onmouseup = closeDragElement;
|
||||
// call a function whenever the cursor moves:
|
||||
document.onmousemove = elementDrag;
|
||||
}
|
||||
|
||||
function elementDrag(e) {
|
||||
if (!elmnt) {
|
||||
return;
|
||||
}
|
||||
|
||||
e = e || window.event;
|
||||
// calculate the new cursor position:
|
||||
pos1 = pos3 - e.clientX;
|
||||
pos2 = pos4 - e.clientY;
|
||||
pos3 = e.clientX;
|
||||
pos4 = e.clientY;
|
||||
// set the element's new position:
|
||||
elmnt.style.top = elmnt.offsetTop - pos2 + "px";
|
||||
elmnt.style.left = elmnt.offsetLeft - pos1 + "px";
|
||||
|
||||
iframe.style.top = elmnt.offsetTop - pos2 + "px";
|
||||
iframe.style.left = elmnt.offsetLeft - pos1 + "px";
|
||||
}
|
||||
|
||||
function closeDragElement() {
|
||||
/* stop moving when mouse button is released:*/
|
||||
document.onmouseup = null;
|
||||
document.onmousemove = null;
|
||||
}
|
||||
|
||||
function getHeader(element) {
|
||||
var headerItems = element.getElementsByClassName("popup-header");
|
||||
|
||||
if (headerItems.length === 1) {
|
||||
return headerItems[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function getIFrame(element) {
|
||||
var headerItems = element.getElementsByTagName("iframe");
|
||||
|
||||
if (headerItems.length === 1) {
|
||||
return headerItems[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function initResizeElement(p) {
|
||||
|
||||
var iframe = getIFrame(p);
|
||||
var element = null;
|
||||
var startX, startY, startWidth, startHeight;
|
||||
|
||||
var right = document.createElement("div");
|
||||
right.className = "resizer-right";
|
||||
p.appendChild(right);
|
||||
right.addEventListener("mousedown", initDrag, false);
|
||||
right.parentPopup = p;
|
||||
|
||||
var bottom = document.createElement("div");
|
||||
bottom.className = "resizer-bottom";
|
||||
p.appendChild(bottom);
|
||||
bottom.addEventListener("mousedown", initDrag, false);
|
||||
bottom.parentPopup = p;
|
||||
|
||||
var both = document.createElement("div");
|
||||
both.className = "resizer-both";
|
||||
p.appendChild(both);
|
||||
both.addEventListener("mousedown", initDrag, false);
|
||||
both.parentPopup = p;
|
||||
|
||||
|
||||
function initDrag(e) {
|
||||
element = this.parentPopup;
|
||||
|
||||
startX = e.clientX;
|
||||
startY = e.clientY;
|
||||
startWidth = parseInt(
|
||||
document.defaultView.getComputedStyle(element).width,
|
||||
10
|
||||
);
|
||||
startHeight = parseInt(
|
||||
document.defaultView.getComputedStyle(element).height,
|
||||
10
|
||||
);
|
||||
document.documentElement.addEventListener("mousemove", doDrag, false);
|
||||
document.documentElement.addEventListener("mouseup", stopDrag, false);
|
||||
document.documentElement.addEventListener("click", stopDrag, false)
|
||||
}
|
||||
|
||||
function doDrag(e) {
|
||||
if (e.buttons==0){
|
||||
stopDrag(e);
|
||||
return false;
|
||||
}
|
||||
|
||||
element.style.width = startWidth + e.clientX - startX + "px";
|
||||
element.style.height = startHeight + e.clientY - startY + "px";
|
||||
|
||||
iframe.style.width = startWidth + e.clientX - startX + "px";
|
||||
iframe.style.height = startHeight + e.clientY - startY + "px";
|
||||
}
|
||||
|
||||
function stopDrag(e) {
|
||||
document.documentElement.removeEventListener("mousemove", doDrag, false);
|
||||
document.documentElement.removeEventListener("mouseup", stopDrag, false);
|
||||
}
|
||||
|
||||
function getIFrame(element) {
|
||||
var headerItems = element.getElementsByTagName("iframe");
|
||||
|
||||
if (headerItems.length === 1) {
|
||||
return headerItems[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function loadIframe(){
|
||||
|
||||
var iframeContainer = document.createElement("div");
|
||||
iframeContainer.className="popup";
|
||||
iframeContainer.style.zIndex = "" + ++currentZIndex;
|
||||
iframeContainer.style.width="325px";
|
||||
iframeContainer.style.height="420px";
|
||||
|
||||
var button = document.createElement("button");
|
||||
button.innerHTML = "Move";
|
||||
button.className = "popup-header menu";
|
||||
iframeContainer.appendChild(button);
|
||||
|
||||
var button = document.createElement("button");
|
||||
button.innerHTML = "Close";
|
||||
button.className = "menu close";
|
||||
button.onclick = function(){iframe.contentWindow.postMessage({"close":true}, '*');iframe.parentNode.parentNode.removeChild(iframeContainer);}
|
||||
iframeContainer.appendChild(button);
|
||||
|
||||
var button = document.createElement("button");
|
||||
button.innerHTML = "Reload";
|
||||
button.className = "menu reload";
|
||||
button.onclick = function(){iframe.contentWindow.postMessage({"reload":true}, '*');}
|
||||
iframeContainer.appendChild(button);
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.allow="autoplay";
|
||||
iframe.src = document.getElementById("viewlink").value || "https://obs.ninja";
|
||||
iframe.style.width="325px";
|
||||
iframe.style.height="420px";
|
||||
|
||||
iframeContainer.appendChild(iframe);
|
||||
|
||||
document.getElementById("container").appendChild(iframeContainer);
|
||||
|
||||
initDragElement(iframeContainer);
|
||||
initResizeElement(iframeContainer);
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
3
examples/mini.css
Normal file
3
examples/mini.css
Normal file
@@ -0,0 +1,3 @@
|
||||
.tile {
|
||||
max-width:200px !important;
|
||||
}
|
||||
172
examples/status.html
Normal file
172
examples/status.html
Normal file
@@ -0,0 +1,172 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>OBSN Chat Overlay</title>
|
||||
<style>
|
||||
|
||||
@font-face {
|
||||
font-family: 'Cousine';
|
||||
src: url('fonts/Cousine-Bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
body {
|
||||
margin:0;
|
||||
padding:0 10px;
|
||||
height:100%;
|
||||
border: 0;
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
position:absolute;
|
||||
bottom:0;
|
||||
overflow:hidden;
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin:0;
|
||||
background-color: #0000;
|
||||
color: white;
|
||||
font-family: Cousine, monospace;
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1em;
|
||||
letter-spacing: 0.0em;
|
||||
text-transform: uppercase;
|
||||
padding: 0em;
|
||||
text-shadow: 0.05em 0.05em 0px rgba(0,0,0,1);
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
ul li {
|
||||
background-color: black;
|
||||
padding: 8px 8px 0px 8px;
|
||||
margin:0;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
max-width:100%;
|
||||
}
|
||||
|
||||
a {
|
||||
color:white;
|
||||
font-size:1.2em;
|
||||
text-transform: none;
|
||||
word-wrap: break-word;
|
||||
overflow-wrap: break-word;
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
hyphens: auto;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
|
||||
|
||||
(function (w) {
|
||||
w.URLSearchParams =
|
||||
w.URLSearchParams ||
|
||||
function (searchString) {
|
||||
var self = this;
|
||||
self.searchString = searchString;
|
||||
self.get = function (name) {
|
||||
var results = new RegExp("[\?&]" + name + "=([^&#]*)").exec(
|
||||
self.searchString
|
||||
);
|
||||
if (results == null) {
|
||||
return null;
|
||||
} else {
|
||||
return decodeURI(results[1]) || 0;
|
||||
}
|
||||
};
|
||||
};
|
||||
})(window);
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
|
||||
function loadIframe() {
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
|
||||
var view= "";
|
||||
if (urlParams.has("view")) {
|
||||
view = "&view="+(urlParams.get("view") || "");
|
||||
}
|
||||
var room="";
|
||||
if (urlParams.has("room")) {
|
||||
room = "&room="+urlParams.get("room");
|
||||
}
|
||||
|
||||
var password="";
|
||||
if (urlParams.has("password")) {
|
||||
password = "&password="+urlParams.get("password");
|
||||
}
|
||||
|
||||
iframe.allow = "autoplay";
|
||||
var srcString = "./?novideo&noaudio&label=chatOverlay&scene"+room+view+password;
|
||||
|
||||
iframe.src = srcString;
|
||||
iframe.style.width="0";
|
||||
iframe.style.height="0";
|
||||
iframe.style.border="0";
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
//////////// LISTEN FOR EVENTS
|
||||
|
||||
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
|
||||
var eventer = window[eventMethod];
|
||||
var messageEvent = eventMethod === "attachEvent" ? "onmessage" : "message";
|
||||
|
||||
|
||||
/// If you have a routing system setup, you could have just one global listener for all iframes instead.
|
||||
|
||||
eventer(messageEvent, function (e) {
|
||||
if (e.source != iframe.contentWindow){return} // reject messages send from other iframes
|
||||
|
||||
console.log(e);
|
||||
if ("gotChat" in e.data){
|
||||
logData(e.data.gotChat.label,e.data.gotChat.msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function printValues(obj) {
|
||||
var out = "";
|
||||
for (var key in obj) {
|
||||
if (typeof obj[key] === "object") {
|
||||
out += "<br />";
|
||||
out += printValues(obj[key]);
|
||||
} else {
|
||||
if (key.startsWith("_")) {
|
||||
} else {
|
||||
out += "<b>" + key + "</b>: " + obj[key] + "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function logData(type, data) {
|
||||
var log = document.body.getElementsByTagName("ul")[0];
|
||||
var entry = document.createElement('li');
|
||||
if (type){
|
||||
type = "<i>"+type+"</i>";
|
||||
}
|
||||
entry.innerHTML = type + data;
|
||||
|
||||
//setTimeout(function(entry){ // hide message after 60 seconds
|
||||
// entry.innerHTML="";
|
||||
// entry.remove();
|
||||
// },60000,entry);
|
||||
|
||||
log.appendChild(entry);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="loadIframe();">
|
||||
<ul></ul>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
133
examples/webhid.html
Normal file
133
examples/webhid.html
Normal file
@@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>WebHID Demo</title>
|
||||
<style>
|
||||
body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.button {
|
||||
background-color: black;
|
||||
border: none;
|
||||
color: #00FF00;
|
||||
padding: 15px 32px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
display: inline-block;
|
||||
margin: 4px 2px;
|
||||
cursor: pointer;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
#connected {
|
||||
font-size: 24px;
|
||||
max-height:700px;
|
||||
overflow-y:scroll
|
||||
}
|
||||
#disconnectButton {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>STREAMDECK DEMO</h1>
|
||||
<img src="./media/streamdeck.png" /><br />
|
||||
<input class="button" type="button" id="connectButton" value="Connect" />
|
||||
<input class="button" type="button" id="disconnectButton" style="display:none" value="Disconnect" />
|
||||
<div id="connected" style>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const connectButton = document.getElementById("connectButton");
|
||||
const disconnectButton = document.getElementById("disconnectButton");
|
||||
const connect = document.getElementById("connect");
|
||||
const deviceButtonPressed = document.getElementById("deviceButtonPressed");
|
||||
var lastState = false;
|
||||
//productId: 0x0060,
|
||||
//class: models_1.StreamDeckOriginal,
|
||||
|
||||
//productId: 0x0063,
|
||||
//class: models_1.StreamDeckMini,
|
||||
|
||||
//productId: 0x006c,
|
||||
//class: models_1.StreamDeckXL,
|
||||
|
||||
//productId: 0x006d,
|
||||
//class: models_1.StreamDeckOriginalV2,
|
||||
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
let devices = await navigator.hid.getDevices();
|
||||
devices.forEach(device => {
|
||||
console.log(`HID: ${device.productName}`);
|
||||
});
|
||||
});
|
||||
|
||||
function handleInputReport(e) {
|
||||
console.log(e.device.productName + ": got input report " + e.reportId);
|
||||
console.log(new Uint8Array(e.data.buffer));
|
||||
var data = new Uint8Array(e.data.buffer);
|
||||
if (lastState!==false){
|
||||
for (var i=0;i<data.length;i++){
|
||||
|
||||
if (parseInt(data[i])!=data[i]){continue;}
|
||||
if (lastState[i]!==data[i]){
|
||||
if (data[i]){
|
||||
document.getElementById("connected").innerHTML = "<br />Button "+(i+1)+" Pressed"+document.getElementById("connected").innerHTML;
|
||||
} else {
|
||||
document.getElementById("connected").innerHTML = "<br />Button "+(i+1)+" Released"+document.getElementById("connected").innerHTML;
|
||||
}
|
||||
} else {
|
||||
if (data[i]){
|
||||
document.getElementById("connected").innerHTML = "<br />Button "+(i+1)+" Pressed"+document.getElementById("connected").innerHTML;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
lastState = data;
|
||||
}
|
||||
|
||||
let device;
|
||||
|
||||
connectButton.onclick = async () => {
|
||||
navigator.hid.requestDevice({
|
||||
filters: [{ vendorId: 0x0fd9}] // elgato?
|
||||
}).then((devices)=>{
|
||||
console.log(devices);
|
||||
|
||||
device = devices[0];
|
||||
|
||||
console.log(`HID connected: ${device.productName}`);
|
||||
document.getElementById("connected").innerHTML = "<br />Connected" +document.getElementById("connected").innerHTML;
|
||||
document.getElementById("disconnectButton").style.display = "inline-block";
|
||||
device.addEventListener("inputreport", handleInputReport);
|
||||
|
||||
//device.sendReport(outputReportId, outputReport).then(() => {
|
||||
// console.log("Sent output report " + outputReportId);
|
||||
//});
|
||||
|
||||
if (!device.opened){
|
||||
device.open().then(()=>{
|
||||
window.addEventListener("onbeforeunload", async () => {
|
||||
await device.close();
|
||||
});
|
||||
}).catch(function(err){console.error(err);});
|
||||
}
|
||||
}).catch(function(err){console.error(err);});
|
||||
|
||||
};
|
||||
|
||||
disconnectButton.onclick = async () => {
|
||||
await device.close();
|
||||
|
||||
//connected.style.display = "none";
|
||||
//connectButton.style.display = "initial";
|
||||
disconnectButton.style.display = "none";
|
||||
};
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
182
examples/zoom.html
Normal file
182
examples/zoom.html
Normal file
@@ -0,0 +1,182 @@
|
||||
|
||||
<html>
|
||||
<head><style>
|
||||
span{margin:10px 0 0 0;display:block;}
|
||||
body {
|
||||
|
||||
background-color:#cdf;
|
||||
padding:0;
|
||||
width;100%;height:100%
|
||||
}
|
||||
|
||||
input{padding:5px;}
|
||||
|
||||
button {margin:10px 3px;}
|
||||
|
||||
#stream{
|
||||
display:block;
|
||||
}
|
||||
|
||||
</style></head>
|
||||
<body id="main" style="margin:5%;"
|
||||
<meta charset="utf-8"/>
|
||||
|
||||
<video id="video" autoplay="true" muted="true" playsinline style='height:420px;background-color:black;display:block;margin:0 0 10px 0;'></video>
|
||||
<div id="devices">
|
||||
<div class="select">
|
||||
<label for="videoSource">Video source: </label><select id="videoSource"></select>
|
||||
</div>
|
||||
<div class="select">
|
||||
<label for="audioSource">Audio source: </label><select id="audioSource"></select>
|
||||
</div>
|
||||
</div>
|
||||
<button onclick="fullwindow()">FULL WINDOW</button>
|
||||
<script>
|
||||
window.onerror = function backupErr(errorMsg, url=false, lineNumber=false) {
|
||||
console.error(errorMsg);
|
||||
console.error(lineNumber);
|
||||
console.error("Unhandeled Error occured"); //or any message
|
||||
return false;
|
||||
};
|
||||
|
||||
function fullwindow(){
|
||||
videoElement.style.width="100%";
|
||||
videoElement.style.padding= "0";
|
||||
videoElement.style.margin="0";
|
||||
videoElement.style.height="100%";
|
||||
videoElement.style.zIndex="5";
|
||||
videoElement.style.position = "absolute";
|
||||
videoElement.style.top="0px";
|
||||
videoElement.style.left="0px";
|
||||
document.getElementById("main").style.overflow = "hidden";
|
||||
videoElement.style.overflow = "hidden"
|
||||
document.getElementById("main").style.backgroundColor="#000";
|
||||
videoElement.style.cursor="none";
|
||||
document.getElementById("main").style.cursor="none";
|
||||
}
|
||||
|
||||
var videoElement = document.getElementById("video");
|
||||
var gotDev = false;
|
||||
async function gotDevices() {
|
||||
if (gotDev){return;}
|
||||
gotDev=true;
|
||||
await navigator.mediaDevices.getUserMedia({audio:true, video:true}); // is needed to ask for permissinos.
|
||||
navigator.mediaDevices.enumerateDevices().then((deviceInfos)=>{
|
||||
for (let i = 0; i !== deviceInfos.length; ++i) {
|
||||
var deviceInfo = deviceInfos[i];
|
||||
var option = document.createElement("option");
|
||||
option.value = deviceInfo.deviceId;
|
||||
|
||||
if (deviceInfo.kind === "audioinput") {
|
||||
option.text = deviceInfo.label || "microphone " + (audioSelect.length + 1);
|
||||
audioSelect.appendChild(option);
|
||||
if (option.text.startsWith("CABLE")){
|
||||
option.selected =true;
|
||||
}
|
||||
} else if (deviceInfo.kind === "videoinput") {
|
||||
option.text = deviceInfo.label || "camera " + (videoSelect.length + 1);
|
||||
if (option.text.startsWith("NewTek")){
|
||||
continue;
|
||||
}
|
||||
videoSelect.appendChild(option);
|
||||
if (option.text.startsWith("OBS")){
|
||||
option.selected =true;
|
||||
}
|
||||
}
|
||||
}
|
||||
getStream();
|
||||
});
|
||||
}
|
||||
|
||||
function getStream() {
|
||||
if (window.stream) {
|
||||
window.stream.getTracks().forEach(function (track) {
|
||||
track.stop();
|
||||
log("TRack stopping");
|
||||
});
|
||||
}
|
||||
|
||||
const constraints = {
|
||||
audio: {
|
||||
deviceId: { exact: audioSelect.value },
|
||||
echoCancellation : false,
|
||||
autoGainControl : false,
|
||||
noiseSuppression : false
|
||||
},
|
||||
video: {
|
||||
deviceId: { exact: videoSelect.value },
|
||||
width: { min: 1280, ideal: 1920, max: 1920 },
|
||||
height: { min: 720, ideal: 1080, max: 1080 }
|
||||
}
|
||||
};
|
||||
return navigator.mediaDevices.getUserMedia(constraints)
|
||||
.then(gotStream)
|
||||
.catch(console.error);
|
||||
}
|
||||
|
||||
|
||||
function gotStream(stream) {
|
||||
if (window.stream) {
|
||||
window.stream = stream; // make stream available to console
|
||||
videoElement.srcObject = stream;
|
||||
var senders = session.pc.getSenders();
|
||||
videoElement.srcObject.getVideoTracks().forEach((track)=>{
|
||||
var added = false;
|
||||
senders.forEach((sender) => { // I suppose there could be a race condition between negotiating and updating this. if joining at the same time as changnig streams?
|
||||
if (sender.track) {
|
||||
if (sender.track && sender.track.kind == "video") {
|
||||
sender.replaceTrack(track); // replace may not be supported by all browsers. eek.
|
||||
track.enabled = notCensored;
|
||||
added = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (added==false){
|
||||
session.pc.addTrack(track);
|
||||
log("ADDED NOT REPLACED?");
|
||||
}
|
||||
});
|
||||
|
||||
videoElement.srcObject.getAudioTracks().forEach((track)=>{
|
||||
var added = false;
|
||||
senders.forEach((sender) => { // I suppose there could be a race condition between negotiating and updating this. if joining at the same time as changnig streams?
|
||||
if (sender.track) {
|
||||
if (sender.track && sender.track.kind == "audio") {
|
||||
sender.replaceTrack(track); // replace may not be supported by all browsers. eek.
|
||||
track.enabled = notCensored;
|
||||
added = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (added==false){
|
||||
session.pc.addTrack(track);
|
||||
log("ADDED NOT REPLACED?");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
window.stream = stream; // make stream available to console
|
||||
videoElement.srcObject = stream;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var audioSelect = document.querySelector("select#audioSource");
|
||||
var videoSelect = document.querySelector("select#videoSource");
|
||||
audioSelect.onchange = getStream;
|
||||
videoSelect.onchange = getStream;
|
||||
gotDevices();
|
||||
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
149
index.html
149
index.html
@@ -17,7 +17,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
|
||||
<meta content="utf-8" http-equiv="encoding" />
|
||||
<meta name="copyright" content="© 2020 Steve Seguin" />
|
||||
<meta name="copyright" content="© 2021 Steve Seguin" />
|
||||
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon" />
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="./media/favicon-32x32.png" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="./media/favicon-16x16.png" />
|
||||
@@ -55,8 +55,9 @@
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="./lineawesome/css/line-awesome.min.css" />
|
||||
<link rel="stylesheet" href="./main.css?ver=63" />
|
||||
<link rel="stylesheet" href="./main.css?ver=69" />
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./thirdparty/adapter.min.js"></script>
|
||||
<style id="lightbox-animations" type="text/css"></style>
|
||||
</head>
|
||||
<body id="main" class="hidden">
|
||||
<span itemprop="image" itemscope itemtype="image/png">
|
||||
@@ -67,11 +68,11 @@
|
||||
<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=203"></script>
|
||||
<script type="text/javascript" crossorigin="anonymous" src="./webrtc.js?ver=214"></script>
|
||||
<input id="zoomSlider" type="range" style="display: none;" />
|
||||
<div id="header">
|
||||
|
||||
<a id="logoname" href="./" style="text-decoration: none; color: white; margin: 2px;">
|
||||
<a id="logoname" href="./" style="text-decoration: none; color: white; margin: 0 2px 0px 8px;">
|
||||
<span data-translate="logo-header">
|
||||
<font id="qos">V</font>DO.Ninja
|
||||
</span>
|
||||
@@ -97,7 +98,6 @@
|
||||
</div>
|
||||
<div id="head4" style="display: inline-block;" class="advanced">
|
||||
<font style="font-size: 68%; color: white;">
|
||||
|
||||
<span data-translate="you-are-in-the-control-center">Control center for room:</span>
|
||||
|
||||
<div id="dirroomid" style="font-size: 140%; color: #99c; display: inline-block;"></div>
|
||||
@@ -107,11 +107,12 @@
|
||||
<span data-translate="joining-room">You are in room</span>:
|
||||
<div id="roomid" style="display: inline-block;"></div>
|
||||
</div>
|
||||
<div id="head6" class="advanced" data-translate="only-director-can-hear-you">Only the director can hear you currently.</div>
|
||||
<div id="head7" class="advanced" data-translate="director-muted-you">The director has muted you.</div>
|
||||
|
||||
</div>
|
||||
<div id="controlButtons" >
|
||||
<div id="obsState" class="advanced" style="border:green solid 2px;padding:10px;margin:10px;color: white; z-index:2; background-color: #222D;display: block;top: 0;position: fixed;">ACTIVE</div>
|
||||
|
||||
<div id="obsState" class="advanced" >ACTIVE</div>
|
||||
<div id="subControlButtons">
|
||||
<div id="queuebutton" title="Load the next guest in queue" alt="Load the next guest in queue" onmousedown="event.preventDefault(); event.stopPropagation();" onclick="session.nextQueue()" tabindex="16" role="button" aria-pressed="false" onkeyup="enterPressedClick(event,this);" class="advanced float" style="cursor: pointer;" >
|
||||
<i id="queuetoggle" class="toggleSize las la-stream my-float"></i>
|
||||
@@ -140,6 +141,10 @@
|
||||
<i id="websitesharetoggle" onmousedown="event.preventDefault(); event.stopPropagation();" class="toggleSize las la-window-maximize my-float"></i>
|
||||
</div>
|
||||
|
||||
<div id="flipcamerabutton" onmousedown="event.preventDefault(); event.stopPropagation();" title="Cycle the Cameras" onclick="cycleCameras()" class="advanced float" tabindex="21" role="button" aria-pressed="false" onkeyup="enterPressedClick(event,this);" style="cursor: pointer;" alt="Cycle the Cameras">
|
||||
<i id="settingstoggle" class="toggleSize las la-sync-alt my-float"></i>
|
||||
</div>
|
||||
|
||||
<div id="roomsettingsbutton" onmousedown="event.preventDefault(); event.stopPropagation();" title="Room Settings" onclick="toggleRoomSettings();" class="advanced float" tabindex="22" role="button" aria-pressed="false" onkeyup="enterPressedClick(event,this);" style="cursor: pointer;" alt="Toggle the Room Settings Menu">
|
||||
<i id="roomsettingstoggle" class="toggleSize las la-users-cog my-float"></i>
|
||||
</div>
|
||||
@@ -170,14 +175,14 @@
|
||||
id="reportbutton"
|
||||
title="Submit any error logs"
|
||||
onclick="submitDebugLog();"
|
||||
style="cursor: pointer; visibility: hidden; display:none;z-index:7;"
|
||||
style="cursor: pointer; visibility: hidden; display:none;z-index:3;"
|
||||
>
|
||||
<i style="float: right; bottom: 0px; cursor: pointer; position: fixed; right: 55px; color: #d9e4eb; padding: 2px; margin: 2px 2px 0 0; font-size: 140%;" class="las la-bug" aria-hidden="true"></i>
|
||||
</span>
|
||||
<span
|
||||
id="helpbutton"
|
||||
title="Show Help Info"
|
||||
onclick="warnUser('For support, please browse https://reddit.com/r/obsninja or join the live chat on Discord at https://discord.obs.ninja.\n\nThe Docs also contains many help guides and advanced settings, located at https://docs.vdo.ninja.\n\nTo access the video stats menu, hold CTRL (command) and Left-Click on a video. Most video issues can be fixed by using Wired Internet instead of Wi-Fi.')"
|
||||
onclick="warnUser('For support, please browse https://reddit.com/r/vdoninja or join the live chat on Discord at https://discord.vdo.ninja.\n\nThe Docs also contains many help guides and advanced settings, located at https://docs.vdo.ninja.\n\nTo access the video stats menu, hold CTRL (command) and Left-Click on a video. Most video issues can be fixed by using Wired Internet instead of Wi-Fi.')"
|
||||
style="cursor: pointer; display:none;"
|
||||
alt="How to Use This with OBS"
|
||||
>
|
||||
@@ -281,7 +286,7 @@
|
||||
<li>Disabling video sharing between guests will improve performance</li>
|
||||
<li>Invite only guests to the room that you trust.</li>
|
||||
<li>The "Recording" option is considered experimental.</li>
|
||||
<li><a href="https://params.obs.ninja" style="color:black;"><u>Advanced URL parameters</u></a> are available to customize rooms.</li>
|
||||
<li><a href="https://params.vdo.ninja" style="color:black;"><u>Advanced URL parameters</u></a> are available to customize rooms.</li>
|
||||
</span>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -306,7 +311,7 @@
|
||||
<button onclick="this.disabled=true;setTimeout(function(){requestBasicPermissions();},20);" id="getPermissions" style="display:none;" data-ready="false" >
|
||||
<span data-translate="ask-for-permissions">Allow Access to Camera/Microphone</span>
|
||||
</button>
|
||||
<button onclick="publishWebcam(this)" title="start streaming" tabindex="15" id="gowebcam" class="gowebcam" alt="Start Streaming" disabled data-ready="false" >
|
||||
<button onclick="publishWebcam(this)" title="start streaming" tabindex="15" id="gowebcam" class="gowebcam" alt="Start Streaming" disabled data-audioready="false" data-ready="false" >
|
||||
<span data-translate="waiting-for-camera">Waiting for Camera to Load</span>
|
||||
</button>
|
||||
<br />
|
||||
@@ -495,6 +500,8 @@
|
||||
</option>
|
||||
</select>
|
||||
</span>
|
||||
<br />
|
||||
<span data-translate="application-audio-capture">For application-specific audio capture, <a href='https://docs.vdo.ninja/audio' style='color: #007AC8;'>see here</a></span>
|
||||
</div>
|
||||
<div class="outer close">
|
||||
<div class="inner">
|
||||
@@ -605,7 +612,7 @@
|
||||
</div>
|
||||
<div>See the
|
||||
<a style="text-decoration: none; color: blue;" target="_blank" href="https://docs.vdo.ninja/advanced-settings">documentation</a> for more options and info.<br /><br />
|
||||
Try out the advanced <a style="text-decoration: none; color: blue;" target="_blank" href="https://invite.obs.ninja/">invite generator</a> here also.
|
||||
Try out the advanced <a style="text-decoration: none; color: blue;" target="_blank" href="https://invite.vdo.ninja/">invite generator</a> here also.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -638,10 +645,7 @@
|
||||
</div>
|
||||
<div class='info message-card'>
|
||||
<h1>File Sharing seems to be broken on Chrome v88.</h1>
|
||||
<p>Using The Electron Capture app instead of Chrome should work:
|
||||
<a href="https://github.com/steveseguin/electroncapture/releases/latest">GET IT HERE</a>
|
||||
<br />
|
||||
You can also <a href="https://github.com/aws/amazon-chime-sdk-js/issues/1031">turn off hardware-accleration</a> in Chrome/Edge to fix the issue.</p>
|
||||
<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>
|
||||
</div>
|
||||
|
||||
@@ -687,7 +691,7 @@
|
||||
<i style="margin-top:30px;font-size:600%;overflow:hidden;" class="las la-tachometer-alt"></i>
|
||||
</div>
|
||||
|
||||
<div id="container-8" class="column columnfade pointer card advanced" style="overflow: hidden;" onclick="window.location = 'https://guides.obs.ninja';">
|
||||
<div id="container-8" class="column columnfade pointer card advanced" style="overflow: hidden;" onclick="window.location = 'https://guides.vdo.ninja';">
|
||||
<h2><span data-translate="read-the-guides">Browse the Guides</span></h2>
|
||||
<i style="margin-top:30px;font-size:600%;overflow:hidden;" class="las la-book-open"></i>
|
||||
</div>
|
||||
@@ -714,22 +718,25 @@
|
||||
</i>
|
||||
<br />
|
||||
<li>
|
||||
If you have <a href="https://docs.vdo.ninja/common-errors-and-known-issues/video-is-pixelated">"pixel smearing"</a> or corrupted video, try adding <i>&codec=h264</i> or <i>&codec=vp9</i> to the OBS view link. Using Wi-Fi will make the issue worse.
|
||||
Some devices that use H264 hardware encoding can experience video glitching; switching to VP8 or VP9 as a codec can help.
|
||||
</li>
|
||||
<li>
|
||||
If 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.
|
||||
</li>
|
||||
<li>
|
||||
A 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>.
|
||||
</li>
|
||||
<br />
|
||||
<h4 style="color:#daad09;">
|
||||
👋 👀 Welcome to our new domain! We've started to rebrand to VDO.Ninja. 📼 Nothing else is changing and we're staying 100% free.
|
||||
👋 👀 Welcome to VDO Ninja! We've rebranded! 📼 Nothing else is changing and we're staying 100% free.
|
||||
</h4>
|
||||
<br />
|
||||
🌻 Site Updated on June 6th. The new <a href="https://docs.vdo.ninja/release-notes/v18">v18 release notes are here</a>. If new issues occur, the previous version can also be <a href="https://obs.ninja/v17/">found here</a>.
|
||||
🌻 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>.
|
||||
|
||||
<br />
|
||||
<br />
|
||||
<h3>
|
||||
🛠 For support, see the <a href="https://www.reddit.com/r/OBSNinja/">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>
|
||||
🛠 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>
|
||||
</h3>
|
||||
|
||||
</span>
|
||||
@@ -877,6 +884,7 @@
|
||||
</label>
|
||||
<span data-translate="show-active-speaker">Show active speakers</span>
|
||||
|
||||
|
||||
</div>
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; margin-right:10px;">
|
||||
<label class="switch" title="Request 1080p60 from the Guest instead of 720p60, if possible">
|
||||
@@ -917,6 +925,14 @@
|
||||
</label>
|
||||
<font class="tooltip" style='cursor: help;position:relative;bottom:2px;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;'>⚠<span class="tooltiptext">Uses more CPU and freezes the video if the guest doesn't keep the tab visible.</span></font> <span data-translate="virtual-backgrounds">Virtual backgrounds</span>
|
||||
|
||||
<br />
|
||||
|
||||
<label class="switch" title="Videos use an animated transition when being remixed">
|
||||
<input type="checkbox" data-param="&animate" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="animate-mixing">Animate mixing</span>
|
||||
|
||||
</div>
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; margin-right:10px;">
|
||||
<label class="switch" title="Increase video quality that guests in room see.">
|
||||
@@ -949,12 +965,17 @@
|
||||
</label>
|
||||
<span data-translate="enable-equalizer">Enable equalizer as option</span>
|
||||
<br />
|
||||
<label class="switch">
|
||||
<label class="switch" title="Show some prep suggestions to the guests on connect">
|
||||
<input type="checkbox" data-param="&tips" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="show-guest-tips" title="Show some prep suggestions to the guests on connect">Show guest setup tips</span>
|
||||
|
||||
<span data-translate="show-guest-tips">Show guest setup tips</span>
|
||||
<br />
|
||||
<label class="switch" title="Have screen-shares stream ID's use a predictable prefixed value instead of a random one.">
|
||||
<input type="checkbox" data-param="&ssid" onchange="updateLink(1,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="prefix-screenshare">Prefix screenshare IDs</span>
|
||||
</div>
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; height: 20px;">
|
||||
<label class="switch" title="This low-fi video codec uses very little CPU, even with dozens of active viewers.">
|
||||
@@ -1020,6 +1041,7 @@
|
||||
</label><font class="tooltip" style='cursor: help;position:relative;bottom:2px;font-family:"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;'>💉<span class="tooltiptext" style="width: 10em; background-color: #77C"><span data-translate="this-can-reduce-packet-loss">Can reduce packet loss video corruption in OBS on PC</span></span></font>
|
||||
<span data-translate="use-h264-codec">Use H264 codec</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div style="display:inline-block;margin-top: 12px; position: relative; margin-right:10px; height: 20px;">
|
||||
@@ -1045,6 +1067,14 @@
|
||||
</label>
|
||||
<span data-translate="fade-videos-in">Fade-in videos</span>
|
||||
|
||||
<br />
|
||||
|
||||
<label class="switch" title="Videos use an animated transition when being remixed">
|
||||
<input type="checkbox" data-param="&animate" onchange="updateLink(3,this);">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
<span data-translate="animate-mixing">Animate mixing</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1090,8 +1120,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="https://params.obs.ninja" style="color:#888;" target="_blank" >
|
||||
<div style="display: block;float:right;font-size:70%;z-index:30;bottom:6px;right:10px;position:relative;color:#888;" ><span data-translate="learn-more-about-params">Learn more about URL parameters at </span><font style="text-decoration: underline;">params.obs.ninja</font>
|
||||
<a href="https://params.vdo.ninja" style="color:#888;" target="_blank" >
|
||||
<div style="display: block;float:right;font-size:70%;z-index:30;bottom:6px;right:10px;position:relative;color:#888;" ><span data-translate="learn-more-about-params">Learn more about URL parameters at </span><font style="text-decoration: underline;">params.vdo.ninja</font>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -1124,10 +1154,10 @@
|
||||
<span data-translate="disconnect-guest" >Hangup</span>
|
||||
</button>
|
||||
|
||||
<button data-action-type="solo-chat" title="Toggle Solo Voice Chat" onclick="session.toggleSoloChat(this.dataset.UUID);">
|
||||
<button data-action-type="solo-chat" title="Toggle solo voice chat or hold CTRL/CMD when selecting to make it two-way private." onclick="session.toggleSoloChat(this.dataset.UUID, event);">
|
||||
<span data-translate="voice-chat"><i class="las la-microphone" style="color:#090"></i> Solo Talk</span>
|
||||
</button>
|
||||
|
||||
|
||||
<button data-action-type="addToScene" data-scene="1" title="Add this Video to any remote '&scene=1'" onclick="directEnable(this, event, 1);">
|
||||
<i class="las la-plus-square" style="color:#060"></i>
|
||||
<span data-translate="add-to-scene">add to scene 1</span>
|
||||
@@ -1340,8 +1370,8 @@
|
||||
|
||||
<button data-action-type="recorder-local" title="Start Recording this remote stream to this local drive. *experimental*'" onclick="recordLocalVideoToggle();">
|
||||
<i class="las la-circle"></i>
|
||||
<span data-translate="record-local"> Record</span>
|
||||
</button>
|
||||
<span data-translate="record-director-local"> Record</span>
|
||||
</button>
|
||||
|
||||
<span>
|
||||
<button style="width:34px;" data-action-type="order-down" title="Shift this Video Down in Order" onclick="changeOrderDirector(-1);">
|
||||
@@ -1494,8 +1524,9 @@
|
||||
<span class='modalClose' onclick="toggleRoomSettings();">×</span>
|
||||
<span></span>
|
||||
<h3>Change room settings</h3><br />
|
||||
<label title="Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded." for="trbSettingInput">Change room video quality:</label><span style="margin-left: 6px;" id="trbSettingInputFeedback"></span>-kbps
|
||||
<input id="trbSettingInput" type="range" min="0" max="2000" value="500" onchange="changeTRB(this);" oninput="getById('trbSettingInputFeedback').innerHTML = this.value;" style="width:400px;display:block;" />
|
||||
<label title="Increase this at your peril. Changes the total inbound video bitrate per guest; mobile devices excluded. Webp-mode also excluded." for="trbSettingInput">Change room video quality:</label>
|
||||
<span style="margin-left: 6px;" id="trbSettingInputFeedback"></span>-kbps
|
||||
<input id="trbSettingInput" type="range" min="0" max="4000" value="500" onchange="changeTRB(this);" oninput="getById('trbSettingInputFeedback').innerHTML = this.value;" style="width:100%;display:block;" />
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1610,11 +1641,12 @@
|
||||
<li><a onclick="changeLg('nl');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Amsterdam">Dutch</a></li>
|
||||
<li><a onclick="changeLg('tr');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Istanbul">Turkish</a></li>
|
||||
<li><a onclick="changeLg('ja');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Asia/Tokyo">Japanese</a></li>
|
||||
<li><a onclick="changeLg('cs');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Prague">Czech </a></li>
|
||||
<li><a onclick="changeLg('cs');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Prague">Czech</a></li>
|
||||
<li><a onclick="changeLg('uk');toggle(document.getElementById('languages'));" style="cursor: pointer;" data-tz="Europe/Ukraine">Ukrainian</a></li>
|
||||
<li><a onclick="changeLg('pig');toggle(document.getElementById('languages'));" style="cursor: pointer;">Pig Latin</a></li>
|
||||
</ul>
|
||||
<br />
|
||||
<a href="https://github.com/steveseguin/obsninja/tree/master/translations" target="_blank" rel="noopener noreferrer" data-translate='add-more-here'>Add More Here!</a>
|
||||
<a href="https://github.com/steveseguin/vdoninja/tree/master/translations" target="_blank" rel="noopener noreferrer" data-translate='add-more-here'>Add More Here!</a>
|
||||
<br />
|
||||
</div>
|
||||
<div id="calendar" class="popup-message" style="display: none; right: 0; padding-left:5px; bottom: 25px; position: absolute;">
|
||||
@@ -1640,7 +1672,7 @@
|
||||
}
|
||||
|
||||
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
|
||||
session.version = "18.2";
|
||||
session.version = "18.3";
|
||||
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
|
||||
@@ -1676,11 +1708,11 @@
|
||||
|
||||
/// If wanting to fully-self-host, uncomment the following and deploy your own websocket server; good for air-gapped deployments
|
||||
// session.wss = "wss://wss.contribute.cam:443"; // https://github.com/steveseguin/websocket_server
|
||||
// session.pie=true;
|
||||
// session.customWSS = true;
|
||||
//////
|
||||
|
||||
/////// Or you can use piesocket.com if you wish to have a basic free websocket server hosted for you by a third-party
|
||||
//session.pie = true; // Set to true to have Piesocket.com
|
||||
//session.customWSS = true; // Set to true to have Piesocket.com
|
||||
//var apiKey = "ZCu96UFf9ezeQeClK7BOCkq6Q0x0lxWAPJcgxjz5"; // GET YOUR OWN API KEY at piesocket.com, as using this one is a privacy hazard.
|
||||
//session.wss = "wss://us-nyc-1.websocket.me/v3/1?api_key="+apiKey;
|
||||
////////////
|
||||
@@ -1716,49 +1748,12 @@
|
||||
// session.scene
|
||||
// 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>
|
||||
<!--
|
||||
// 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="mixer-js" src="./mixer.js?ver=2"></script>
|
||||
-->
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=226"></script>
|
||||
<script type="text/javascript">
|
||||
setTimeout(function(){ // lazy load
|
||||
var script = document.createElement('script');
|
||||
document.head.appendChild(script);
|
||||
script.onload = function() {
|
||||
var script = document.createElement('script');
|
||||
document.head.appendChild(script);
|
||||
script.src = "./thirdparty/StreamSaver.js"; // dynamically load this only if its needed. Keeps loading time down.
|
||||
};
|
||||
script.src = "./thirdparty/polyfill.min.js"; // dynamically load this only if its needed. Keeps loading time down.
|
||||
setTimeout(function(){
|
||||
var script = document.createElement('script');
|
||||
document.head.appendChild(script);
|
||||
script.src = "./thirdparty/aes.js"; // not really needed right away.
|
||||
},500);
|
||||
},0);
|
||||
|
||||
var languages = getById('languagesList').querySelectorAll('li a');
|
||||
var timezones = [];
|
||||
|
||||
languages.forEach(language => {
|
||||
if (language.dataset.tz) {
|
||||
var languageTimezones = language.dataset.tz.split(';'); // each link can have multiple timezones separated by ;
|
||||
languageTimezones.forEach(element => {
|
||||
timezones.push(element);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
var currentTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
|
||||
if (timezones.includes(currentTimezone)) {
|
||||
var el = getById('languagesList').querySelector("li a[data-tz*='" + currentTimezone +"']"); // select language li
|
||||
el.parentElement.removeChild(el); // remove it
|
||||
getById('languagesList').insertBefore(el, getById('languagesList').querySelector('li:nth-child(2)')); // insert it after English
|
||||
}
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" crossorigin="anonymous" id="main-js" src="./main.js?ver=239"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -64,18 +64,12 @@ An example NGINX config file that "hides" the file extensions is as follows. Up
|
||||
root /var/www/html/vdo.ninja;
|
||||
try_files /$1/$2 /$1/$2.html /$1/$2/ /$2 /$2/ /$1/index.html;
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
add_header 'cross-origin-resource-policy' '*';
|
||||
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
|
||||
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
|
||||
}
|
||||
|
||||
location / {
|
||||
if ($request_uri ~ ^/(.*)\.html$) {
|
||||
return 302 /$1;
|
||||
}
|
||||
add_header 'cross-origin-resource-policy' '*';
|
||||
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
|
||||
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
|
||||
try_files $uri $uri.html $uri/ /index.html;
|
||||
add_header Access-Control-Allow-Origin *;
|
||||
}
|
||||
|
||||
193
main.css
193
main.css
@@ -159,6 +159,15 @@ button.grey {
|
||||
background-color: #840000 !important;
|
||||
}
|
||||
|
||||
.red2 {
|
||||
background-color: #840000 !important;
|
||||
}
|
||||
|
||||
|
||||
.orange {
|
||||
background-color: #673100 !important;
|
||||
}
|
||||
|
||||
button.red {
|
||||
-webkit-app-region: no-drag;
|
||||
padding: 10px;
|
||||
@@ -217,6 +226,25 @@ button.white:active {
|
||||
pointer-events: none;
|
||||
float: right;
|
||||
}
|
||||
#head6 {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
text-align: left;
|
||||
margin-left: 10px;
|
||||
pointer-events: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
#head7 {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
text-align: left;
|
||||
margin-left: 10px;
|
||||
pointer-events: none;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
#overlayMsgs{
|
||||
margin:0 auto;
|
||||
@@ -232,7 +260,6 @@ button.white:active {
|
||||
z-index: 7;
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
position: fixed;
|
||||
overflow-wrap: anywhere;
|
||||
padding:2% 3%;
|
||||
@@ -315,6 +342,15 @@ button.white:active {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.altpress {
|
||||
background: #673100 !important;
|
||||
-webkit-box-shadow: inset 0px 0px 1px #b90000;
|
||||
-moz-box-shadow: inset 0px 0px 1px #b90000;
|
||||
box-shadow: inset 0px 0px 1px #b90000;
|
||||
outline: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.row {
|
||||
align-content: center;
|
||||
text-align: center;
|
||||
@@ -483,6 +519,7 @@ button.glyphicon-button.active.focus {
|
||||
-webkit-tap-highlight-color: transparent !important;
|
||||
outline: 0px !important;
|
||||
height:100%;
|
||||
animation: fading 0.2s;
|
||||
}
|
||||
|
||||
#controlButtons {
|
||||
@@ -526,25 +563,60 @@ button.glyphicon-button.active.focus {
|
||||
}
|
||||
}
|
||||
|
||||
#obsState {
|
||||
border:green solid 2px;
|
||||
padding:2px 5px;
|
||||
color: white;
|
||||
z-index:2;
|
||||
background-color: #222D;
|
||||
display: block;
|
||||
top: 0;
|
||||
position: fixed;
|
||||
opacity: 0.7;
|
||||
transform: scale(0.7);
|
||||
}
|
||||
@media only screen and (max-width: 620px){
|
||||
#obsState {
|
||||
top: 10px !important;
|
||||
transform: scale(0.9);
|
||||
top:20px;
|
||||
transform: scale(0.63);
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width: 400px){
|
||||
#obsState {
|
||||
top: 20px !important;
|
||||
transform: scale(0.8);
|
||||
top:30px;
|
||||
transform: scale(0.56);
|
||||
display:none!important;
|
||||
opacity:0;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width: 300px){
|
||||
#obsState {
|
||||
top: 30px !important;
|
||||
transform: scale(0.7);
|
||||
display:none!important;
|
||||
opacity:0;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-height: 400px){
|
||||
#obsState {
|
||||
transform: scale(0.5);
|
||||
display:none!important;
|
||||
opacity:0;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-height: 300px){
|
||||
#obsState {
|
||||
transform: scale(0.4);
|
||||
display:none!important;
|
||||
opacity:0;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-height: 200px){
|
||||
#obsState {
|
||||
transform: scale(0.3);
|
||||
display:none!important;
|
||||
opacity:0;
|
||||
}
|
||||
}
|
||||
obsState
|
||||
|
||||
/* Node selector to prioritise this selector above .float */
|
||||
button.btnArmTransferRoom{
|
||||
@@ -1366,7 +1438,7 @@ img {
|
||||
}
|
||||
.float2 {
|
||||
opacity: 0.8;
|
||||
width: 45px;
|
||||
min-width: 45px;
|
||||
height: 45px;
|
||||
background-color: #8888;
|
||||
color: #FFF;
|
||||
@@ -1386,25 +1458,40 @@ img {
|
||||
.myVideo {
|
||||
box-shadow: rgb(88, 88, 88) 0px 0px 5px 1px;
|
||||
max-width: 800px !important;
|
||||
max-width: min(800px,100vw) !important;
|
||||
max-height: 100% !important;
|
||||
height: auto !important;
|
||||
display: block !important;
|
||||
margin: auto auto !important;
|
||||
position: relative !important;
|
||||
top: 50% !important;
|
||||
background-color: #FFF1 !important;
|
||||
}
|
||||
#calendarButton {
|
||||
cursor: pointer;
|
||||
z-index: 6;
|
||||
z-index: 1;
|
||||
display:none;
|
||||
}
|
||||
#translateButton {
|
||||
cursor: pointer;
|
||||
z-index: 6;
|
||||
z-index: 1;
|
||||
}
|
||||
#helpButton {
|
||||
cursor: pointer;
|
||||
z-index: 6;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
iframe {
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 390px) {
|
||||
#translateButton {
|
||||
display:none;
|
||||
}
|
||||
#helpButton {
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
|
||||
.popup .menu { margin: 2px; }
|
||||
@@ -1527,6 +1614,26 @@ img {
|
||||
background-color: #DD1A !important;
|
||||
}
|
||||
|
||||
.flip {
|
||||
animation: flip180 2s;
|
||||
animation-iteration-count: 1;
|
||||
}
|
||||
|
||||
@keyframes flip180 {
|
||||
0% {transform: rotate(0);}
|
||||
100% {transform: rotate(180deg);}
|
||||
}
|
||||
|
||||
.flip2 {
|
||||
animation: flip1802 2s;
|
||||
animation-iteration-count: 1;
|
||||
}
|
||||
|
||||
@keyframes flip1802 {
|
||||
0% {transform: rotate(180deg)}
|
||||
100% {transform: rotate(360deg);}
|
||||
}
|
||||
|
||||
@-webkit-keyframes animatetop {
|
||||
from {
|
||||
top: -300px;
|
||||
@@ -1580,10 +1687,9 @@ img {
|
||||
-moz-animation: fadeIn var(--fadein-speed);
|
||||
-o-animation: fadeIn var(--fadein-speed);
|
||||
-ms-animation: fadeIn var(--fadein-speed);
|
||||
animation-iteration-count: 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@keyframes fadeIn {
|
||||
0% {opacity:0;}
|
||||
100% {opacity:1;}
|
||||
@@ -1667,6 +1773,14 @@ video.clean::-webkit-media-controls-timeline-container {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
audio.fileshare::-webkit-media-controls-overlay-play-button, video.fileshare::-webkit-media-controls-overlay-play-button {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
audio.fileshare::-webkit-media-controls-play-button, video.fileshare::-webkit-media-controls-play-button {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
.mirrorControl::-webkit-media-controls-enclosure {
|
||||
padding: 0px;
|
||||
height: 30px;
|
||||
@@ -2045,6 +2159,7 @@ input[type=checkbox] {
|
||||
align-self: center;
|
||||
width: 400px;
|
||||
max-width: 100%;
|
||||
z-index:3;
|
||||
}
|
||||
#chatInput {
|
||||
color: #000;
|
||||
@@ -2695,12 +2810,12 @@ input:checked + .slider:before {
|
||||
}
|
||||
|
||||
|
||||
#promptModal, #roomSettings {
|
||||
#promptModal, #roomSettings, .promptModal {
|
||||
position: absolute;
|
||||
background-color: rgb(221 221 221);
|
||||
box-shadow: 0 0 30px 10px #0000005c;
|
||||
color: black;
|
||||
font-size: 1.2em;
|
||||
font-size: 1.0em;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
@@ -2713,9 +2828,9 @@ input:checked + .slider:before {
|
||||
}
|
||||
|
||||
.largeTextEntry {
|
||||
width:300px;
|
||||
margin: 0 0 0 55px;
|
||||
font-size: 1em;
|
||||
width: 90%;
|
||||
margin: 10px 5%;
|
||||
font-size: .8em;
|
||||
padding: 0.4em;
|
||||
display: block;
|
||||
|
||||
@@ -2723,6 +2838,14 @@ input:checked + .slider:before {
|
||||
.promptModalInner {
|
||||
position: relative;
|
||||
padding: 1em;
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
.promptModalMessage {
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 98%;
|
||||
margin: 0 5%;
|
||||
}
|
||||
|
||||
#iframe_source{
|
||||
@@ -2733,6 +2856,7 @@ input:checked + .slider:before {
|
||||
}
|
||||
|
||||
#SafariWarning{
|
||||
max-width:100%;
|
||||
display:none;
|
||||
width: 450px;
|
||||
border-left: 4px solid #eff150;
|
||||
@@ -2836,12 +2960,43 @@ input:checked + .slider:before {
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.modalBackdrop {
|
||||
background: var(--background-color);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 0;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.opaqueBackdrop{
|
||||
background: var(--background-color);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 0;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
|
||||
@media only screen and (max-width: 390px) {
|
||||
.alertModal {
|
||||
width: 90%;
|
||||
}
|
||||
}
|
||||
|
||||
.iframeDetails {
|
||||
margin: 10px;
|
||||
position: relative;
|
||||
word-break: break-all;
|
||||
max-height: 500px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.desktop-capturer-selection {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
|
||||
199
speedtest.html
199
speedtest.html
@@ -4,13 +4,84 @@
|
||||
<link rel="stylesheet" href="./speedtest.css?ver=1" />
|
||||
<meta charset="utf8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>OBSN Speed Test</title>
|
||||
<title>VDON Speed Test</title>
|
||||
</head>
|
||||
<body onload="loadIframe();">
|
||||
<h1>
|
||||
VDO.Ninja Speed Test
|
||||
</h1>
|
||||
<div id="container">
|
||||
</div>
|
||||
<div id="graphs">
|
||||
<div class="graph">
|
||||
<h2>Bitrate (kbps)</h2>
|
||||
<span>0</span>
|
||||
<canvas id="bitrate-graph"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="graph">
|
||||
<h2>Buffer delay (ms)</h2>
|
||||
<span>0</span>
|
||||
<canvas id="buffer-graph"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="graph">
|
||||
<h2>Packet Loss (%)</h2>
|
||||
<span>0</span>
|
||||
<canvas id="packetloss-graph"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<div id="log" onclick="copyFunction(this.innerText)">
|
||||
<h2>Log <i class="las la-clipboard"></i></h2>
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
||||
<div id="explanation">
|
||||
<h2>How to use</h2>
|
||||
<ol>
|
||||
<li>Select your camera.</li>
|
||||
<li>Hit start</li>
|
||||
<li>
|
||||
Wait for the video to load side-by-side. *If it does not auto-load
|
||||
within 20s, refresh and try again.*
|
||||
</li>
|
||||
<li>
|
||||
Stats will load on the right-hand side of the page here. (or press
|
||||
CTRL + LeftClick on the new video to open stats that way)
|
||||
</li>
|
||||
<li>
|
||||
Bitrate, Buffer delay, and packet loss are important connection
|
||||
quality metrics
|
||||
</li>
|
||||
<li>
|
||||
Change the video bitrate by pressing the buttons below the video. It
|
||||
should approach 6000-kbps if the network allows.
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
<div id="screen" style="color: #CCC; margin:10px 0;"><a href="./speedtest?screen" style="color: #CCC;">Test screen-sharing performance here</a></div>
|
||||
<div id="remote"></div>
|
||||
<br />
|
||||
Testing location: <select name="turnlist" id="turnlist" onchange="reloadTurn();" title="Select an exact location to test against">
|
||||
<option selected value="">Automatic</option>
|
||||
<option value="de1">Saarbruecken, Germany</option>
|
||||
<option value="fr1">Strasbourg, France</option>
|
||||
<option value="cae1">Montreal, Canada</option>
|
||||
<option value="usc1">Chicago, USA</option>
|
||||
<option value="usw1">Los Angeles, USA</option>
|
||||
<option value="aus1">Sidney, Australia</option>
|
||||
</select>
|
||||
<br /><br /><br />
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
function getChromeVersion() {
|
||||
var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
|
||||
return raw ? parseInt(raw[2], 10) : false;
|
||||
}
|
||||
|
||||
if (!getChromeVersion()){
|
||||
alert("This speedtest is optimized for Chromium-based browsers; graphs will not work for Firefox or Safari browsers.");
|
||||
}
|
||||
@@ -34,9 +105,11 @@
|
||||
};
|
||||
})(window);
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
|
||||
var quality_reason = "";
|
||||
var encoder = "";
|
||||
var Round_Trip_Time_ms = "";
|
||||
|
||||
function copyFunction(copyText) {
|
||||
alert("Log copied to the clipboard.");
|
||||
try {
|
||||
@@ -55,11 +128,40 @@
|
||||
|
||||
}
|
||||
|
||||
|
||||
function printValues(obj) {
|
||||
var out = "";
|
||||
for (var key in obj) {
|
||||
if (typeof obj[key] === "object") {
|
||||
out += "<br />";
|
||||
out += printValues(obj[key]);
|
||||
} else {
|
||||
if (key.startsWith("_")) {
|
||||
} else {
|
||||
out += "<b>" + key + "</b>: " + obj[key] + "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function loadIframe() {
|
||||
function logData(type, data) {
|
||||
var log = document.getElementById("log").getElementsByTagName("ul")[0];
|
||||
var entry = document.createElement('li');
|
||||
entry.textContent =
|
||||
"[" + new Date().toLocaleTimeString() + "] " + type + " : " + data;
|
||||
log.prepend(entry);
|
||||
}
|
||||
|
||||
function reloadTurn(){
|
||||
console.log("Reloading to change TURN servers");
|
||||
loadIframe(document.getElementById("turnlist").value);
|
||||
}
|
||||
|
||||
function loadIframe(zone="") {
|
||||
// this is pretty important if you want to avoid camera permission popup problems. YOu need to load the iFRAME after you load the parent body. A quick solution is like: <body onload=>loadIframe();"> !!!
|
||||
|
||||
document.getElementById("container").innerHTML = "";
|
||||
|
||||
var streamID = "";
|
||||
var possible = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789";
|
||||
for (var i = 0; i < 7; i++) {
|
||||
@@ -72,9 +174,7 @@
|
||||
streamID = urlParams.get("sid");
|
||||
}
|
||||
|
||||
|
||||
|
||||
document.getElementById("remote").innerHTML = "<a style='color:#CCC' href='./monitor?sid="+streamID+"'>Remote Monitoring Link</a><br /><br /><br /><br />";
|
||||
document.getElementById("remote").innerHTML = "<a style='color:#CCC' href='./monitor?sid="+streamID+"'>Remote Monitoring Link</a><br />";
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
var iframeContainer = document.createElement("span");
|
||||
@@ -84,7 +184,7 @@
|
||||
iframe.allowfullscreen ="true";
|
||||
|
||||
//iframe.allow = "autoplay";
|
||||
var srcString = "./?push=" + streamID + "&cleanoutput&privacy&speedtest&"+testType+"&audiodevice=0&fullscreen&transparent&remote";
|
||||
var srcString = "./?push=" + streamID + "&cleanoutput&privacy&"+testType+"&audiodevice=0&fullscreen&transparent&remote&speedtest="+zone;
|
||||
|
||||
if (urlParams.has("turn")) {
|
||||
srcString = srcString + "&turn=" + urlParams.get("turn");
|
||||
@@ -124,7 +224,7 @@
|
||||
var iframeContainer = document.createElement("span");
|
||||
|
||||
iframe.allow = "autoplay";
|
||||
var srcString = "./?view=" + streamID + "&cleanoutput&privacy&noaudio&speedtest&scale=0";
|
||||
var srcString = "./?view=" + streamID + "&cleanoutput&privacy&noaudio&scale=0&speedtest="+zone;
|
||||
|
||||
if (urlParams.has("turn")) {
|
||||
srcString = srcString + "&turn=" + urlParams.get("turn");
|
||||
@@ -289,90 +389,7 @@
|
||||
});
|
||||
}
|
||||
|
||||
function printValues(obj) {
|
||||
var out = "";
|
||||
for (var key in obj) {
|
||||
if (typeof obj[key] === "object") {
|
||||
out += "<br />";
|
||||
out += printValues(obj[key]);
|
||||
} else {
|
||||
if (key.startsWith("_")) {
|
||||
} else {
|
||||
out += "<b>" + key + "</b>: " + obj[key] + "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function logData(type, data) {
|
||||
var log = document.getElementById("log").getElementsByTagName("ul")[0];
|
||||
var entry = document.createElement('li');
|
||||
entry.textContent =
|
||||
"[" + new Date().toLocaleTimeString() + "] " + type + " : " + data;
|
||||
log.prepend(entry);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="loadIframe();">
|
||||
<div id="container">
|
||||
<h1>
|
||||
OBS.Ninja Speed Test
|
||||
</h1>
|
||||
</div>
|
||||
<div id="graphs">
|
||||
<div class="graph">
|
||||
<h2>Bitrate (kbps)</h2>
|
||||
<span>0</span>
|
||||
<canvas id="bitrate-graph"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="graph">
|
||||
<h2>Buffer delay (ms)</h2>
|
||||
<span>0</span>
|
||||
<canvas id="buffer-graph"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="graph">
|
||||
<h2>Packet Loss (%)</h2>
|
||||
<span>0</span>
|
||||
<canvas id="packetloss-graph"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
<div id="log" onclick="copyFunction(this.innerText)">
|
||||
<h2>Log <i class="las la-clipboard"></i></h2>
|
||||
<ul></ul>
|
||||
</div>
|
||||
|
||||
<div id="explanation">
|
||||
<h2>How to use</h2>
|
||||
<ol>
|
||||
<li>Select your camera.</li>
|
||||
<li>Hit start</li>
|
||||
<li>
|
||||
Wait for the video to load side-by-side. *If it does not auto-load
|
||||
within 20s, refresh and try again.*
|
||||
</li>
|
||||
<li>
|
||||
Stats will load on the right-hand side of the page here. (or press
|
||||
CTRL + LeftClick on the new video to open stats that way)
|
||||
</li>
|
||||
<li>
|
||||
Bitrate, Buffer delay, and packet loss are important connection
|
||||
quality metrics
|
||||
</li>
|
||||
<li>
|
||||
Change the video bitrate by pressing the buttons below the video. It
|
||||
should approach 6000-kbps if the network allows.
|
||||
</li>
|
||||
|
||||
</ol>
|
||||
<div id="screen" style="color: #CCC; margin:10px 0;"><a href="./speedtest?screen" style="color: #CCC;">Test screen-sharing performance here</a></div>
|
||||
<div id="remote"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
var testType= "webcam";
|
||||
if (urlParams.has("screen") || urlParams.has("ss") || urlParams.has("screenshare") || urlParams.has("screentest")) {
|
||||
|
||||
5
thirdparty/ffmpeg.min.js
vendored
Normal file
5
thirdparty/ffmpeg.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1497
thirdparty/tfjs/face-landmarks-detection.js
vendored
Normal file
1497
thirdparty/tfjs/face-landmarks-detection.js
vendored
Normal file
File diff suppressed because one or more lines are too long
16300
thirdparty/tfjs/tf-backend-webgl.js
vendored
Normal file
16300
thirdparty/tfjs/tf-backend-webgl.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
thirdparty/tfjs/tf-backend-webgl.js.map
vendored
Normal file
1
thirdparty/tfjs/tf-backend-webgl.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
8058
thirdparty/tfjs/tf-converter.js
vendored
Normal file
8058
thirdparty/tfjs/tf-converter.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
thirdparty/tfjs/tf-converter.js.map
vendored
Normal file
1
thirdparty/tfjs/tf-converter.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
27681
thirdparty/tfjs/tf-core.js
vendored
Normal file
27681
thirdparty/tfjs/tf-core.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
thirdparty/tfjs/tf-core.js.map
vendored
Normal file
1
thirdparty/tfjs/tf-core.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -9,48 +9,27 @@
|
||||
"disable-the-camera": "Disable the Camera",
|
||||
"share-a-screen-with-others": "Share a Screen with others",
|
||||
"create-a-secondary-stream": "Create a Secondary Stream",
|
||||
"settings": "Settings",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"hangup-the-call": "Hangup the Call",
|
||||
"alert-the-host-you-want-to-speak": "Alert the host you want to speak",
|
||||
"record-your-stream-to-disk": "Record your stream to disk",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"cancel-the-director-s-video-audio": "Cancel the Director's Video/Audio",
|
||||
"submit-any-error-logs": "Submit any error logs",
|
||||
"show-help-info": "Show Help Info",
|
||||
"language-options": "Language Options",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"add-group-chat-to-obs": "Add Group Chat",
|
||||
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "For large group rooms, this option can reduce the load on remote guests substantially",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
|
||||
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
|
||||
"add-your-camera-to-obs": "Add your Camera",
|
||||
"start-streaming": "start streaming",
|
||||
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
|
||||
"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",
|
||||
"youtube-video-demoing-how-to-do-this": "Youtube Video demoing how to do this",
|
||||
"invite-a-guest-or-camera-source-to-publish-into-the-group-room": "Invite a guest or camera source to publish into the group room",
|
||||
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link as a browser source in your Studio software to capture the video or audio",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link as a Browser Source to capture the video or audio",
|
||||
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
|
||||
"disables-echo-cancellation-and-improves-audio-quality": "Disables Echo Cancellation and improves audio quality",
|
||||
"audio-only-sources-are-visually-hidden-from-scenes": "Audio-only sources are visually hidden from scenes",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"guest-will-be-prompted-to-enter-a-display-name": "Guest will be prompted to enter a Display Name",
|
||||
"display-names-will-be-shown-in-the-bottom-left-corner-of-videos": "Display Names will be shown in the bottom-left corner of videos",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
@@ -58,19 +37,30 @@
|
||||
"the-default-microphone-will-be-pre-selected-for-the-guest": "The default microphone will be pre-selected for the guest",
|
||||
"the-default-camera-device-will-selected-automatically": "The default camera device will selected automatically",
|
||||
"the-guest-won-t-have-access-to-changing-camera-settings-or-screenshare": "The guest won't have access to changing camera settings or screenshare",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"the-guest-will-not-see-their-own-self-preview-after-joining": "The guest will not see their own self-preview after joining",
|
||||
"guests-will-have-an-option-to-poke-the-director-by-pressing-a-button": "Guests will have an option to poke the Director by pressing a button",
|
||||
"add-an-audio-compressor-to-the-guest-s-microphone": "Add an audio compressor to the guest's microphone",
|
||||
"add-an-equalizer-to-the-guest-s-microphone-that-the-director-can-control": "Add an Equalizer to the guest's microphone that the director can control",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-guest-can-only-see-the-director-s-video-if-provided": "The guest can only see the Director's video, if provided",
|
||||
"the-guest-s-microphone-will-be-muted-on-joining-they-can-unmute-themselves-": "The guest's microphone will be muted on joining. They can unmute themselves.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"have-the-guest-join-muted-so-only-the-director-can-unmute-the-guest-": "Have the guest join muted, so only the director can Unmute the guest.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"make-the-invite-url-encoded-so-parameters-are-harder-to-tinker-with-by-guests": "Make the invite URL encoded, so parameters are harder to tinker with by guests",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"move-the-user-to-another-room-controlled-by-another-director": "Move the user to another room, controlled by another director",
|
||||
"send-a-direct-message-to-this-user-": "Send a Direct Message to this user.",
|
||||
"force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.",
|
||||
@@ -110,8 +100,14 @@
|
||||
"set-to-audio-channel-6": "Set to Audio Channel 6",
|
||||
"remote-audio-settings": "Remote Audio Settings",
|
||||
"advanced-video-settings": "Advanced Video Settings",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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.",
|
||||
"add-to-scene-2": "Add to Scene 2",
|
||||
"activate-or-reload-this-video-device-": "Activate or Reload this video device.",
|
||||
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"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.",
|
||||
"cannot-see-videos": "Cannot see videos",
|
||||
"cannot-hear-others": "Cannot hear others",
|
||||
"see-director-only": "See director only",
|
||||
@@ -119,79 +115,26 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"hide-this-window": "Hide this window"
|
||||
},
|
||||
"innerHTML": {
|
||||
"copy-this-url": "Copy this URL into your studio's \"browser Source\"",
|
||||
"copy-this-url": "Copy this URL into your \"browser source\"",
|
||||
"you-are-in-the-control-center": "Control center for room:",
|
||||
"joining-room": "You are in room",
|
||||
"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>",
|
||||
"back": "Back",
|
||||
"add-your-camera": "Add your Camera",
|
||||
"ask-for-permissions": "Allow Access to Camera/Microphone",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "Max Resolution",
|
||||
"balanced": "Balanced",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"select-audio-source": " Audio Source(s) ",
|
||||
"no-audio": "No Audio",
|
||||
"select-output-source": " Audio Output Destination: ",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"add-a-password": " Add a Password:",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"audio-sources": "Audio Sources",
|
||||
"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": "",
|
||||
"push-to-talk-enable": " enable director`s microphone or video<br>(only guests can see this feed)",
|
||||
"hide-the-links": " LINKS (GUEST INVITES & SCENES)",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> <span data-translate=\"click-here-for-help\">Click Here for a quick overview and help</span>\n\t\t\t\t\t",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Known Limitations with Group Rooms:</font><br>\n\t\t\t\t\t\t<li>A group room can handle up to around 30 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>Videos will appear of low quality on purpose for guests and director; this is to save bandwidth and CPU resources.",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\tA group room can handle normally around 6 to 20 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room\n\t\t\t\t\t",
|
||||
"invite-users-to-join": "Guests can use the link to join the group room",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"this-is-obs-browser-source-link": "Use in your studio software to capture the group video mix",
|
||||
"this-is-obs-browser-source-link": "Use studio software to capture the group video mix",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
@@ -200,24 +143,29 @@
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"mute-microphone-by-default": "Muted; guest can unmute",
|
||||
"unmute-by-director-only": "Muted; director can unmute",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"this-can-reduce-packet-loss": "Can reduce packet loss video corruption",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.",
|
||||
"forward-to-room": "Transfer",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"disconnect-guest": "Hangup",
|
||||
@@ -225,6 +173,7 @@
|
||||
"add-to-scene": "add to scene 1",
|
||||
"mute-guest": "mute guest",
|
||||
"More-scene-options": "More scene options",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"mute-scene": "mute in scene",
|
||||
"force-keyframe": "Rainbow Puke Fix",
|
||||
"stats-remote": " Scene Stats",
|
||||
@@ -237,13 +186,32 @@
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"change-url": "Change URL",
|
||||
"change-params": "URL Params",
|
||||
"record-local": " Record",
|
||||
"record-local": " Record Local",
|
||||
"record-remote": " Record Remote",
|
||||
"change-to-low-quality": " <i class=\"las la-video-slash\"></i>",
|
||||
"change-to-medium-quality": " <i class=\"las la-video\"></i>",
|
||||
"change-to-high-quality": " <i class=\"las la-binoculars\"></i>",
|
||||
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings",
|
||||
"advanced-camera-settings": "<i class=\"las la-sliders-h\"></i> Video Settings",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "Max Resolution",
|
||||
"balanced": "Balanced",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"select-audio-source": " Audio Source(s) ",
|
||||
"select-output-source": " Audio Output Destination: ",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
@@ -262,14 +230,56 @@
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
"enter-a-room-name-here": "Enter a Room Name here",
|
||||
"optional-room-password-here": "Optional room password here",
|
||||
"optional": "optional",
|
||||
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
|
||||
"add-an-optional-password": "Add an optional password",
|
||||
"enter-room-name-here": "Enter Room name here",
|
||||
"enter-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"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Připojit se s názvem místnosti zde",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Sem zadejte vaši zprávu",
|
||||
"optional": "optional",
|
||||
"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-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Raum über Namen betreten",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Message",
|
||||
"optional": "optional",
|
||||
"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-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"titles": {
|
||||
"join-by-room-name-here": "Enter a room name to quick join",
|
||||
"join-by-room-name-here": "Geben Sie einen Raumnamen ein",
|
||||
"join-room": "Join room",
|
||||
"load-the-next-guest-in-queue": "Load the next guest in queue",
|
||||
"toggle-the-chat": "Toggle the Chat",
|
||||
@@ -9,48 +9,27 @@
|
||||
"disable-the-camera": "Disable the Camera",
|
||||
"share-a-screen-with-others": "Share a Screen with others",
|
||||
"create-a-secondary-stream": "Create a Secondary Stream",
|
||||
"settings": "Settings",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"hangup-the-call": "Hangup the Call",
|
||||
"alert-the-host-you-want-to-speak": "Alert the host you want to speak",
|
||||
"record-your-stream-to-disk": "Record your stream to disk",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"cancel-the-director-s-video-audio": "Cancel the Director's Video/Audio",
|
||||
"submit-any-error-logs": "Submit any error logs",
|
||||
"show-help-info": "Show Help Info",
|
||||
"language-options": "Language Options",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"add-group-chat-to-obs": "Add Group Chat",
|
||||
"for-large-group-rooms-this-option-can-reduce-the-load-on-remote-guests-substantially": "For large group rooms, this option can reduce the load on remote guests substantially",
|
||||
"the-director-will-be-visible-in-scenes-as-if-a-performer-themselves-": "The director will be visible in scenes, as if a performer themselves.",
|
||||
"useful-if-you-want-to-perform-and-direct-at-the-same-time": "Useful if you want to perform and direct at the same time",
|
||||
"which-video-codec-would-you-want-used-by-default-": "Which video codec would you want used by default?",
|
||||
"you-ll-enter-as-the-room-s-director": "You'll enter as the room's director",
|
||||
"add-your-camera-to-obs": "Add your Camera",
|
||||
"start-streaming": "start streaming",
|
||||
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"remote-screenshare-into-obs": "Remote Screenshare",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"ideal-for-1080p60-gaming-if-your-computer-and-upload-are-up-for-it": "Ideal for 1080p60 gaming, if your computer and upload are up for it",
|
||||
"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",
|
||||
"youtube-video-demoing-how-to-do-this": "Youtube Video demoing how to do this",
|
||||
"invite-a-guest-or-camera-source-to-publish-into-the-group-room": "Invite a guest or camera source to publish into the group room",
|
||||
"if-disabled-the-invited-guest-will-not-be-able-to-see-or-hear-anyone-in-the-room-": "If disabled, the invited guest will not be able to see or hear anyone in the room.",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link as a browser source in your Studio software to capture the video or audio",
|
||||
"use-this-link-in-the-obs-browser-source-to-capture-the-video-or-audio": "Use this link in the OBS Browser Source to capture the video or audio",
|
||||
"if-disabled-you-must-manually-add-a-video-to-a-scene-for-it-to-appear-": "If disabled, you must manually add a video to a scene for it to appear.",
|
||||
"disables-echo-cancellation-and-improves-audio-quality": "Disables Echo Cancellation and improves audio quality",
|
||||
"audio-only-sources-are-visually-hidden-from-scenes": "Audio-only sources are visually hidden from scenes",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"guest-will-be-prompted-to-enter-a-display-name": "Guest will be prompted to enter a Display Name",
|
||||
"display-names-will-be-shown-in-the-bottom-left-corner-of-videos": "Display Names will be shown in the bottom-left corner of videos",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
@@ -58,19 +37,30 @@
|
||||
"the-default-microphone-will-be-pre-selected-for-the-guest": "The default microphone will be pre-selected for the guest",
|
||||
"the-default-camera-device-will-selected-automatically": "The default camera device will selected automatically",
|
||||
"the-guest-won-t-have-access-to-changing-camera-settings-or-screenshare": "The guest won't have access to changing camera settings or screenshare",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"the-guest-will-not-see-their-own-self-preview-after-joining": "The guest will not see their own self-preview after joining",
|
||||
"guests-will-have-an-option-to-poke-the-director-by-pressing-a-button": "Guests will have an option to poke the Director by pressing a button",
|
||||
"add-an-audio-compressor-to-the-guest-s-microphone": "Add an audio compressor to the guest's microphone",
|
||||
"add-an-equalizer-to-the-guest-s-microphone-that-the-director-can-control": "Add an Equalizer to the guest's microphone that the director can control",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-guest-can-only-see-the-director-s-video-if-provided": "The guest can only see the Director's video, if provided",
|
||||
"the-guest-s-microphone-will-be-muted-on-joining-they-can-unmute-themselves-": "The guest's microphone will be muted on joining. They can unmute themselves.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"have-the-guest-join-muted-so-only-the-director-can-unmute-the-guest-": "Have the guest join muted, so only the director can Unmute the guest.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"make-the-invite-url-encoded-so-parameters-are-harder-to-tinker-with-by-guests": "Make the invite URL encoded, so parameters are harder to tinker with by guests",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"move-the-user-to-another-room-controlled-by-another-director": "Move the user to another room, controlled by another director",
|
||||
"send-a-direct-message-to-this-user-": "Send a Direct Message to this user.",
|
||||
"force-the-user-to-disconnect-they-can-always-reconnect-": "Force the user to Disconnect. They can always reconnect.",
|
||||
@@ -110,8 +100,14 @@
|
||||
"set-to-audio-channel-6": "Set to Audio Channel 6",
|
||||
"remote-audio-settings": "Remote Audio Settings",
|
||||
"advanced-video-settings": "Advanced Video Settings",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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.",
|
||||
"add-to-scene-2": "Add to Scene 2",
|
||||
"activate-or-reload-this-video-device-": "Activate or Reload this video device.",
|
||||
"tip-hold-ctrl-command-to-select-multiple": "tip: Hold CTRL (command) to select Multiple",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"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.",
|
||||
"cannot-see-videos": "Cannot see videos",
|
||||
"cannot-hear-others": "Cannot hear others",
|
||||
"see-director-only": "See director only",
|
||||
@@ -119,79 +115,26 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password"
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"hide-this-window": "Hide this window"
|
||||
},
|
||||
"innerHTML": {
|
||||
"copy-this-url": "Copy this URL into your studio's \"browser Source\"",
|
||||
"copy-this-url": "Copy this URL into an OBS \"Browser Source\"",
|
||||
"you-are-in-the-control-center": "Control center for room:",
|
||||
"joining-room": "You are in room",
|
||||
"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>",
|
||||
"back": "Back",
|
||||
"add-your-camera": "Add your Camera",
|
||||
"ask-for-permissions": "Allow Access to Camera/Microphone",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "Max Resolution",
|
||||
"balanced": "Balanced",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"select-audio-source": " Audio Source(s) ",
|
||||
"no-audio": "No Audio",
|
||||
"select-output-source": " Audio Output Destination: ",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"add-a-password": " Add a Password:",
|
||||
"use-chrome-instead": "Consider using a Chromium-based browser instead.<br>\n \t\t\t\t\t\tSafari is more prone to having audio issues",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"audio-sources": "Audio Sources",
|
||||
"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": "",
|
||||
"push-to-talk-enable": " enable director`s microphone or video<br>(only guests can see this feed)",
|
||||
"hide-the-links": " LINKS (GUEST INVITES & SCENES)",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> <span data-translate=\"click-here-for-help\">Click Here for a quick overview and help</span>\n\t\t\t\t\t",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Known Limitations with Group Rooms:</font><br>\n\t\t\t\t\t\t<li>A group room can handle up to around 30 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>Videos will appear of low quality on purpose for guests and director; this is to save bandwidth and CPU resources.",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Welcome. This is the director's control-room for the group-chat.</b><br><br>\n\t\t\t\t\t\tYou can host a group chat with friends using a room. Share the blue link to invite guests who will join the chat automatically.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Known Limitations with Group Rooms:</font><br>\n\t\t\t\t\t\t<li>A group room can handle up to around 30 guests, depending on numerous factors, including CPU and available bandwidth of all guests in the room. To achieve more than around 7-guests though, you will likely want to <a href=\"https://www.youtube.com/watch?v=bpRa8-UYCGc\" title=\"Youtube Video demoing how to do this\">disable video sharing between guests</a>. Using &broadcast, &roombitrate=0 or &novideo are options there.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>Videos will appear of low quality on purpose for guests and director; this is to save bandwidth and CPU resources. It will be high-quality within OBS still though.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>The state of the scenes, such as which videos are active in a scene, are lost when the director resets the control-room or the scene.</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\tFurther Notes:<br><br>\n\t\t\t\t\t\t<li>Links to Solo-views of each guest video are offered under videos as they load. These can be used within an OBS Browser Source.</li>\n\t\t\t\t\t\t<li>You can use the auto-mixing Group Scenes, the green links, to auto arrange multiple videos for you in OBS.</li>\n\t\t\t\t\t\t<li>You can use this control room to record isolated video or audio streams, but it is an experimental feature still.</li>\n\t\t\t\t\t\t<li>If you transfer a guest from one room to another, they won't know which room they have been transferred to.</li>\n\t\t\t\t\t\t<li>OBS will see a guest's video in high-quality; the default video bitrate is 2500kbps. Setting higher bitrates will improve motion.</li>\n\t\t\t\t\t\t<li>VP8 is typically the default video codec, but using &codec=vp9 or &codec=h264 as a URL in OBS can help to reduce corrupted video puke issues.</li>\n\t\t\t\t\t\t<li>&stereo=2 can be added to guests to turn off audio effects, such as echo cancellation and noise-reduction.</li>\n\t\t\t\t\t\t<li>https://invite.cam is a free service provided that can help obfuscuate the URL parameters of an invite link given to guests.</li>\n\t\t\t\t\t\t<li>Adding &showonly=SOME_OBS_VIRTUALCAM to the guest invite links allows for only a single video to be seen by the guests; this can be output of the OBS Virtual Camera for example</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\n\t\t\t\t\t\tFor advanced URL options and parameters, <a href=\"https://docs.vdo.ninja/advanced-settings\">see the Wiki.</a>\n\t\t\t\t\t",
|
||||
"invite-users-to-join": "Guests can use the link to join the group room",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"this-is-obs-browser-source-link": "Use in your studio software to capture the group video mix",
|
||||
"this-is-obs-browser-source-link": "Use in OBS or other studio software to capture the group video mix",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
@@ -200,24 +143,29 @@
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Mute microphone by default",
|
||||
"mute-microphone-by-default": "Muted; guest can unmute",
|
||||
"unmute-by-director-only": "Muted; director can unmute",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"unmute-by-director-only": "Unmute by director only",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "This can reduce video corruption caused by packet loss",
|
||||
"this-can-reduce-packet-loss": "Can reduce packet loss video corruption in OBS on PC",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"more-than-four-can-join": "These four guest slots are just for demonstration. More than four guests can actually join a room.",
|
||||
"forward-to-room": "Transfer",
|
||||
"send-direct-chat": "<i class=\"las la-envelope\"></i> Message",
|
||||
"disconnect-guest": "Hangup",
|
||||
@@ -225,6 +173,7 @@
|
||||
"add-to-scene": "add to scene 1",
|
||||
"mute-guest": "mute guest",
|
||||
"More-scene-options": "More scene options",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"mute-scene": "mute in scene",
|
||||
"force-keyframe": "Rainbow Puke Fix",
|
||||
"stats-remote": " Scene Stats",
|
||||
@@ -237,13 +186,32 @@
|
||||
"order-up": "<i class=\"las la-plus\"></i>",
|
||||
"change-url": "Change URL",
|
||||
"change-params": "URL Params",
|
||||
"record-local": " Record",
|
||||
"record-local": " Record Local",
|
||||
"record-remote": " Record Remote",
|
||||
"change-to-low-quality": " <i class=\"las la-video-slash\"></i>",
|
||||
"change-to-medium-quality": " <i class=\"las la-video\"></i>",
|
||||
"change-to-high-quality": " <i class=\"las la-binoculars\"></i>",
|
||||
"advanced-audio-settings": "<i class=\"las la-sliders-h\"></i> Audio Settings",
|
||||
"advanced-camera-settings": "<i class=\"las la-sliders-h\"></i> Video Settings",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record",
|
||||
"video-source": " Video Source ",
|
||||
"max-resolution": "Max Resolution",
|
||||
"balanced": "Balanced",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"select-audio-source": " Audio Source(s) ",
|
||||
"select-output-source": " Audio Output Destination: ",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
@@ -262,14 +230,56 @@
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
"enter-a-room-name-here": "Enter a Room Name here",
|
||||
"optional-room-password-here": "Optional room password here",
|
||||
"optional": "optional",
|
||||
"give-this-media-source-a-name-optional-": "Give this media source a name (optional)",
|
||||
"add-an-optional-password": "Add an optional password",
|
||||
"enter-room-name-here": "Enter Room name here",
|
||||
"enter-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"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -119,7 +119,29 @@
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Mostrar Rótulos",
|
||||
"transfer-to-a-new-room": "Transferir a nueva Sala",
|
||||
"enable-custom-password": "Activar password personalizado"
|
||||
"enable-custom-password": "Activar password personalizado",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"copy-this-url": "Copia esta URL como fuente \"Navegador\" de OBS",
|
||||
@@ -184,7 +206,7 @@
|
||||
"hide-the-links": " ENLACES (INVITACIONES & ESCENAS)",
|
||||
"click-for-quick-room-overview": "\n\t\t\t\t\t\t<i class=\"las la-question-circle\"></i> <span data-translate=\"click-here-for-help\">Pulsar aquí para un resumen rápido y ayuda</span>\n\t\t\t\t\t",
|
||||
"click-here-for-help": "Pulsar aquí para un resumen rápido y ayuda",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Bienvenido. Esta es la sala de control del director para el grupo de chat.</b><br><br>\n\t\t\t\t\t\tPuedes organizar un grupo de chat con amigos utilizando una sala. Comparte el enlace azul con los invitados para que puedan entrar directamente al chat.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Limitaciones conocidas de las Salas:</font><br>\n\t\t\t\t\t\t<li>Una sala grupal puede gestionar hasta unos 30 invitados, dependiendo de varios factores, incluyendo CPU y ancho de banda disponible en todos los invitados en la sala.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>El Video aparece en baja calidad a propósito en los invitados y director; esto es para reducir los recursos de ancho de banda y CPU.",
|
||||
"welcome-to-control-room": "\n\t\t\t\t\t\t<b>Bienvenido. Esta es la sala de control del director para el grupo de chat.</b><br><br>\n\t\t\t\t\t\tPuedes organizar un grupo de chat con amigos utilizando una sala. Comparte el enlace azul con los invitados para que puedan entrar directamente al chat.\n\t\t\t\t\t\t<br><br>\n\t\t\t\t\t\t<font style=\"color:red\">Limitaciones conocidas de las Salas:</font><br>\n\t\t\t\t\t\t<li>Una sala grupal puede gestionar hasta unos 30 invitados, dependiendo de varios factores, incluyendo CPU y ancho de banda disponible en todos los invitados en la sala.</li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<li>El Video aparece en baja calidad a propósito en los invitados y director; esto es para reducir los recursos de ancho de banda y CPU.</li>",
|
||||
"invite-users-to-join": "Los Invitados pueden utilizar el enlace para unirse sala grupal",
|
||||
"guests-hear-others": "Invitados escuchan a otros",
|
||||
"capture-a-group-scene": "CAPTURA UNA ESCENA DE GRUPO",
|
||||
@@ -258,7 +280,24 @@
|
||||
"add-to-calendar": "Añadir detalles a tu Calendario:",
|
||||
"add-to-google-calendar": "Añadir a Calendario Google",
|
||||
"add-to-outlook-calendar": "Añadir a Calendario Outlook",
|
||||
"add-to-yahoo-calendar": "Añadir a Calendario Yahoo"
|
||||
"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",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Unirse por Nombre de Sala aquí",
|
||||
@@ -270,6 +309,54 @@
|
||||
"enter-chat-message-to-send-here": "Introduce el mensaje de chat a enviar aquí",
|
||||
"optional": "opcional",
|
||||
"enter-the-room-name-here": "Introduce el nombre de Sala aquí",
|
||||
"enter-the-room-password-here": "Introduce el password de la Sala aquí"
|
||||
"enter-the-room-password-here": "Introduce el password de la Sala aquí",
|
||||
"enter-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Rejoindre via le nom de salle ici",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Saisir un message ici pour l'envoyer dans le tchat",
|
||||
"optional": "optional",
|
||||
"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-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"optional": "optional",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
"enter-the-room-password-here": "Enter the room password here",
|
||||
"enter-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"optional": "optional",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
"enter-the-room-password-here": "Enter the room password here",
|
||||
"enter-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Ga binnen met een kamer naam",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Type hier om te chatten",
|
||||
"optional": "optional",
|
||||
"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-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja - Pig Latin",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Erehay ouyay ancay epray-enerategay",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Erehay ouyay ancay epray-enerategay",
|
||||
"optional": "optional",
|
||||
"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-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "new-display-name",
|
||||
"submit-error-report": "submit-error-report",
|
||||
"director-redirect-1": "director-redirect-1",
|
||||
"director-redirect-2": "\n\ndirector-redirect-2.",
|
||||
"add-a-label": "add-a-labelA",
|
||||
"audio-processing-disabled": "audio-processing-disabledA",
|
||||
"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.AA</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.A",
|
||||
"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.A",
|
||||
"director": "DirectorA",
|
||||
"unknown-user": "Unknown UserA",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?A",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?A",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)A",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)A",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.A",
|
||||
"enter-display-name": "Please enter your display name:A",
|
||||
"enter-new-display-name": "Enter a new Display Name for this streamA",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)A",
|
||||
"enter-website": "Enter a website URL to shareA",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)A",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: A",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscoreA",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.A",
|
||||
"share-with-trusted": "Share only with those you trustA",
|
||||
"pass-recommended": "A password is recommendedA",
|
||||
"insecure-room-name": "Insecure room name.A",
|
||||
"allowed-chars": "Allowed charsA",
|
||||
"transfer": "transferA",
|
||||
"armed": "armedA",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)A",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)A",
|
||||
"change-url": "change URLA",
|
||||
"mute-in-scene": "mute in sceneA",
|
||||
"unmute-guest": "un-mute guestA",
|
||||
"undeafen": "un-deafenA",
|
||||
"deafen": "deafen guestA",
|
||||
"unblind": "un-blindA",
|
||||
"blind": "blind guestA",
|
||||
"unmute": "un-muteA",
|
||||
"mute-guest": "mute-guestA",
|
||||
"unhide": "unhide-guestA",
|
||||
"hide-guest": "hide-guestA",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Introduza aqui numa sala pelo seu nome",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Introduza mensagem a enviar aqui",
|
||||
"optional": "opcional",
|
||||
"enter-the-room-name-here": "Introduza aqui o nome da sala",
|
||||
"enter-the-room-password-here": "Introduza aqui a password da sala"
|
||||
"enter-the-room-password-here": "Introduza aqui a password da sala",
|
||||
"enter-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja (RU)",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"optional": "optional",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
"enter-the-room-password-here": "Enter the room password here",
|
||||
"enter-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -133,7 +133,29 @@
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8"
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
@@ -288,7 +310,23 @@
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "Join by Room Name here",
|
||||
@@ -300,6 +338,54 @@
|
||||
"enter-chat-message-to-send-here": "Enter chat message to send here",
|
||||
"optional": "optional",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
"enter-the-room-password-here": "Enter the room password here",
|
||||
"enter-your-message-here": "Enter your message here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
@@ -81,6 +81,7 @@ const updateList = [
|
||||
"pt",
|
||||
"ru",
|
||||
"tr",
|
||||
"uk",
|
||||
"blank"
|
||||
]; // list of languages to update. Update this if you add a new language.
|
||||
|
||||
@@ -107,10 +108,13 @@ allPlaceholders.forEach((ele) => {
|
||||
defaultTransPlaceholders[key] = ele.placeholder;
|
||||
});
|
||||
|
||||
const combinedTrans = {};
|
||||
combinedTrans.titles = defaultTransTitles;
|
||||
combinedTrans.innerHTML = defaultTrans;
|
||||
combinedTrans.placeholders = defaultTransPlaceholders;
|
||||
//const combinedTrans = {};
|
||||
//combinedTrans.titles = defaultTransTitles;
|
||||
//combinedTrans.innerHTML = defaultTrans;
|
||||
//combinedTrans.placeholders = defaultTransPlaceholders;
|
||||
|
||||
|
||||
|
||||
|
||||
var counter = 0;
|
||||
for (const i in updateList) {
|
||||
@@ -138,12 +142,30 @@ for (const i in updateList) {
|
||||
const key = ele.dataset.key;
|
||||
newPlaceholders[key] = ele.placeholder;
|
||||
});
|
||||
|
||||
var miscellaneous = {};
|
||||
if ("miscellaneous" in suceess[1]){
|
||||
if (miscTranslations){
|
||||
Object.keys(miscTranslations).forEach(key => {
|
||||
if (key in suceess[1].miscellaneous) {
|
||||
miscellaneous[key] = suceess[1].miscellaneous[key];
|
||||
} else {
|
||||
miscellaneous[key] = miscTranslations[key];
|
||||
}
|
||||
});
|
||||
} else {
|
||||
miscellaneous = suceess[1].miscellaneous;
|
||||
}
|
||||
} else if (miscTranslations){
|
||||
miscellaneous = miscTranslations;
|
||||
}
|
||||
|
||||
// //// DOWNLOAD UPDATED TRANSLATION
|
||||
const outputTrans = {};
|
||||
outputTrans.titles = newTransTitles;
|
||||
outputTrans.innerHTML = newTrans;
|
||||
outputTrans.placeholders = newPlaceholders;
|
||||
outputTrans.miscellaneous = miscellaneous;
|
||||
downloadTranslation(ln, outputTrans);
|
||||
}
|
||||
// //////// RESET THING BACK
|
||||
|
||||
@@ -102,7 +102,52 @@
|
||||
"set-to-audio-channel-6": "Аудіоканал 1-6",
|
||||
"set-to-audio-channel-7": "Аудіоканал 1-7",
|
||||
"set-to-audio-channel-8": "Аудіоканал 1-8",
|
||||
"force-the-remote-sender-to-issue-a-keyframe-to-all-scenes-fixing-pixel-smearing-issues-": "Примусити відправника вставляти ключові кадри до усіх сцен (вирішує проблему розсипання картинки)"
|
||||
"force-the-remote-sender-to-issue-a-keyframe-to-all-scenes-fixing-pixel-smearing-issues-": "Примусити відправника вставляти ключові кадри до усіх сцен (вирішує проблему розсипання картинки)",
|
||||
"share-a-website-as-an-embedded-iframe": "Share a website as an embedded iFRAME",
|
||||
"room-settings": "Room Settings",
|
||||
"your-audio-and-video-settings": "Your audio and video Settings",
|
||||
"you-can-also-enable-the-director-s-video-output-afterwards-by-clicking-the-setting-s-button": "You can also enable the director`s Video Output afterwards by clicking the Setting`s button",
|
||||
"add-to-calendar": "Add to Calendar",
|
||||
"allow-for-remote-stat-monitoring-via-the-monitoring-tool": "Allow for remote stat monitoring via the monitoring tool",
|
||||
"the-guest-will-be-asked-if-they-want-to-reload-the-previous-link-when-revisiting": "The guest will be asked if they want to reload the previous link when revisiting",
|
||||
"guests-not-actively-speaking-will-be-hidden": "Guests not actively speaking will be hidden",
|
||||
"the-guest-s-self-video-preview-will-appear-tiny-in-the-top-right": "The guest's self-video preview will appear tiny in the top right",
|
||||
"allow-the-guests-to-pick-a-virtual-backscreen-effect": "Allow the guests to pick a virtual backscreen effect",
|
||||
"videos-use-an-animated-transition-when-being-remixed": "Videos use an animated transition when being remixed",
|
||||
"increase-video-quality-that-guests-in-room-see-": "Increase video quality that guests in room see.",
|
||||
"show-some-prep-suggestions-to-the-guests-on-connect": "Show some prep suggestions to the guests on connect",
|
||||
"this-low-fi-video-codec-uses-very-little-cpu-even-with-dozens-of-active-viewers-": "This low-fi video codec uses very little CPU, even with dozens of active viewers.",
|
||||
"the-guest-will-not-be-asked-for-a-video-device-on-connection": "The guest will not be asked for a video device on connection",
|
||||
"the-active-speakers-are-made-visible-automatically": "The active speakers are made visible automatically",
|
||||
"set-the-background-color-to-bright-green": "Set the background color to bright green",
|
||||
"fade-videos-in-over-500ms": "Fade videos in over 500ms",
|
||||
"add-a-10px-margin-around-all-video-elements": "Add a 10px margin around all video elements",
|
||||
"playback-the-video-with-mono-channel-audio": "Playback the video with mono-channel audio",
|
||||
"have-the-videos-fit-their-respective-areas-even-if-it-means-cropping-a-bit": "Have the videos fit their respective areas, even if it means cropping a bit",
|
||||
"have-videos-be-aligned-with-sizing-designed-for-vertical-video": "Have videos be aligned with sizing designed for vertical video",
|
||||
"copy-this-stream-id-to-the-clipboard": "Copy this Stream ID to the clipboard",
|
||||
"click-here-to-edit-the-label-for-this-stream-changes-will-propagate-to-all-viewers-of-this-stream": "Click here to edit the label for this stream. Changes will propagate to all viewers of this stream",
|
||||
"add-this-video-to-any-remote-scene-2-": "Add this Video to any remote '&scene=2'",
|
||||
"add-to-scene-8": "Add to Scene 8",
|
||||
"request-the-statistics-of-this-video-in-any-active-scene": "Request the statistics of this video in any active scene",
|
||||
"solo-this-video-everywhere": "Solo this video everywhere",
|
||||
"hide-this-guest-everywhere": "Hide this guest everywhere",
|
||||
"remotely-reload-the-guest-s-page-with-a-new-url": "Remotely reload the guest's page with a new URL",
|
||||
"change-user-parameters": "Change user parameters",
|
||||
"this-will-ask-the-remote-guest-for-permission-to-change": "This will ask the remote guest for permission to change",
|
||||
"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.",
|
||||
"improve-performance-and-quality-with-this-tip": "Improve performance and quality with this tip",
|
||||
"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.",
|
||||
"cannot-see-videos": "Cannot see videos",
|
||||
"cannot-hear-others": "Cannot hear others",
|
||||
"see-director-only": "See director only",
|
||||
"show-mini-preview": "Show Mini preview",
|
||||
"raise-hand-button": "Raise hand button",
|
||||
"show-labels": "Show labels",
|
||||
"transfer-to-a-new-room": "Transfer to a new Room",
|
||||
"enable-custom-password": "Enable custom password",
|
||||
"hide-this-window": "Hide this window"
|
||||
},
|
||||
"innerHTML": {
|
||||
"logo-header": "\n\t\t\t\t\t<font id=\"qos\">O</font>BS.Ninja \n\t\t\t\t",
|
||||
@@ -189,7 +234,77 @@
|
||||
"add-a-password": " Додайте пароль:",
|
||||
"toggle-remote-speaker": "Віддалений звук",
|
||||
"toggle-remote-display": "Відео гістю",
|
||||
"force-keyframe": "Райдуга"
|
||||
"force-keyframe": "Райдуга",
|
||||
"push-to-talk-enable": " enable director`s microphone or video<br>(only guests can see this feed)",
|
||||
"click-here-for-help": "Click Here for a quick overview and help",
|
||||
"guests-hear-others": "Guests hear others",
|
||||
"capture-a-group-scene": "CAPTURE A GROUP SCENE",
|
||||
"auto-add-guests": "Auto-add guests",
|
||||
"pro-audio-mode": "Pro-audio mode",
|
||||
"hide-audio-only-sources": "Hide audio-only sources",
|
||||
"remote-monitoring": "Invite saved to cookie",
|
||||
"ask-for-display-name": "Ask for display name",
|
||||
"show-display-names": "Show display names",
|
||||
"show-active-speaker": "Show active speakers",
|
||||
"auto-select-microphone": "Auto-select default microphone",
|
||||
"auto-select-camera": "Auto-select default camera",
|
||||
"hide-setting-buttons": "Hide settings button",
|
||||
"mini-self-preview": "Mini self-preview",
|
||||
"virtual-backgrounds": "Virtual backgrounds",
|
||||
"fade-videos-in": "Fade videos in",
|
||||
"powerful-computers-only": "Only use with powerful computers and small groups!!",
|
||||
"guests-see-HD-video": "Guests see HD video",
|
||||
"no-self-preview": "Disable self-preview",
|
||||
"raise-hand-button": "Display 'raise-hand' button",
|
||||
"enable-compressor": "Enable audio compressor",
|
||||
"enable-equalizer": "Enable equalizer as option",
|
||||
"show-guest-tips": "Show guest setup tips",
|
||||
"low-cpu=broadcast-codec": "Low-CPU broadcast codec",
|
||||
"only-see-director-feed": "Only see the director's feed",
|
||||
"mute-microphone-by-default": "Muted; guest can unmute",
|
||||
"unmute-by-director-only": "Muted; director can unmute",
|
||||
"guest-joins-with-no-camera": "Guest joins with no camera",
|
||||
"obfuscate-link": "Obfuscate link and parameters",
|
||||
"this-can-reduce-packet-loss": "Can reduce packet loss video corruption in OBS on PC",
|
||||
"use-h264-codec": "Use H264 codec",
|
||||
"show-active-speakers": "Show active speakers",
|
||||
"green-background": "Green background",
|
||||
"add-margin": "Add margin to videos",
|
||||
"force-mono-audio": "Force mono audio",
|
||||
"fill-video-space": "Crop video to fit",
|
||||
"vertical-aspect-ratio": "Vertical video mode",
|
||||
"learn-more-about-params": "Learn more about URL parameters at ",
|
||||
"More-scene-options": "More scene options",
|
||||
"add-to-scene2": "add to scene 2",
|
||||
"stats-remote": " Scene Stats",
|
||||
"additional-controls": "Additional controls",
|
||||
"solo-video": "Highlight guest",
|
||||
"hide-guest": "hide guest",
|
||||
"change-url": "Change URL",
|
||||
"change-params": "URL Params",
|
||||
"user-raised-hand": "Lower Raised Hand",
|
||||
"unmute": "un-mute",
|
||||
"unhide-guest": "un-hide",
|
||||
"undeafen": "un-deafen",
|
||||
"unblind": "un-blind",
|
||||
"close": "close",
|
||||
"send-message": "send message<s pan=\"\"> </s>",
|
||||
"record-director-local": " Record",
|
||||
"select-digital-effect": " Digital Video Effects: ",
|
||||
"no-effects-applied": "No effects applied",
|
||||
"blurred-background": "Blurred background",
|
||||
"digital-greenscreen": "Digital greenscreen",
|
||||
"virtual-background": "Virtual background",
|
||||
"select-local-image": "Select Local Image",
|
||||
"close-settings": "Close Settings",
|
||||
"advanced": "Advanced ",
|
||||
"apply-new-guest-settings": "Apply settings",
|
||||
"cancel": "Cancel",
|
||||
"invisible-guests": "Not Visible",
|
||||
"add-to-calendar": "Add details to your Calendar:",
|
||||
"add-to-google-calendar": "Add to Google Calendar",
|
||||
"add-to-outlook-calendar": "Add to Outlook Calendar",
|
||||
"add-to-yahoo-calendar": "Add to Yahoo Calendar"
|
||||
},
|
||||
"placeholders": {
|
||||
"join-by-room-name-here": "приєднано до кімнати тут ",
|
||||
@@ -199,6 +314,56 @@
|
||||
"add-an-optional-password": "Додайте необов`язковий пароль",
|
||||
"enter-room-name-here": "Введіть назву кімнати",
|
||||
"enter-chat-message-to-send-here": "Введіть чат повідомлення тут",
|
||||
"optional": "опціонально"
|
||||
"optional": "опціонально",
|
||||
"enter-your-message-here": "Enter your message here",
|
||||
"enter-the-room-name-here": "Enter the room name here",
|
||||
"enter-the-room-password-here": "Enter the room password here"
|
||||
},
|
||||
"miscellaneous": {
|
||||
"new-display-name": "Enter a new Display Name for this stream",
|
||||
"submit-error-report": "Press OK to submit any error logs to VDO.Ninja. Error logs may contain private information.",
|
||||
"director-redirect-1": "The director wishes to redirect you to the URL: ",
|
||||
"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>",
|
||||
"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",
|
||||
"unknown-user": "Unknown User",
|
||||
"room-test-not-good": "The room name 'test' is very commonly used and may not be secure.\n\nAre you sure you wish to proceed?",
|
||||
"load-previous-session": "Would you like to load your previous session's settings?",
|
||||
"enter-password": "Please enter the password below: \n\n(Note: Passwords are case-sensitive and you will not be alerted if it is incorrect.)",
|
||||
"enter-password-2": "Please enter the password below: \n\n(Note: Passwords are case-sensitive.)",
|
||||
"password-incorrect": "The password was incorrect.\n\nRefresh and try again.",
|
||||
"enter-display-name": "Please enter your display name:",
|
||||
"enter-new-display-name": "Enter a new Display Name for this stream",
|
||||
"what-bitrate": "What bitrate would you like to record at? (kbps)",
|
||||
"enter-website": "Enter a website URL to share",
|
||||
"press-ok-to-record": "Press OK to start recording. Press again to stop and download.\n\nWarning: Keep this browser tab active to continue recording.\n\nYou can change the default video bitrate if desired below (kbps)",
|
||||
"no-streamID-provided": "No streamID was provided; one will be generated randomily.\n\nStream ID: ",
|
||||
"alphanumeric-only": "Info: Only AlphaNumeric characters should be used for the stream ID.\n\nThe offending characters have been replaced by an underscore",
|
||||
"stream-id-too-long": "The Stream ID should be less than 45 alPhaNuMeric characters long.\n\nWe will trim it to length.",
|
||||
"share-with-trusted": "Share only with those you trust",
|
||||
"pass-recommended": "A password is recommended",
|
||||
"insecure-room-name": "Insecure room name.",
|
||||
"allowed-chars": "Allowed chars",
|
||||
"transfer": "transfer",
|
||||
"armed": "armed",
|
||||
"transfer-guest-to-room": "Transfer guests to room:\n\n(Please note rooms must share the same password)",
|
||||
"transfer-guest-to-url": "Transfer guests to new website URL.\n\n(Guests will be prompted to accept)",
|
||||
"change-url": "change URL",
|
||||
"mute-in-scene": "mute in scene",
|
||||
"unmute-guest": "un-mute guest",
|
||||
"undeafen": "un-deafen",
|
||||
"deafen": "deafen guest",
|
||||
"unblind": "un-blind",
|
||||
"blind": "blind guest",
|
||||
"unmute": "un-mute",
|
||||
"mute-guest": "mute guest",
|
||||
"unhide": "unhide guest",
|
||||
"hide-guest": "hide guest",
|
||||
"confirm-disconnect-users": "Are you sure you wish to disconnect these users?",
|
||||
"confirm-disconnect-user": "Are you sure you wish to disconnect this user?"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user