mirror of
https://github.com/SrIzan10/vdo.ninja.git
synced 2026-05-01 11:05:24 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1aaae51db4 | ||
|
|
d990bce2ea | ||
|
|
6c80bf83e0 | ||
|
|
49df175df6 | ||
|
|
815c619313 | ||
|
|
aa50333dc9 | ||
|
|
7300421a19 | ||
|
|
6dbc64138a | ||
|
|
fa820d812c | ||
|
|
2c955e62b1 | ||
|
|
a6c9cfcf1b |
116
animations.js
116
animations.js
@@ -1 +1,115 @@
|
||||
var _0x5d73=['state','click','.multiselect-contents','get','checked','hide','overflow','hidden','out-animation','children','mousedown\x20touchend\x20focusin\x20focusout','insertRule','animationName','<style\x20id=\x22lightbox-animations\x22\x20type=\x22text/css\x22></style>','auto','getBoundingClientRect','.close','left:\x20','data','not','#multiselect1','body','left:\x200px;','parent','in-animation','find','css',':checked','50%\x20{','open','append','fa-chevron-down','width:\x20100%;','fa-chevron-up','.fa','.column','.multiselect-trigger','closed','change','left','width:\x20','stopPropagation','sheet','top','width','show','outlightbox','prop','input[type=\x22checkbox\x22]','px;','deleteRule','originalEvent','#empty-container','removeClass','preventDefault','addClass','remove'];(function(_0x595800,_0x40cbf8){var _0x1a0c5e=function(_0x38e004){while(--_0x38e004){_0x595800['push'](_0x595800['shift']());}};_0x1a0c5e(++_0x40cbf8);}(_0x5d73,0x154));var _0x431c=function(_0x595800,_0x40cbf8){_0x595800=_0x595800-0x0;var _0x1a0c5e=_0x5d73[_0x595800];return _0x1a0c5e;};$(_0x431c('0x17'))[_0x431c('0x20')](_0x431c('0xf'));$(_0x431c('0x25'))['on']('click',function(){var _0xe8d30c=$(this)[_0x431c('0x5')](0x0)[_0x431c('0x11')]();$(this)[_0x431c('0x1c')]({'top':_0xe8d30c[_0x431c('0x2d')]+'px','left':_0xe8d30c[_0x431c('0x29')]-0x14+'px'});$(this)[_0x431c('0x0')](_0x431c('0x1a'));$(_0x431c('0x36'))[_0x431c('0x1')]();$('<div\x20id=\x22empty-container\x22\x20class=\x22column\x22></div>')['insertAfter'](this);var _0x2e9e26='';_0x2e9e26='@keyframes\x20outlightbox\x20{';_0x2e9e26+='0%\x20{';_0x2e9e26+='height:\x20100%;';_0x2e9e26+=_0x431c('0x22');_0x2e9e26+='top:\x200px;';_0x2e9e26+=_0x431c('0x18');_0x2e9e26+='}';_0x2e9e26+=_0x431c('0x1e');_0x2e9e26+='height:\x20220px;';_0x2e9e26+='top:\x20'+_0xe8d30c['y']+_0x431c('0x33');_0x2e9e26+='}';_0x2e9e26+='100%\x20{';_0x2e9e26+='height:\x20220px;';_0x2e9e26+=_0x431c('0x2a')+_0xe8d30c[_0x431c('0x2e')]+'px;';_0x2e9e26+='top:\x20'+_0xe8d30c['y']+_0x431c('0x33');_0x2e9e26+=_0x431c('0x13')+_0xe8d30c['x']+_0x431c('0x33');_0x2e9e26+='}';_0x2e9e26+='}';$('#lightbox-animations')['get'](0x0)[_0x431c('0x2c')][_0x431c('0xd')](_0x2e9e26,0x0);$('body')[_0x431c('0x1c')]('overflow',_0x431c('0x9'));});$(_0x431c('0x12'))['on'](_0x431c('0x3'),function(_0x4329aa){$(this)[_0x431c('0x7')]();$('.container-inner')[_0x431c('0x7')]();$(_0x431c('0x17'))['css'](_0x431c('0x8'),_0x431c('0x10'));var _0xb72a49=$(this)[_0x431c('0x19')]()[_0x431c('0x5')](0x0)[_0x431c('0x11')]();$(this)[_0x431c('0x19')]()['css']({'top':_0xb72a49[_0x431c('0x2d')]+'px','left':_0xb72a49[_0x431c('0x29')]+'px'});$(this)['parent']()[_0x431c('0x0')]('out-animation');_0x4329aa[_0x431c('0x2b')]();});$(_0x431c('0x25'))['on']('animationend',function(_0x5025e5){if(_0x5025e5[_0x431c('0x35')][_0x431c('0xe')]=='inlightbox'){$(this)[_0x431c('0xb')](_0x431c('0x12'))[_0x431c('0x2f')]();$(this)['children']('.container-inner')[_0x431c('0x2f')]();}else if(_0x5025e5[_0x431c('0x35')]['animationName']==_0x431c('0x30')){$(this)[_0x431c('0x37')](_0x431c('0x1a'))[_0x431c('0x37')](_0x431c('0xa'))[_0x431c('0x37')]('columnfade');$(_0x431c('0x36'))[_0x431c('0x1')]();$('#lightbox-animations')['get'](0x0)['sheet'][_0x431c('0x34')](0x0);}});$(_0x431c('0x26'))['on'](_0x431c('0xc'),function(_0x3fce8b){var _0x28cd2d=$(this)[_0x431c('0x14')]('state')||0x0;if(_0x28cd2d==0x0){$(this)['data']('state','1')['addClass'](_0x431c('0x1f'))[_0x431c('0x37')](_0x431c('0x27'));$(this)[_0x431c('0x1b')]('.fa')[_0x431c('0x37')](_0x431c('0x21'))[_0x431c('0x0')](_0x431c('0x23'));$(this)[_0x431c('0x19')]()[_0x431c('0x1b')](_0x431c('0x4'))[_0x431c('0x2f')]();$(this)[_0x431c('0x19')]()[_0x431c('0x1b')](_0x431c('0x4'))[_0x431c('0x1b')](_0x431c('0x32'))[_0x431c('0x19')]()[_0x431c('0x2f')]();;$(this)[_0x431c('0x19')]()['find'](_0x431c('0x4'))[_0x431c('0x1b')](_0x431c('0x32'))['show']();;}else{$(this)[_0x431c('0x14')](_0x431c('0x2'),'0')['addClass']('closed')[_0x431c('0x37')]('open');$(this)[_0x431c('0x1b')](_0x431c('0x24'))['removeClass']('fa-chevron-up')[_0x431c('0x0')](_0x431c('0x21'));$(this)[_0x431c('0x19')]()['find'](_0x431c('0x4'))[_0x431c('0x1b')]('input[type=\x22checkbox\x22]')[_0x431c('0x15')](_0x431c('0x1d'))[_0x431c('0x19')]()[_0x431c('0x7')]();;$(this)[_0x431c('0x19')]()[_0x431c('0x1b')](_0x431c('0x4'))['find'](_0x431c('0x32'))['hide']();;}_0x3fce8b[_0x431c('0x38')]();});$(_0x431c('0x16'))['on'](_0x431c('0x28'),function(_0x132688){if($(this)['is'](':checked')){$(this)['parent']()[_0x431c('0x19')]()[_0x431c('0x1b')](_0x431c('0x32'))[_0x431c('0x15')](_0x431c('0x16'))[_0x431c('0x31')](_0x431c('0x6'),![]);}_0x132688[_0x431c('0x38')]();});
|
||||
|
||||
/* We need to create dynamic keyframes to show the animation from full-screen to normal. So we create a stylesheet in which we can insert CSS keyframe rules */
|
||||
$("body").append('<style id="lightbox-animations" type="text/css"></style>');
|
||||
|
||||
/* Click on the container */
|
||||
$(".column").on('click', function() {
|
||||
/* The position of the container will be set to fixed, so set the top & left properties of the container */
|
||||
|
||||
var bounding_box = $(this).get(0).getBoundingClientRect();
|
||||
$(this).css({ top: bounding_box.top + 'px', left: bounding_box.left -20+ 'px' });
|
||||
|
||||
/* Set container to fixed position. Add animation */
|
||||
$(this).addClass('in-animation');
|
||||
|
||||
/* An empty container has to be added in place of the lightbox container so that the elements below don't come up
|
||||
Dimensions of this empty container is the same as the original container */
|
||||
$("#empty-container").remove();
|
||||
$('<div id="empty-container" class="column"></div>').insertAfter(this);
|
||||
|
||||
/* To animate the container from full-screen to normal, we need dynamic keyframes */
|
||||
var styles = '';
|
||||
styles = '@keyframes outlightbox {';
|
||||
styles += '0% {';
|
||||
styles += 'height: 100%;';
|
||||
styles += 'width: 100%;';
|
||||
styles += 'top: 0px;';
|
||||
styles += 'left: 0px;';
|
||||
styles += '}';
|
||||
styles += '50% {';
|
||||
styles += 'height: 220px;';
|
||||
styles += 'top: ' + bounding_box.y + 'px;';
|
||||
styles += '}';
|
||||
styles += '100% {';
|
||||
styles += 'height: 220px;';
|
||||
styles += 'width: '+bounding_box.width+'px;';
|
||||
styles += 'top: ' + bounding_box.y + 'px;';
|
||||
styles += 'left: ' + bounding_box.x + 'px;';
|
||||
styles += '}';
|
||||
styles += '}';
|
||||
|
||||
/* Add keyframe to CSS */
|
||||
$("#lightbox-animations").get(0).sheet.insertRule(styles, 0);
|
||||
|
||||
/* Hide the window scrollbar */
|
||||
$("body").css('overflow', 'hidden');
|
||||
});
|
||||
|
||||
/* Click on close button when full-screen */
|
||||
$(".close").on('click', function(e) {
|
||||
$(this).hide();
|
||||
$(".container-inner").hide();
|
||||
/* Window scrollbar normal */
|
||||
$("body").css('overflow', 'auto');
|
||||
|
||||
var bounding_box = $(this).parent().get(0).getBoundingClientRect();
|
||||
$(this).parent().css({ top: bounding_box.top + 'px', left: bounding_box.left + 'px' });
|
||||
|
||||
/* Show animation */
|
||||
$(this).parent().addClass('out-animation');
|
||||
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
/* On animationend : from normal to full screen & full screen to normal */
|
||||
$(".column").on('animationend', function(e) {
|
||||
/* On animation end from normal to full-screen */
|
||||
if(e.originalEvent.animationName == 'inlightbox') {
|
||||
$(this).children(".close").show();
|
||||
$(this).children(".container-inner").show();
|
||||
}
|
||||
/* On animation end from full-screen to normal */
|
||||
else if(e.originalEvent.animationName == 'outlightbox') {
|
||||
/* Remove fixed positioning, remove animation rules */
|
||||
$(this).removeClass('in-animation').removeClass('out-animation').removeClass('columnfade');
|
||||
|
||||
/* Remove the empty container that was earlier added */
|
||||
$("#empty-container").remove();
|
||||
|
||||
/* Delete the dynamic keyframe rule that was earlier created */
|
||||
$("#lightbox-animations").get(0).sheet.deleteRule(0);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// multiselect dropdowns
|
||||
$('.multiselect-trigger').on('mousedown touchend focusin focusout', function(e) {
|
||||
var state = $(this).data('state') || 0;
|
||||
if( state == 0 ) {
|
||||
// open the dropdown
|
||||
$(this).data('state', '1').addClass('open').removeClass('closed');
|
||||
$(this).find('.fa').removeClass('fa-chevron-down').addClass('fa-chevron-up');
|
||||
$(this).parent().find('.multiselect-contents').show();
|
||||
$(this).parent().find('.multiselect-contents').find('input[type="checkbox"]').parent().show();;
|
||||
$(this).parent().find('.multiselect-contents').find('input[type="checkbox"]').show();;
|
||||
} else {
|
||||
// close the dropdown
|
||||
$(this).data('state', '0').addClass('closed').removeClass('open');
|
||||
$(this).find('.fa').removeClass('fa-chevron-up').addClass('fa-chevron-down');
|
||||
//$(this).parent().find('.multiselect-contents').hide();
|
||||
//$(this).parent().find('.multiselect-contents').find('input[type="checkbox"]').hide();
|
||||
$(this).parent().find('.multiselect-contents').find('input[type="checkbox"]').not(":checked").parent().hide();;
|
||||
$(this).parent().find('.multiselect-contents').find('input[type="checkbox"]').hide();;
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
|
||||
// when no preference is checked, uncheck the others
|
||||
$('#multiselect1').on('change', function(e) {
|
||||
if( $(this).is(':checked') ) {
|
||||
$(this).parent().parent().find('input[type="checkbox"]').not('#multiselect1').prop('checked', false);
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
|
||||
BIN
images/icon.png
Normal file
BIN
images/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
131
index.html
131
index.html
@@ -4,24 +4,33 @@
|
||||
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
|
||||
<meta content="utf-8" http-equiv="encoding">
|
||||
|
||||
<meta name="copyright" content="© 2020 Stephen Seguin" />
|
||||
|
||||
<meta name="copyright" content="© 2020 Steve Seguin" />
|
||||
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="./images/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="./images/favicon-16x16.png">
|
||||
<link rel="icon" href="./images/favicon.ico" />
|
||||
<link itemprop="thumbnailUrl" href="./images/obsNinja_logo_full.png">
|
||||
|
||||
|
||||
<!-- Primary Meta Tags -->
|
||||
<title>OBS.Ninja</title>
|
||||
<meta name="title" content="OBS.Ninja">
|
||||
<meta name="description" content="Bring live video from your smartphone, computer, or friends directly into OBS Studio. 100% free.">
|
||||
<meta name="author" content="Steve Seguin">
|
||||
|
||||
<!-- Open Graph / Facebook -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://obs.ninja/">
|
||||
<meta property="og:title" content="OBS.Ninja">
|
||||
<meta property="og:description" content="Bring live video from your smartphone, computer, or friends directly into OBS Studio. 100% free.">
|
||||
<meta property="og:image" content="./images/obsNinja_logo_full.png">
|
||||
<meta property="og:site_name" content="OBS.Ninja" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://obs.ninja/" />
|
||||
<meta property="og:title" content="OBS.Ninja" />
|
||||
<meta property="og:description" content="Bring live video from your smartphone, computer, or friends directly into OBS Studio. 100% free." />
|
||||
<meta property="og:image" itemprop="image" content="./images/obsNinja_logo_full.png" />
|
||||
|
||||
<meta name="msapplication-TileImage" content="./images/obsNinja_logo_full.png">
|
||||
<meta property="og:image:type" content="image/png">
|
||||
|
||||
<meta property="og:image:width" content="256">
|
||||
<meta property="og:image:height" content="256">
|
||||
|
||||
<!-- Twitter -->
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
@@ -43,8 +52,18 @@
|
||||
|
||||
</head>
|
||||
<body id="main" class="cat">
|
||||
<script language="javascript" type="text/javascript" src="./thirdparty/CodecsHandler.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="./webrtc.js"></script>
|
||||
<span itemprop="image" itemscope itemtype="image/png">
|
||||
<link itemprop="url" href="./images/obsNinja_logo_full.png">
|
||||
</span>
|
||||
|
||||
<link itemprop="thumbnailUrl" href="./images/obsNinja_logo_full.png">
|
||||
<span itemprop="thumbnail" itemscope itemtype="http://schema.org/ImageObject">
|
||||
<link itemprop="url" href="./images/obsNinja_logo_full.png">
|
||||
</span>
|
||||
|
||||
|
||||
<script language="javascript" type="text/javascript" src="./thirdparty/CodecsHandler.js?ver=2"></script>
|
||||
<script language="javascript" type="text/javascript" src="./webrtc.js?ver=3"></script>
|
||||
<input id='zoomSlider'type="range" style="display:none">
|
||||
<div id="header">
|
||||
<font style="font-size:130%;">
|
||||
@@ -72,23 +91,23 @@
|
||||
</div>
|
||||
|
||||
</font>
|
||||
<span onclick="toggle(document.getElementById('languages'));" style="cursor:pointer;" ><i style="float:right; bottom:0px; cursor:pointer; position: absolute;right: 10px;color: #D9E4EB;padding: 0;margin:2px 2px 0 0 ; font-size: 140%;" class="fa fa-language" aria-hidden="true"></i></span>
|
||||
<span onclick="toggle(document.getElementById('languages'));" id="translateButton" style="cursor:pointer;" ><i style="float:right; bottom:0px; cursor:pointer; position: absolute;right: 10px;color: #D9E4EB;padding: 0;margin:2px 2px 0 0 ; font-size: 140%;" class="fa fa-language" aria-hidden="true"></i></span>
|
||||
|
||||
<hr />
|
||||
</div>
|
||||
|
||||
<div id="mutebutton" onclick="toggleMute()" class='advanced float3' style="cursor:pointer" alt="Toggle the mic">
|
||||
<i style="font-size:48px;color:white" id="mutetoggle" class="fa fa-microphone my-float"></i>
|
||||
<i id="mutetoggle" class="toggleSize fa fa-microphone my-float"></i>
|
||||
</div>
|
||||
<div id="mutevideobutton" onclick="toggleVideoMute()" class='advanced float4' style="cursor:pointer" alt="Toggle the camera">
|
||||
<i style="font-size:48px;color:white" id="mutevideotoggle" class="fa fa-eye my-float"></i>
|
||||
<i id="mutevideotoggle" class="toggleSize fa fa-eye my-float"></i>
|
||||
</div>
|
||||
<div id="helpbutton" onclick="alert('Email steve@seguin.email if the system breaks or check https://reddit.com/r/obsninja for support.\n\nThere are some advanced options hidden away, such as persistent stream links and custom resolutions.\n\nMacOS users should be using OBS v23 due to a bug in v24 and v25')" class='advanced float2' style="cursor:pointer" alt="How to Use This with OBS">
|
||||
<i style="font-size:48px;color:white;" class="fa fa-question-circle my-float"></i>
|
||||
<div id="helpbutton" onclick="alert('Email steve@seguin.email if the system breaks or check https://reddit.com/r/obsninja for support.\n\nThere are some advanced options hidden away, such as persistent stream links and custom resolutions.')" class='advanced float2' style="cursor:pointer" alt="How to Use This with OBS">
|
||||
<i class="toggleSize fa fa-question-circle my-float"></i>
|
||||
</div>
|
||||
|
||||
<div id="mainmenu" class="row" style="opacity: 0; align:center;">
|
||||
<div id="container-1" class="column columnfade" style="background-color:#ddd;">
|
||||
<div id="container-1" class="column columnfade" style="background-color:#ddd;overflow-y:auto;">
|
||||
<h2><span data-translate="add-group-chat">Add Group Chat to OBS</span></h2>
|
||||
<div class="container-inner">
|
||||
<br /><br /><span data-translate="rooms-allow-for">Rooms allow for simplified group-chat and the advanced management of multiple streams at once.</span><br /><br />
|
||||
@@ -116,7 +135,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="container-3" class="column columnfade" onclick="previewWebcam()" style="background-color:#ddd;">
|
||||
<div id="container-3" class="column columnfade" onclick="previewWebcam()" style="background-color:#ddd;overflow-y:auto;">
|
||||
<h2 id="add_camera"><span data-translate="add-your-camera">Add your Camera to OBS</span></h2>
|
||||
<div class="container-inner"><br />
|
||||
|
||||
@@ -164,12 +183,12 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="container-2" class="column columnfade" style="background-color:#ddd;">
|
||||
<div id="container-2" class="column columnfade" style="background-color:#ddd;overflow-y:auto;">
|
||||
<h2 id="add_screen"><span data-translate="remote-screenshare-obs">Remote Screenshare into OBS</span></h2>
|
||||
<div class="container-inner">
|
||||
<p><span data-translate="note-share-audio">
|
||||
<b>note</b>: Do not forget to click "Share audio" in Chrome.<br />(Firefox does not support audio sharing.)</p>
|
||||
<p><img src="./images/share.jpg" style="max-height:55vh"/></p>
|
||||
<p><img id="screenshare" /></p>
|
||||
</span>
|
||||
<br />
|
||||
<button style="padding:13px;border:3px solid #CCC; font-size:140%; cursor:pointer; background-color:#FFF" onclick="publishScreen()" ><span data-translate="select-screen-to-share">SELECT SCREEN TO SHARE</span></button>
|
||||
@@ -205,7 +224,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="container-4" class="column columnfade" style="background-color:#ddd;">
|
||||
<div id="container-4" class="column columnfade" style="background-color:#ddd;overflow-y:auto;">
|
||||
<h2><span data-translate="create-reusable-invite">Create Reusable Invite</span></h2>
|
||||
<div id="gencontent" class="container-inner">
|
||||
<br /><br />
|
||||
@@ -276,7 +295,7 @@
|
||||
<li>Some users will have <a href='https://github.com/steveseguin/obsninja/wiki/FAQ#video-is-pixelated'>"pixelation" problems</a> with videos. Adding <b>&codec=vp9</b> to the OBS links will often correct it.</li>
|
||||
<br />
|
||||
|
||||
Site last updated: <a href='https://www.reddit.com/r/OBSNinja/comments/gy7h4g/site_updated_on_june_7th_please_find_the_change/'>June 7th, 2020.</a> The previous version can be found at <a href="https://obs.ninja/v5/">https://obs.ninja/v5/</a> if you are having new issues.
|
||||
Site last updated: June 17th, 2020. The previous version can be found at <a href="https://obs.ninja/v6/">https://obs.ninja/v6/</a> if you are having new issues.
|
||||
|
||||
<br /><br />
|
||||
<i><h3>Check out the <a href="https://www.reddit.com/r/OBSNinja/">sub-reddit</a> <i class="fa fa-reddit-alien" aria-hidden="true"></i> for help and advanced info. I'm also on <a href="https://discord.gg/EksyhGA">Discord</a> and you can email me at steve@seguin.email</i></h3>
|
||||
@@ -316,11 +335,77 @@
|
||||
</div>
|
||||
<div id="languages" class="popup-message" style="display:none;right:0;bottom:25px;position:absolute;">
|
||||
<b>Available Languages:</b><br />
|
||||
<u><a onclick="changeLg('ru');toggle(document.getElementById('languages'));" style="cursor:pointer">Russian</a><br />
|
||||
<u>
|
||||
<a onclick="changeLg('ru');toggle(document.getElementById('languages'));" style="cursor:pointer">Russian</a><br />
|
||||
<a onclick="changeLg('fr');toggle(document.getElementById('languages'));" style="cursor:pointer">French</a><br />
|
||||
<a onclick="changeLg('en');toggle(document.getElementById('languages'));" style="cursor:pointer">English</a></u><br />
|
||||
<a onclick="changeLg('en');toggle(document.getElementById('languages'));" style="cursor:pointer">English</a><br />
|
||||
<a onclick="changeLg('pt');toggle(document.getElementById('languages'));" style="cursor:pointer">Portuguese </a><br />
|
||||
<a onclick="changeLg('it');toggle(document.getElementById('languages'));" style="cursor:pointer">Italian </a><br />
|
||||
</u><br />
|
||||
<a href="https://github.com/steveseguin/obsninja/tree/master/translations">Add More Here!</a><br />
|
||||
</div>
|
||||
<script type="text/javascript" id="main-js" data-translation="blank" src="./main.js"></script>
|
||||
|
||||
<script>
|
||||
|
||||
var session = WebRTC.Media; // session is a required global variable if configuring manually. Run before loading main.js but after webrtc.js.
|
||||
|
||||
session.streamID = session.generateStreamID(); // randomly generates a streamID for this session. You can set your own programmatically if needed
|
||||
|
||||
session.configuration =
|
||||
{iceServers: [
|
||||
{ urls: ["stun:stun.l.google.com:19302", "stun:stun4.l.google.com:19302" ]} // more than 4 stun+turn servers may cause issues
|
||||
]};
|
||||
|
||||
var turn = {};
|
||||
turn.username = "steve";
|
||||
turn.credential = "justtesting";
|
||||
turn.urls = ["turn:turn.obs.ninja:443"]; // US CENTRAL
|
||||
session.configuration.iceServers.push(turn);
|
||||
|
||||
turn = {};
|
||||
turn.username = "steve";
|
||||
turn.credential = "justtesting";
|
||||
turn.urls = ["turn:turn2.obs.ninja:443"]; // US WEST
|
||||
session.configuration.iceServers.push(turn);
|
||||
|
||||
// session.configuration.iceTransportPolicy = "relay"; // uncomment to enable "&privacy" and force the TURN server
|
||||
|
||||
///// The following lets you set the defaults
|
||||
|
||||
// session.webcamonly // true,false
|
||||
// session.stereo // 0,1,2,3
|
||||
// session.audiobitrate // int in kbps
|
||||
// session.view // "xxxx"
|
||||
// session.remote
|
||||
// session.optimize
|
||||
// session.disableOBS
|
||||
// session.audio
|
||||
// session.video
|
||||
// session.forceios
|
||||
// session.nocursor
|
||||
// session.codec
|
||||
// session.scale
|
||||
// session.bitrate // int in kbps
|
||||
// session.height // int
|
||||
// session.width // int
|
||||
// session.quality // int
|
||||
// session.sink
|
||||
// session.offsetChannel // int
|
||||
// session.audioChannels // int
|
||||
// session.security
|
||||
// session.framerate // int
|
||||
// session.sync
|
||||
// session.buffer // int in milliseconds
|
||||
// session.roomid // "yyyy"
|
||||
// session.scene
|
||||
// session.title // "zzzz"
|
||||
|
||||
</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" id="main-js" src="./main.js?ver=5"></script>
|
||||
<script type="text/javascript" src="./animations.js"></script>
|
||||
</body>
|
||||
|
||||
|
||||
147
thirdparty/CodecsHandler.js
vendored
147
thirdparty/CodecsHandler.js
vendored
@@ -21,6 +21,9 @@ Copyright (c) 2012-2020 [Muaz Khan](https://github.com/muaz-khan)
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
// Sourced from: https://cdn.webrtc-experiment.com/CodecsHandler.js
|
||||
|
||||
// *FILE HAS BEEN HEAVILY MODIFIED BY STEVE SEGUIN. ALL RIGHTS RESERVED WHERE APPLICABLE *
|
||||
|
||||
var CodecsHandler = (function() {
|
||||
function preferCodec(sdp, codecName) {
|
||||
var info = splitLines(sdp);
|
||||
@@ -118,16 +121,11 @@ var CodecsHandler = (function() {
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
function removeVPX(sdp) {
|
||||
var info = splitLines(sdp);
|
||||
|
||||
// last parameter below means: ignore these codecs
|
||||
sdp = preferCodecHelper(sdp, 'vp9', info, true);
|
||||
sdp = preferCodecHelper(sdp, 'vp8', info, true);
|
||||
|
||||
return sdp;
|
||||
}
|
||||
|
||||
function extractSdp(sdpLine, pattern) {
|
||||
var result = sdpLine.match(pattern);
|
||||
return (result && result.length == 2)? result[1]: null;
|
||||
}
|
||||
|
||||
function disableNACK(sdp) {
|
||||
if (!sdp || typeof sdp !== 'string') {
|
||||
@@ -142,72 +140,7 @@ var CodecsHandler = (function() {
|
||||
return sdp;
|
||||
}
|
||||
|
||||
function prioritize(codecMimeType, peer) {
|
||||
if (!peer || !peer.getSenders || !peer.getSenders().length) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!codecMimeType || typeof codecMimeType !== 'string') {
|
||||
throw 'Invalid arguments.';
|
||||
}
|
||||
|
||||
peer.getSenders().forEach(function(sender) {
|
||||
var params = sender.getParameters();
|
||||
for (var i = 0; i < params.codecs.length; i++) {
|
||||
if (params.codecs[i].mimeType == codecMimeType) {
|
||||
params.codecs.unshift(params.codecs.splice(i, 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
sender.setParameters(params);
|
||||
});
|
||||
}
|
||||
|
||||
function removeNonG722(sdp) {
|
||||
return sdp.replace(/m=audio ([0-9]+) RTP\/SAVPF ([0-9 ]*)/g, 'm=audio $1 RTP\/SAVPF 9');
|
||||
}
|
||||
|
||||
function setBAS(sdp, bandwidth, isScreen) {
|
||||
if (!bandwidth) {
|
||||
return sdp;
|
||||
}
|
||||
|
||||
if (typeof isFirefox !== 'undefined' && isFirefox) {
|
||||
return sdp;
|
||||
}
|
||||
|
||||
if (isScreen) {
|
||||
if (!bandwidth.screen) {
|
||||
console.warn('It seems that you are not using bandwidth for screen. Screen sharing is expected to fail.');
|
||||
} else if (bandwidth.screen < 300) {
|
||||
console.warn('It seems that you are using wrong bandwidth value for screen. Screen sharing is expected to fail.');
|
||||
}
|
||||
}
|
||||
|
||||
// if screen; must use at least 300kbs
|
||||
if (bandwidth.screen && isScreen) {
|
||||
sdp = sdp.replace(/b=AS([^\r\n]+\r\n)/g, '');
|
||||
sdp = sdp.replace(/a=mid:video\r\n/g, 'a=mid:video\r\nb=AS:' + bandwidth.screen + '\r\n');
|
||||
}
|
||||
|
||||
// remove existing bandwidth lines
|
||||
if (bandwidth.audio || bandwidth.video) {
|
||||
sdp = sdp.replace(/b=AS([^\r\n]+\r\n)/g, '');
|
||||
}
|
||||
|
||||
if (bandwidth.audio) {
|
||||
sdp = sdp.replace(/a=mid:audio\r\n/g, 'a=mid:audio\r\nb=AS:' + bandwidth.audio + '\r\n');
|
||||
}
|
||||
|
||||
if (bandwidth.screen) {
|
||||
sdp = sdp.replace(/a=mid:video\r\n/g, 'a=mid:video\r\nb=AS:' + bandwidth.screen + '\r\n');
|
||||
} else if (bandwidth.video) {
|
||||
sdp = sdp.replace(/a=mid:video\r\n/g, 'a=mid:video\r\nb=AS:' + bandwidth.video + '\r\n');
|
||||
}
|
||||
|
||||
return sdp;
|
||||
}
|
||||
|
||||
|
||||
// Find the line in sdpLines that starts with |prefix|, and, if specified,
|
||||
// contains |substr| (case-insensitive search).
|
||||
function findLine(sdpLines, prefix, substr) {
|
||||
@@ -236,21 +169,41 @@ var CodecsHandler = (function() {
|
||||
return (result && result.length === 2) ? result[1] : null;
|
||||
}
|
||||
|
||||
function setVideoBitrates(sdp, params) {
|
||||
function setVideoBitrates(sdp, params, codec) { // modified + Improved by Steve.
|
||||
|
||||
if (codec){
|
||||
codec = codec.toUpperCase();
|
||||
} else{
|
||||
codec="VP8";
|
||||
}
|
||||
|
||||
var sdpLines = sdp.split('\r\n');
|
||||
|
||||
// Search for m line.
|
||||
var mLineIndex = findLine(sdpLines, 'm=', 'video');
|
||||
if (mLineIndex === null) {
|
||||
return sdp;
|
||||
}
|
||||
// Figure out the first codec payload type on the m=video SDP line.
|
||||
var videoMLine = sdpLines[mLineIndex];
|
||||
var pattern = new RegExp('m=video\\s\\d+\\s[A-Z/]+\\s');
|
||||
var sendPayloadType = videoMLine.split(pattern)[1].split(' ')[0];
|
||||
var fmtpLine = sdpLines[findLine(sdpLines, 'a=rtpmap', sendPayloadType)];
|
||||
var codecName = fmtpLine.split('a=rtpmap:' + sendPayloadType)[1].split('/')[0];
|
||||
|
||||
codec = codecName || codec; // Try to find first Codec; else use expected/default
|
||||
|
||||
params = params || {};
|
||||
var xgoogle_min_bitrate = params.min;
|
||||
var xgoogle_max_bitrate = params.max;
|
||||
var xgoogle_min_bitrate = params.min.toString();
|
||||
var xgoogle_max_bitrate = params.max.toString();
|
||||
|
||||
var sdpLines = sdp.split('\r\n');
|
||||
|
||||
// VP8
|
||||
var vp8Index = findLine(sdpLines, 'a=rtpmap', 'VP8/90000');
|
||||
var vp8Payload;
|
||||
if (vp8Index) {
|
||||
vp8Payload = getCodecPayloadType(sdpLines[vp8Index]);
|
||||
var codecIndex = findLine(sdpLines, 'a=rtpmap', codec+'/90000');
|
||||
var codecPayload;
|
||||
if (codecIndex) {
|
||||
codecPayload = getCodecPayloadType(sdpLines[codecIndex]);
|
||||
}
|
||||
|
||||
if (!vp8Payload) {
|
||||
if (!codecPayload) {
|
||||
return sdp;
|
||||
}
|
||||
|
||||
@@ -267,7 +220,7 @@ var CodecsHandler = (function() {
|
||||
var rtxFmtpLineIndex = findLine(sdpLines, 'a=fmtp:' + rtxPayload.toString());
|
||||
if (rtxFmtpLineIndex !== null) {
|
||||
var appendrtxNext = '\r\n';
|
||||
appendrtxNext += 'a=fmtp:' + vp8Payload + ' x-google-min-bitrate=' + (xgoogle_min_bitrate || '228') + '; x-google-max-bitrate=' + (xgoogle_max_bitrate || '228');
|
||||
appendrtxNext += 'a=fmtp:' + codecPayload + ' x-google-min-bitrate=' + (xgoogle_min_bitrate || '228') + '; x-google-max-bitrate=' + (xgoogle_max_bitrate || '228');
|
||||
sdpLines[rtxFmtpLineIndex] = sdpLines[rtxFmtpLineIndex].concat(appendrtxNext);
|
||||
sdp = sdpLines.join('\r\n');
|
||||
}
|
||||
@@ -357,26 +310,18 @@ var CodecsHandler = (function() {
|
||||
}
|
||||
|
||||
return {
|
||||
removeVPX: removeVPX,
|
||||
disableNACK: disableNACK,
|
||||
prioritize: prioritize,
|
||||
removeNonG722: removeNonG722,
|
||||
setApplicationSpecificBandwidth: function(sdp, bandwidth, isScreen) {
|
||||
return setBAS(sdp, bandwidth, isScreen);
|
||||
},
|
||||
setVideoBitrates: function(sdp, params) {
|
||||
return setVideoBitrates(sdp, params);
|
||||
|
||||
setVideoBitrates: function(sdp, params, codec) {
|
||||
return setVideoBitrates(sdp, params, codec);
|
||||
},
|
||||
setOpusAttributes: function(sdp, params) {
|
||||
return setOpusAttributes(sdp, params);
|
||||
},
|
||||
preferVP9: function(sdp) {
|
||||
return preferCodec(sdp, 'vp9');
|
||||
},
|
||||
|
||||
preferCodec: preferCodec,
|
||||
|
||||
forceStereoAudio: forceStereoAudio
|
||||
};
|
||||
})();
|
||||
|
||||
// backward compatibility
|
||||
window.BandwidthHandler = CodecsHandler;
|
||||
|
||||
@@ -1,42 +1,51 @@
|
||||
{
|
||||
"GO": "GO",
|
||||
"add-group-chat": "Add Group Chat",
|
||||
"add-to-group": "Add to Group Scene",
|
||||
"add-your-camera": "Add your Camera",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>Anyone can enter a room if they know the name, so keep it unique</li>\n\t\t\t\t<li>Having more than four (4) people in a room is not advisable due to performance reasons, but it depends on your hardware.</li>\n\t\t\t\t<li>iOS devices will have their video only be visible to the director. This is a hardware limitation.</li>\n\t\t\t\t<li>The \"Recording\" option is new and is considered experimental.</li>\n\t\t\t\t<li>You must \"Add\" a video feed to the \"Group Scene\" for it to appear there.</li>\n\t\t\t\t<li>There is a new \"enhanced fullscreen\" button added to the Guest's view.</li>\n\t\t\t\t",
|
||||
"advanced-paramaters": "Advanced Parameters",
|
||||
"audio-sources": "Audio Sources",
|
||||
"back": "Back",
|
||||
"balanced": "Balanced",
|
||||
"copy-this-url": "Sharable Link to this video",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"force-vp9-video-codec": "Force VP9 Video Codec (less artifacting)",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"here-you-can-pre-generate": "Here you can pre-generate a reusable view link and a related guest invite link.",
|
||||
"high-security-mode": "High Security Mode",
|
||||
"info-blob": "",
|
||||
"joining-room": "You are joining room",
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
"max-resolution": "Max Resolution",
|
||||
"mute": "Mute",
|
||||
"no-audio": "No Audio",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>note</b>: Do not forget to click \"Share audio\" in Chrome.<br>(Firefox does not support audio sharing.)",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"record": "Record",
|
||||
"remote-control-for-obs": "Remote Control",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"room-name": "Room Name",
|
||||
"rooms-allow-for": "Rooms allow for simplified group-chat and the advanced management of multiple streams at once.",
|
||||
"select-audio-source": "Select Audio Sources",
|
||||
"select-audio-video": "Select the audio/video source below",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"show-tips": "Show me some tips..",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"unlock-video-bitrate": "Unlock Video Bitrate (20mbps)",
|
||||
"video-source": "Video source",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "You are in the room's control center"
|
||||
}
|
||||
{
|
||||
"GO": "GO",
|
||||
"add-group-chat": "Add Group Chat",
|
||||
"add-to-group": "Add to Group Scene",
|
||||
"add-your-camera": "Add your Camera",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>Anyone can enter a room if they know the name, so keep it unique</li>\n\t\t\t\t<li>Having more than four (4) people in a room is not advisable due to performance reasons, but it depends on your hardware.</li>\n\t\t\t\t<li>iOS devices will have their video only be visible to the director. This is a hardware limitation.</li>\n\t\t\t\t<li>The \"Recording\" option is new and is considered experimental.</li>\n\t\t\t\t<li>You must \"Add\" a video feed to the \"Group Scene\" for it to appear there.</li>\n\t\t\t\t<li>There is a new \"enhanced fullscreen\" button added to the Guest's view.</li>\n\t\t\t\t",
|
||||
"advanced-paramaters": "Advanced Parameters",
|
||||
"audio-sources": "Audio Sources",
|
||||
"back": "Back",
|
||||
"balanced": "Balanced",
|
||||
"copy-this-url": "Sharable Link to this video",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"force-vp9-video-codec": "Force VP9 Video Codec (less artifacting)",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"here-you-can-pre-generate": "Here you can pre-generate a reusable view link and a related guest invite link.",
|
||||
"high-security-mode": "High Security Mode",
|
||||
"info-blob": "",
|
||||
"joining-room": "You are joining room",
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS Ninja",
|
||||
"max-resolution": "Max Resolution",
|
||||
"mute": "Mute",
|
||||
"no-audio": "No Audio",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>note</b>: Do not forget to click \"Share audio\" in Chrome.<br>(Firefox does not support audio sharing.)",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"record": "Record",
|
||||
"remote-control-for-obs": "Remote Control",
|
||||
"remote-screenshare-obs": "Remote Screenshare",
|
||||
"room-name": "Room Name",
|
||||
"rooms-allow-for": "Rooms allow for simplified group-chat and the advanced management of multiple streams at once.",
|
||||
"select-audio-source": "Select Audio Sources",
|
||||
"select-audio-video": "Select the audio/video source below",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"show-tips": "Show me some tips..",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"unlock-video-bitrate": "Unlock Video Bitrate (20mbps)",
|
||||
"video-source": "Video source",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "You are in the room's control center",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"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"
|
||||
}
|
||||
50
translations/default.json
Normal file
50
translations/default.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"GO": "GO",
|
||||
"copy-this-url": "Copy this URL into an OBS \"Browser Source\"",
|
||||
"you-are-in-the-control-center": "You are in the room's control center",
|
||||
"joining-room": "You are joining room",
|
||||
"add-group-chat": "Add Group Chat to OBS",
|
||||
"rooms-allow-for": "Rooms allow for simplified group-chat and the advanced management of multiple streams at once.",
|
||||
"room-name": "Room Name",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"show-tips": "Show me some tips..",
|
||||
"added-notes": "\n<u><i>Added Notes:</i></u>\n<li>Anyone can enter a room if they know the name, so keep it unique</li>\n<li>Invite only guests to the room you trust.</li>\n<li>iOS devices will share just their audio with other guests; this is mainly a hardware limitation</li>\n<li>The \"Recording\" option is considered experimental.</li>\n",
|
||||
"back": "Back",
|
||||
"add-your-camera": "Add your Camera to OBS",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-source": "Video source",
|
||||
"max-resolution": "1080p (hi-def)",
|
||||
"balanced": "720p (balanced)",
|
||||
"smooth-cool": "360p (smooth)",
|
||||
"select-audio-source": "Select Audio Source",
|
||||
"no-audio": "No Audio",
|
||||
"remote-screenshare-obs": "Remote Screenshare into OBS",
|
||||
"note-share-audio": "\n<b>note</b>: Do not forget to click \"Share audio\" in Chrome.<br>(Firefox does not support audio sharing.)",
|
||||
"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 (less artifacting)",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"high-security-mode": "High Security Mode",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"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",
|
||||
"info-blob": "\n<h2>What is OBS.Ninja</h2><br>\n<li>100% <b>free</b>; no downloads; no personal data collection; no sign-in</li>\n<li>Bring video from your smartphone, computer, or friends directly into your OBS video stream</li>\n<li>We use cutting edge Peer-to-Peer forwarding technology that offers privacy and ultra-low latency</li>\n<br>\n<li>Youtube video <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Demoing it here</a> </li>\n<br>\n<i><font style=\"color:red\">Known issues:</font></i><br>\n<li><i class=\"fa fa-apple\" aria-hidden=\"true\"></i> <a href=\"https://github.com/steveseguin/obsninja/wiki/FAQ#mac-os\">MacOS users</a> need to use OBS v23 or resort to <a href=\"https://github.com/steveseguin/electroncapture\">Window Capturing</a> a browser with OBS v25</li>\n<li>Some users will have <a href=\"https://github.com/steveseguin/obsninja/wiki/FAQ#video-is-pixelated\">\"pixelation\" problems</a> with videos. Adding <b>&codec=vp9</b> to the OBS links will often correct it.</li>\n<br>\n",
|
||||
"remote-control-for-obs": "Remote Control for OBS",
|
||||
"add-to-group": "Add to Group Scene",
|
||||
"mute": "Mute",
|
||||
"record": "Record",
|
||||
"volume": "Volume",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"copy-to-clipboard": "Copy to Clipboard"
|
||||
}
|
||||
@@ -1,42 +1,51 @@
|
||||
{
|
||||
"GO": "GO",
|
||||
"add-group-chat": "Add Group Chat to OBS",
|
||||
"add-to-group": "Add to Group Scene",
|
||||
"add-your-camera": "Add your Camera to OBS",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>Anyone can enter a room if they know the name, so keep it unique</li>\n\t\t\t\t<li>Having more than four (4) people in a room is not advisable due to performance reasons, but it depends on your hardware.</li>\n\t\t\t\t<li>iOS devices are limited to group sizes of no more than two (2) people. This is a hardware limitation.</li>\n\t\t\t\t<li>The \"Recording\" option is new and is considered experimental.</li>\n\t\t\t\t<li>You must \"Add\" a video feed to the \"Group Scene\" for it to appear there.</li>\n\t\t\t\t<li>There is a new \"enhanced fullscreen\" button added to the Guest's view.</li>\n\t\t\t\t",
|
||||
"advanced-paramaters": "Advanced Parameters",
|
||||
"audio-sources": "Audio Sources",
|
||||
"back": "Back",
|
||||
"balanced": "Balanced",
|
||||
"copy-this-url": "Copy this URL into an OBS \"Browser Source\"",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"force-vp9-video-codec": "Force VP9 Video Codec (less artifacting)",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"here-you-can-pre-generate": "Here you can pre-generate a reusable Browser Source link and a related guest invite link.",
|
||||
"high-security-mode": "High Security Mode",
|
||||
"info-blob": "\n\t\t\t\t\t\t<h2>What is OBS.Ninja</h2><br>\n\t\t\t\t\t\t<li>100% <b>free</b>; no downloads; no personal data collection; no sign-in</li>\n\t\t\t\t\t\t<li>Bring video from your smartphone, laptop, computer, or from your friends directly into your OBS video stream</li>\n\t\t\t\t\t\t<li>We use cutting edge Peer-to-Peer forwarding technology that offers privacy and ultra-low latency</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<li>Youtube video <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Demoing it here</a> </li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<i><font style=\"color:red\">Known issues:</font></i><br>\n\n\t\t\t\t\t\t<li><i class=\"fa fa-apple\" aria-hidden=\"true\"></i> MacOS users need to use OBS v23 or resort to <i>Window Capturing</i> a Chrome Browser with OBS v25</li>\n\t\t\t\t\t\t<li>Some users will have \"pixelation\" problems with videos. Please add the URL parameter <b>&codec=vp9</b> to the OBS Links to correct it.</li>\n\t\t\t\t\t\t<br><i></i><h3><i>Check out the <a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a> <i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"></i> for help and advanced info. I'm also on <a href=\"https://discord.gg/EksyhGA\">Discord</a> and you can email me at steve@seguin.email</i></h3>\n\t\t\t\t\t",
|
||||
"joining-room": "You are joining room",
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"max-resolution": "Max Resolution",
|
||||
"mute": "Mute",
|
||||
"no-audio": "No Audio",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>note</b>: Do not forget to click \"Share audio\" in Chrome.<br>(Firefox does not support audio sharing.)",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"record": "Record",
|
||||
"remote-control-for-obs": "Remote Control for OBS",
|
||||
"remote-screenshare-obs": "Remote Screenshare into OBS",
|
||||
"room-name": "Room Name",
|
||||
"rooms-allow-for": "Rooms allow for simplified group-chat and the advanced management of multiple streams at once.",
|
||||
"select-audio-source": "Select Audio Sources",
|
||||
"select-audio-video": "Select the audio/video source below",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"show-tips": "Show me some tips..",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"unlock-video-bitrate": "Unlock Video Bitrate (20mbps)",
|
||||
"video-source": "Video source",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "You are in the room's control center"
|
||||
}
|
||||
{
|
||||
"GO": "GO",
|
||||
"add-group-chat": "Add Group Chat to OBS",
|
||||
"add-to-group": "Add to Group Scene",
|
||||
"add-your-camera": "Add your Camera to OBS",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>Anyone can enter a room if they know the name, so keep it unique</li>\n\t\t\t\t<li>Having more than four (4) people in a room is not advisable due to performance reasons, but it depends on your hardware.</li>\n\t\t\t\t<li>iOS devices are limited to group sizes of no more than two (2) people. This is a hardware limitation.</li>\n\t\t\t\t<li>The \"Recording\" option is new and is considered experimental.</li>\n\t\t\t\t<li>You must \"Add\" a video feed to the \"Group Scene\" for it to appear there.</li>\n\t\t\t\t<li>There is a new \"enhanced fullscreen\" button added to the Guest's view.</li>\n\t\t\t\t",
|
||||
"advanced-paramaters": "Advanced Parameters",
|
||||
"audio-sources": "Audio Sources",
|
||||
"back": "Back",
|
||||
"balanced": "Balanced",
|
||||
"copy-this-url": "Copy this URL into an OBS \"Browser Source\"",
|
||||
"copy-to-clipboard": "Copy to Clipboard",
|
||||
"create-reusable-invite": "Create Reusable Invite",
|
||||
"enable-stereo-and-pro": "Enable Stereo and Pro HD Audio",
|
||||
"enter-the-rooms-control": "Enter the Room's Control Center",
|
||||
"force-vp9-video-codec": "Force VP9 Video Codec (less artifacting)",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"here-you-can-pre-generate": "Here you can pre-generate a reusable Browser Source link and a related guest invite link.",
|
||||
"high-security-mode": "High Security Mode",
|
||||
"info-blob": "\n\t\t\t\t\t\t<h2>What is OBS.Ninja</h2><br>\n\t\t\t\t\t\t<li>100% <b>free</b>; no downloads; no personal data collection; no sign-in</li>\n\t\t\t\t\t\t<li>Bring video from your smartphone, laptop, computer, or from your friends directly into your OBS video stream</li>\n\t\t\t\t\t\t<li>We use cutting edge Peer-to-Peer forwarding technology that offers privacy and ultra-low latency</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<li>Youtube video <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Demoing it here</a> </li>\n\t\t\t\t\t\t<li>Code is available here: <i class=\"fa fa-github\" aria-hidden=\"true\"></i> <a href=\"https://github.com/steveseguin/obsninja\">https://github.com/steveseguin/obsninja</a> </li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<i><font style=\"color:red\">Known issues:</font></i><br>\n\n\t\t\t\t\t\t<li><i class=\"fa fa-apple\" aria-hidden=\"true\"></i> MacOS users need to use OBS v23 or resort to <i>Window Capturing</i> a Chrome Browser with OBS v25</li>\n\t\t\t\t\t\t<li>Some users will have \"pixelation\" problems with videos. Please add the URL parameter <b>&codec=vp9</b> to the OBS Links to correct it.</li>\n\t<h3><i>Check out the <a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a> <i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"></i> for help and advanced info. I'm also on <a href=\"https://discord.gg/EksyhGA\">Discord</a> and you can email me at steve@seguin.email</i></h3>\n\t\t\t\t\t",
|
||||
"joining-room": "You are joining room",
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"max-resolution": "Max Resolution",
|
||||
"mute": "Mute",
|
||||
"no-audio": "No Audio",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>note</b>: Do not forget to click \"Share audio\" in Chrome.<br>(Firefox does not support audio sharing.)",
|
||||
"open-in-new-tab": "Open in new Tab",
|
||||
"record": "Record",
|
||||
"remote-control-for-obs": "Remote Control for OBS",
|
||||
"remote-screenshare-obs": "Remote Screenshare into OBS",
|
||||
"room-name": "Room Name",
|
||||
"rooms-allow-for": "Rooms allow for simplified group-chat and the advanced management of multiple streams at once.",
|
||||
"select-audio-source": "Select Audio Sources",
|
||||
"select-audio-video": "Select the audio/video source below",
|
||||
"select-screen-to-share": "SELECT SCREEN TO SHARE",
|
||||
"show-tips": "Show me some tips..",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"unlock-video-bitrate": "Unlock Video Bitrate (20mbps)",
|
||||
"video-source": "Video source",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "You are in the room's control center",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"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"
|
||||
}
|
||||
@@ -1,42 +1,51 @@
|
||||
{
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"GO": "Aller",
|
||||
"add-group-chat": "Conversation de groupe",
|
||||
"add-to-group": "Ajouter à la scène de groupe",
|
||||
"add-your-camera": "Ajoutez votre caméra à OBS",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>N'importe qui peut entrer dans une pièce s'il connaît le nom, alors gardez-le unique</li>\n\t\t\t\t<li>Il n'est pas conseillé d'avoir plus de quatre (4) personnes dans une pièce pour des raisons de performances, mais cela dépend de votre matériel.</li>\n\t\t\t\t<li>Les appareils iOS sont limités à des groupes de deux (2) personnes maximum. Il s'agit d'une limitation matérielle.</li>\n\t\t\t\t\n\t\t\t\t",
|
||||
"advanced-paramaters": "Paramètres avancés",
|
||||
"audio-sources": "Sources audio",
|
||||
"back": "Retour",
|
||||
"balanced": "Équilibré",
|
||||
"copy-this-url": "Copiez cette URL dans un OBS \"Browser Source\"",
|
||||
"copy-to-clipboard": "Copier dans le presse-papier",
|
||||
"create-reusable-invite": "Créer une invitation réutilisable",
|
||||
"enable-stereo-and-pro": "Activer l'audio stéréo et Pro HD",
|
||||
"enter-the-rooms-control": "Entrez dans le centre de contrôle de la pièce",
|
||||
"force-vp9-video-codec": "Forcer le codec vidéo VP9",
|
||||
"generate-invite-link": "GÉNÉRER LE LIEN D'INVITATION",
|
||||
"here-you-can-pre-generate": "Ici, vous pouvez pré-générer un lien de source de navigateur réutilisable et un lien d'invitation d'invité associé.",
|
||||
"high-security-mode": "Mode haute sécurité",
|
||||
"info-blob": "\n\t\t\t\t\t\t<h2>Qu'est-ce que OBS.Ninja</h2><br>\n\t\t\t\t\t\t<li>100% <b> gratuit </b>; aucun téléchargement; aucune collecte de données personnelles; pas de connexion</li>\n\t\t\t\t\t\t<li>Importez des vidéos de votre smartphone, ordinateur portable, ordinateur ou de vos amis directement dans votre flux vidéo OBS</li>\n\t\t\t\t\t\t<li>Nous utilisons une technologie de transfert Peer-to-Peer de pointe qui offre une confidentialité et une latence ultra-faible</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<li>Youtube video <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Démonstration ici</a> </li>\n\t\t\t\t\t\t<li>Le code est disponible ici: <i class=\"fa fa-github\" aria-hidden=\"true\"></i> <a href=\"https://github.com/steveseguin/obsninja\">https://github.com/steveseguin/obsninja</a> </li>\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t<i>Découvrez le <a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a> <i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"></i> pour de l'aide et des informations avancées.</i></h3>",
|
||||
"joining-room": "Vous rejoignez la salle",
|
||||
"max-resolution": "Résolution max",
|
||||
"mute": "Mute",
|
||||
"no-audio": "Pas de son",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>note</b>: N'oubliez pas de cliquer sur Partager l'audio dans Chrome.<br>(Firefox ne prend pas en charge le partage audio.)",
|
||||
"open-in-new-tab": "Ouvrir dans un nouvel onglet",
|
||||
"record": "Record",
|
||||
"remote-control-for-obs": "Télécommande pour OBS",
|
||||
"remote-screenshare-obs": "Partage d'écran à distance dans OBS",
|
||||
"room-name": "Nom de la salle",
|
||||
"rooms-allow-for": "Les salles permettent une conversation de groupe simplifiée et la gestion avancée de plusieurs flux à la fois.",
|
||||
"select-audio-source": "Sélectionnez les sources audio",
|
||||
"select-audio-video": "Sélectionnez la source audio / vidéo ci-dessous",
|
||||
"select-screen-to-share": "CHOISIR L'ÉCRAN À PARTAGER",
|
||||
"show-tips": "Montrez-moi quelques conseils ..",
|
||||
"smooth-cool": "Lisse et frais",
|
||||
"unlock-video-bitrate": "Déverrouiller le débit vidéo (20 Mbps)",
|
||||
"video-source": "Source vidéo",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "Vous êtes dans le centre de contrôle de la pièce"
|
||||
}
|
||||
{
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"GO": "Aller",
|
||||
"add-group-chat": "Conversation de groupe",
|
||||
"add-to-group": "Ajouter à la scène de groupe",
|
||||
"add-your-camera": "Ajoutez votre caméra à OBS",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>N'importe qui peut entrer dans une pièce s'il connaît le nom, alors gardez-le unique</li>\n\t\t\t\t<li>Il n'est pas conseillé d'avoir plus de quatre (4) personnes dans une pièce pour des raisons de performances, mais cela dépend de votre matériel.</li>\n\t\t\t\t<li>Les appareils iOS sont limités à des groupes de deux (2) personnes maximum. Il s'agit d'une limitation matérielle.</li>\n\t\t\t\t\n\t\t\t\t",
|
||||
"advanced-paramaters": "Paramètres avancés",
|
||||
"audio-sources": "Sources audio",
|
||||
"back": "Retour",
|
||||
"balanced": "Équilibré",
|
||||
"copy-this-url": "Copiez cette URL dans un OBS \"Browser Source\"",
|
||||
"copy-to-clipboard": "Copier dans le presse-papier",
|
||||
"create-reusable-invite": "Créer une invitation réutilisable",
|
||||
"enable-stereo-and-pro": "Activer l'audio stéréo et Pro HD",
|
||||
"enter-the-rooms-control": "Entrez dans le centre de contrôle de la pièce",
|
||||
"force-vp9-video-codec": "Forcer le codec vidéo VP9",
|
||||
"generate-invite-link": "GÉNÉRER LE LIEN D'INVITATION",
|
||||
"here-you-can-pre-generate": "Ici, vous pouvez pré-générer un lien de source de navigateur réutilisable et un lien d'invitation d'invité associé.",
|
||||
"high-security-mode": "Mode haute sécurité",
|
||||
"info-blob": "\n\t\t\t\t\t\t<h2>Qu'est-ce que OBS.Ninja</h2><br>\n\t\t\t\t\t\t<li>100% <b> gratuit </b>; aucun téléchargement; aucune collecte de données personnelles; pas de connexion</li>\n\t\t\t\t\t\t<li>Importez des vidéos de votre smartphone, ordinateur portable, ordinateur ou de vos amis directement dans votre flux vidéo OBS</li>\n\t\t\t\t\t\t<li>Nous utilisons une technologie de transfert Peer-to-Peer de pointe qui offre une confidentialité et une latence ultra-faible</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<li>Youtube video <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Démonstration ici</a> </li>\n\t\t\t\t\t\t<li>Le code est disponible ici: <i class=\"fa fa-github\" aria-hidden=\"true\"></i> <a href=\"https://github.com/steveseguin/obsninja\">https://github.com/steveseguin/obsninja</a> </li>\n\t\t\t\t\t\t<h3>\n\t\t\t\t\t<i>Découvrez le <a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a> <i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"></i> pour de l'aide et des informations avancées.</i></h3>",
|
||||
"joining-room": "Vous rejoignez la salle",
|
||||
"max-resolution": "Résolution max",
|
||||
"mute": "Mute",
|
||||
"no-audio": "Pas de son",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>note</b>: N'oubliez pas de cliquer sur Partager l'audio dans Chrome.<br>(Firefox ne prend pas en charge le partage audio.)",
|
||||
"open-in-new-tab": "Ouvrir dans un nouvel onglet",
|
||||
"record": "Record",
|
||||
"remote-control-for-obs": "Télécommande pour OBS",
|
||||
"remote-screenshare-obs": "Partage d'écran à distance dans OBS",
|
||||
"room-name": "Nom de la salle",
|
||||
"rooms-allow-for": "Les salles permettent une conversation de groupe simplifiée et la gestion avancée de plusieurs flux à la fois.",
|
||||
"select-audio-source": "Sélectionnez les sources audio",
|
||||
"select-audio-video": "Sélectionnez la source audio / vidéo ci-dessous",
|
||||
"select-screen-to-share": "CHOISIR L'ÉCRAN À PARTAGER",
|
||||
"show-tips": "Montrez-moi quelques conseils ..",
|
||||
"smooth-cool": "Lisse et frais",
|
||||
"unlock-video-bitrate": "Déverrouiller le débit vidéo (20 Mbps)",
|
||||
"video-source": "Source vidéo",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "Vous êtes dans le centre de contrôle de la pièce",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"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"
|
||||
}
|
||||
50
translations/it.json
Normal file
50
translations/it.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"GO": "Entra",
|
||||
"copy-this-url": "Copia questo URL in un OBS \"Browser Source\"",
|
||||
"you-are-in-the-control-center": "Sei nel pannello di controllo",
|
||||
"joining-room": "Ti stai unendo alla stanza",
|
||||
"add-group-chat": "Aggiungi chat di gruppo a OBS",
|
||||
"rooms-allow-for": "Le stanze consentono una chat di gruppo semplificata e la gestione avanzata di più flussi contemporaneamente.",
|
||||
"room-name": "Nome stanza",
|
||||
"enter-the-rooms-control": "Entra nella gestione della stanza",
|
||||
"show-tips": "Mosta alcuni suggerimenti..",
|
||||
"added-notes": "\n<u><i>Aggiungi note:</i></u>\n<li>Chiunque può entrare in una stanza se conosce il nome, quindi mantienilo unico</li>\n<li>Invita solo persone fidate nella stanza.</li>\n<li>I dispositivi iOS condivideranno solo il loro audio con altri ospiti; questa è principalmente una limitazione hardware</li>\n<li>Opzione \"Registrazione\" è considerata opzioneale.</li>\n",
|
||||
"back": "Indietro",
|
||||
"add-your-camera": "Aggiungi camera ad OBS",
|
||||
"waiting-for-camera": "In attesa di caricamento",
|
||||
"video-source": "Sorgente Video",
|
||||
"max-resolution": "1080p (hi-def)",
|
||||
"balanced": "720p (balanced)",
|
||||
"smooth-cool": "360p (smooth)",
|
||||
"select-audio-source": "Seleziona sorgente audio",
|
||||
"no-audio": "No Audio",
|
||||
"remote-screenshare-obs": "Screenshare remoto dentro OBS",
|
||||
"note-share-audio": "\n<b>note</b>: Do not forget to click \"Share audio\" in Chrome.<br>(Firefox does not support audio sharing.)",
|
||||
"select-screen-to-share": "Seleziona lo schermo da condividere",
|
||||
"audio-sources": "Sorgenti Audio",
|
||||
"create-reusable-invite": "Crea un invito riutilizzabile",
|
||||
"here-you-can-pre-generate": "Qui è possibile pre-generare un collegamento Sorgente del browser riutilizzabile e un collegamento di invito ospite correlato.",
|
||||
"generate-invite-link": "GENERATE THE INVITE LINK",
|
||||
"advanced-paramaters": "Opzioni avanzate:",
|
||||
"unlock-video-bitrate": "Sblocca Video Bitrate (20mbps)",
|
||||
"force-vp9-video-codec": "Forza VP9 Video Codec (less artifacting)",
|
||||
"enable-stereo-and-pro": "Abilita Stereo e Pro HD Audio",
|
||||
"video-resolution": "Risoluzioni Video: ",
|
||||
"high-security-mode": "Modalità sicurezza alta",
|
||||
"hide-screen-share": "Nascondi opzione Screenshare",
|
||||
"allow-remote-control": "Controllo remoto camera zoom (android)",
|
||||
"add-the-guest-to-a-room": "Aggiungi l'ospite a una stanza:",
|
||||
"invite-group-chat-type": "In questa stanza ospite può fare:",
|
||||
"can-see-and-hear": "Può vedere e ascoltare la chat di gruppo",
|
||||
"can-hear-only": "Può solo ascoltare la chat di gruppo",
|
||||
"cant-see-or-hear": "Impossibile ascoltare o vedere la chat di gruppo",
|
||||
"info-blob": "\n<h2>Cosa è OBS.Ninja</h2><br>\n<li>100% <b>free</b>; nessun download; nessuna raccolta di dati personali; nessun accesso</li>\n<li>Porta video dal tuo smartphone, computer o amici direttamente nel tuo flusso video OBS</li>\n<li>Utilizziamo una tecnologia di inoltro peer-to-peer all'avanguardia che offre privacy e latenza ultra bassa</li>\n<br>\n<li>Youtube video <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Demoing è presente</a> </li>\n<br>\n<i><font style=\"color:red\">Problemi conosciuti:</font></i><br>\n<li><i class=\"fa fa-apple\" aria-hidden=\"true\"></i> <a href=\"https://github.com/steveseguin/obsninja/wiki/FAQ#mac-os\">Utenti MacOS </a> è necessario utilizzare OBS v23 o ricorrere a <a href=\"https://github.com/steveseguin/electroncapture\">Window Capturing</a> a browser with OBS v25</li>\n<li>Alcuni utenti hanno problemi di <a href=\"https://github.com/steveseguin/obsninja/wiki/FAQ#video-is-pixelated\">\"pixelation\" </a>. Aggiungi <b>&codec=vp9</b> ai collegamenti OBS. </li>\n<br>\n<i></i><h3><i>Mi trovi anche su <a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a> <i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"></i> per aiuto e supporto. Sono presente su <a href=\"https://discord.gg/EksyhGA\">Discord</a>e via email su steve@seguin.email</i></h3>\n",
|
||||
"remote-control-for-obs": "Controllo Remoto per OBS",
|
||||
"add-to-group": "Aggiungi a scena di gruppo",
|
||||
"mute": "Muta",
|
||||
"record": "Registra",
|
||||
"volume": "Volume",
|
||||
"open-in-new-tab": "Apri in una nuova Tab",
|
||||
"copy-to-clipboard": "Copia negli appunti"
|
||||
}
|
||||
51
translations/pt.json
Normal file
51
translations/pt.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"GO": "ENTRAR",
|
||||
"add-group-chat": "Adicionar conversa de grupo ao OBS",
|
||||
"add-to-group": "Adicionar à cena de grupo",
|
||||
"add-your-camera": "Adicione a sua câmera ao OBS",
|
||||
"added-notes": "\n\t\t\t\t<u><i>Added Notes:</i></u>\n\t\t\t\t<li>Qualquer pessoa pode entrar numa Sala se souber o nome, por isso mantenha-o único.</li>\n\t\t\t\t<li>Ter mais de quatro (4) pessoas numa Sala não é aconselhável devido a problemas de performance, mas depende do seu hardware.</li>\n\t\t\t\t<li>Dispositivos iOS são limitados a grupos de não mais de duas (2) pessoas. Esta é uma limitação de hardware.</li>\n\t\t\t\t<li>A opção \"Gravar\"é nova e considerada experimental.</li>\n\t\t\t\t<li>Deve \"Adicionar\" uma feed de vídeo à \"Cena de Grupo\" para que ela apareça lá.</li>\n\t\t\t\t<li>Existe um botão \"ecrã completo melhorado\" adicionado à vista de Convidado.</li>\n\t\t\t\t",
|
||||
"advanced-paramaters": "Parâmetros avançados",
|
||||
"audio-sources": "Fontes de áudio",
|
||||
"back": "Voltar",
|
||||
"balanced": "Balanceado",
|
||||
"copy-this-url": "Copie este URL para uma \"Browser Source\" do OBS",
|
||||
"copy-to-clipboard": "Copiar para área de transferência",
|
||||
"create-reusable-invite": "Criar convite reutilizável",
|
||||
"enable-stereo-and-pro": "Ativar áudio Stereo e Pro HD",
|
||||
"enter-the-rooms-control": "Entrar no Centro de Controlo da Sala",
|
||||
"force-vp9-video-codec": "Forçar Codec de vídeo VP9 (menos artefactos)",
|
||||
"generate-invite-link": "GERAR O LINK DE CONVITE",
|
||||
"here-you-can-pre-generate": "Aqui pode gerar um link Browser Source reutilizável e um link de convidado relacionado.",
|
||||
"high-security-mode": "Modo de alta segurança",
|
||||
"info-blob": "\n\t\t\t\t\t\t<h2>O que é o OBS.Ninja</h2><br>\n\t\t\t\t\t\t<li>100% <b>grátis</b>; sem downloads; sem recolha de dados pessoais; sem login</li>\n\t\t\t\t\t\t<li>Leve vídeo do seu smartphone, portátil, computador, ou dos seus amigos diretamente para o seu stream de vídeo do OBS</li>\n\t\t\t\t\t\t<li>Usamos tecnologia de ponta de encaminhamento Peer-to-Peer que oferece privacidade e latência ultra-baixa</li>\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<li>Vídeo de youtube <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">Demoing it here</a> </li>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<br>\n\t\t\t\t\t\t<i><font style=\"color:red\">Problemas conhecidos:</font></i><br>\n\n\t\t\t\t\t\t<li><i class=\"fa fa-apple\" aria-hidden=\"true\"></i> Utilizadores de MacOS precisam de usar OBS v23 ou usar <i>Captura de ecrã</i> de um browser Chrome com OBS v25</li>\n\t\t\t\t\t\t<li>Alguns utilizadores terão problemas de \"pixelização\" com vídeos. Por favor adicione o parâmetro <b>&codec=vp9</b> ao URL dos links OBS para o corrigir.</li>\n\t\t\t\t\t\t<br><i></i><h3><i>Visite o <a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a> <i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"></i> para ajuda e informação avançada. Também estou no <a href=\"https://discord.gg/EksyhGA\">Discord</a> e pode contactar-me por email em steve@seguin.email</i></h3>\n\t\t\t\t\t",
|
||||
"joining-room": "Está a entrar na sala",
|
||||
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
|
||||
"max-resolution": "Resolução Máxima",
|
||||
"mute": "Mute",
|
||||
"no-audio": "Sem áudio",
|
||||
"note-share-audio": "\n\t\t\t\t\t<b>nota</b>: Não se esqueça de clicar em \"Partilhar áudio\" no Chrome.<br>(Firefox não suporta partilha de áudio.)",
|
||||
"open-in-new-tab": "Abrir num novo separador",
|
||||
"record": "Gravar",
|
||||
"remote-control-for-obs": "Controlo remoto para OBS",
|
||||
"remote-screenshare-obs": "Partilha de ecrã remota para OBS",
|
||||
"room-name": "Nome da Sala",
|
||||
"rooms-allow-for": "As Salas permitem conversas de grupo simplificadas e a gestão avançada de múltiplos streams simultâneos.",
|
||||
"select-audio-source": "Selecionar fontes de áudio",
|
||||
"select-audio-video": "Selectionar a fonte de áudio/vídeo abaixo",
|
||||
"select-screen-to-share": "SELECIONAR ECRÃ A PARTILHAR",
|
||||
"show-tips": "Mostre-me algumas dicas..",
|
||||
"smooth-cool": "Smooth and Cool",
|
||||
"unlock-video-bitrate": "Desbloquear Bitrate de Vídeo (20mbps)",
|
||||
"video-source": "Fonte de vídeo",
|
||||
"volume": "Volume",
|
||||
"you-are-in-the-control-center": "Está no Centro de Controlo da Sala",
|
||||
"waiting-for-camera": "Waiting for Camera to Load",
|
||||
"video-resolution": "Video Resolution: ",
|
||||
"hide-screen-share": "Hide Screenshare Option",
|
||||
"allow-remote-control": "Remote Control Camera Zoom (android)",
|
||||
"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"
|
||||
}
|
||||
18
translations/readme.md
Normal file
18
translations/readme.md
Normal file
@@ -0,0 +1,18 @@
|
||||
Welcome to the translation / language section of OBS.Ninja
|
||||
|
||||
You can specify a translation using this code, if deploying the code yourself. blank can be replaced with ru, en, pt, etc..
|
||||
```
|
||||
<script type="text/javascript" id="main-js" src="./main.js" data-translation="blank"></script>
|
||||
```
|
||||
|
||||
You can also add &ln=ru to the URL as a parameter to launch the translation that way.
|
||||
|
||||
There is a file called translate.js, which if you copy/paste the content (and hit enter) into the Chrome browser's console, while on OBS.Ninja, it will download the translation files.
|
||||
It will add any new translation entries and add them to the bottom of the files. Please feel to correct these new translations and upload them back to github as a pull request.
|
||||
|
||||
In the future I will add a Github action so that this automatically occurs with new code posting.
|
||||
|
||||
Translation files can contain more than just language; they can contain HTML and image links, etc. This offers a basic amount of customization.
|
||||
|
||||
the "blank.json" file contains a minimal template. Little to no OBS.Ninja branding.
|
||||
|
||||
53
translations/translate.js
Normal file
53
translations/translate.js
Normal file
@@ -0,0 +1,53 @@
|
||||
// Copy and paste this code into OBS.Ninja's developer's console to generate new Translation files
|
||||
|
||||
function downloadTranslation(filename, trans={}){ // downloads the current translation to a file
|
||||
document.querySelectorAll('[data-translate]').forEach(function(ele){
|
||||
trans[ele.dataset.translate] = ele.innerHTML;
|
||||
});
|
||||
|
||||
var textDoc = JSON.stringify(trans, null, 2);
|
||||
|
||||
var hiddenElement = document.createElement('a');
|
||||
hiddenElement.href = 'data:text/html,' + encodeURIComponent(textDoc);
|
||||
hiddenElement.target = '_blank';
|
||||
hiddenElement.download = filename+".json";
|
||||
hiddenElement.click();
|
||||
}
|
||||
|
||||
|
||||
function updateTranslation(filename){ // updates the website with a specific translation
|
||||
return fetch("./translations/"+filename+'.json').then(function(response){
|
||||
if (response.status !== 200) {
|
||||
log('Looks like there was a problem. Status Code: ' +
|
||||
response.status);
|
||||
return false;
|
||||
}
|
||||
return response.json().then(function(data) {
|
||||
document.querySelectorAll('[data-translate]').forEach(function(ele){
|
||||
if (ele.dataset.translate in data){
|
||||
ele.innerHTML = data[ele.dataset.translate];
|
||||
}
|
||||
});
|
||||
getById("mainmenu").style.opacity = 1;;
|
||||
return [filename, data];
|
||||
}).catch(function(err){
|
||||
errorlog(err);
|
||||
getById("mainmenu").style.opacity = 1;
|
||||
return false;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
var updateList = ["en", "ru", "fr", "pl", "ar", "de", "it", "nl", "jp", "pt", "zh", "blank"]; // list of languages to update
|
||||
|
||||
downloadTranslation("default");
|
||||
|
||||
for (var i in updateList){
|
||||
var ln = updateList[i];
|
||||
updateTranslation(ln).then(function(res){
|
||||
if (res[0]){
|
||||
console.log(res[0]);
|
||||
downloadTranslation(res[0], res[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user