Version 10.3 - beta

fixed more bugs; minor polish in features
This commit is contained in:
Steve Seguin 2020-08-26 06:29:17 -04:00 committed by GitHub
parent 8ff1a0f6b2
commit 75ba4f4b4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 157 additions and 46 deletions

View File

@ -11,10 +11,10 @@ iframe {
padding:0;
display:block;
margin:0px;
min-height: 420px;
min-width: 350px;
max-height: 720px;
max-width: 1280px;
min-height: 100px;
min-width: 100px;
max-height: 95%;
max-width: 99%%;
float: left;
position: fixed;
}
@ -53,15 +53,15 @@ button{
}
.popup {
z-index: 9;
background-color: #f1f1f1;
border: 1px solid #d3d3d3;
text-align: center;
min-height: 420px;
min-width: 350px;
max-height: 720px;
max-width: 1280px;
scale: 0.5;
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 {
@ -132,7 +132,7 @@ button{
<div id="container"></div>
<script>
var currentZIndex = 100;
function initDragElement(popup){
var pos1 = 0,
@ -141,7 +141,6 @@ function initDragElement(popup){
pos4 = 0;
var elmnt = null;
var currentZIndex = 100; //TODO reset z index when a threshold is passed
var header = getHeader(popup);
var iframe = getIFrame(popup);
@ -291,6 +290,9 @@ 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";
@ -312,6 +314,9 @@ function loadIframe(){
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);

View File

@ -42,7 +42,7 @@ function loadIframe(){
iframe.allowtransparency="true"
if (iframesrc==""){
iframesrc="https://obs.ninja/";
iframesrc="./";
}
if (document.getElementById("clean").checked){
@ -179,7 +179,18 @@ function loadIframe(){
if ("stats" in e.data){
var outputWindow = document.createElement("outputWindow");
outputWindow.innerHTML = e.data.stats;
console.log(e.data.stats);
var out = "<br />total_inbound_connections:"+e.data.stats.total_inbound_connections;
out += "<br />total_outbound_connections:"+e.data.stats.total_outbound_connections;
for (var streamID in e.data.stats.inbound_stats){
out += "<br /><br /><b>streamID:</b> "+streamID+"<br />";
out += printValues(e.data.stats.inbound_stats[streamID]);
}
outputWindow.innerHTML = out;
iframeContainer.appendChild(outputWindow);
}
@ -193,6 +204,21 @@ function loadIframe(){
}
function printValues( obj) {
var out = "";
for (var key in obj) {
if (typeof obj[key] === "object") {
out +="<br />";
out += printValues(obj[key]);
} else {
out +="<b>"+key+"</b>: "+obj[key]+"<br />";
}
}
return out;
}
</script>
</head>
<body>

View File

@ -47,7 +47,7 @@
<meta property="twitter:image" content="./images/obsNinja_logo_full.png" />
<meta name="msapplication-TileColor" content="#da532c" />
<meta name="theme-color" content="#ffffff" />
<!--<script src="//console.re/connector.js" data-channel="obsninjaalpha" id="consolerescript"></script>-->
<!-- <script src="//console.re/connector.js" data-channel="obsninjaalpha" id="consolerescript"></script> -->
<link rel="stylesheet" href="./lineawesome/css/line-awesome.min.css">
<script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<script type="text/javascript" src="./thirdparty/qrcode.min.js"></script>
@ -63,7 +63,7 @@
<link itemprop="url" href="./images/obsNinja_logo_full.png" />
</span>
<script language="javascript" type="text/javascript" src="./thirdparty/CodecsHandler.js?ver=17"></script>
<script language="javascript" type="text/javascript" src="./webrtc.js?ver=33"></script>
<script language="javascript" type="text/javascript" src="./webrtc.js?ver=55"></script>
<input id="zoomSlider" type="range" style="display: none;" />
<div id="header">
<a id="logoname" href="./" style="text-decoration: none; color: white; margin: 2px;">
@ -475,7 +475,7 @@
</li>
<br />
Site last updated: <a href="https://www.reddit.com/r/OBSNinja/comments/ib7vhk/version_10_released_text_chat_and_more_added_see/">August 17th, 2020</a>. The previous version can be found at
Site last updated: <a href="https://www.reddit.com/r/OBSNinja/comments/ib7vhk/version_10_released_text_chat_and_more_added_see/">August 26th, 2020</a>. The previous version can be found at
<a href="https://obs.ninja/v9/">https://obs.ninja/v9/</a> if you are having new issues.
@ -609,15 +609,17 @@
<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>
<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>
<a onclick="changeLg('it');toggle(document.getElementById('languages'));" style="cursor: pointer;">Italian</a>
<br />
<a onclick="changeLg('de');toggle(document.getElementById('languages'));" style="cursor: pointer;">German </a>
<a onclick="changeLg('de');toggle(document.getElementById('languages'));" style="cursor: pointer;">German</a>
<br />
<a onclick="changeLg('es');toggle(document.getElementById('languages'));" style="cursor: pointer;">Spanish </a>
<a onclick="changeLg('es');toggle(document.getElementById('languages'));" style="cursor: pointer;">Spanish</a>
<br />
<a onclick="changeLg('nl');toggle(document.getElementById('languages'));" style="cursor: pointer;">Dutch </a>
<a onclick="changeLg('nl');toggle(document.getElementById('languages'));" style="cursor: pointer;">Dutch</a>
<br />
<a onclick="changeLg('ja');toggle(document.getElementById('languages'));" style="cursor: pointer;">Japanese</a>
<br />
</u>
<br />
@ -645,7 +647,7 @@
turn = {};
turn.username = "steve";
turn.credential = "justtesting";
turn.urls = ["turn:turn2.obs.ninja:3478?transport=tcp"]; // US WEST
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
@ -684,7 +686,7 @@
// 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=33"></script>
<script type="text/javascript" id="main-js" src="./main.js?ver=36"></script>
<script type="text/javascript" src="./animations.js?ver=8"></script>
</body>
</html>

60
main.js
View File

@ -271,10 +271,6 @@ if (urlParams.has('mute') || urlParams.has('muted')){
session.muted = true;
}
if (urlParams.has('mute') || urlParams.has('muted')){
session.muted = true;
}
if (session.screenshare==true){
getById("container-3").className = 'column columnfade advanced'; // Hide screen share on mobile
}
@ -402,6 +398,16 @@ if (urlParams.has("denoise") || urlParams.has("dn")){
}
if (urlParams.has('roombitrate') || urlParams.has('rbr')){
log("Room BITRATE SET");
session.roombitrate = urlParams.get('roombitrate') || urlParams.get('rbr');
session.roombitrate = parseInt(session.roombitrate);
if (session.roombitrate<1){
session.roombitrate=0;
}
}
if (urlParams.has('audiobitrate') || urlParams.has('ab')){ // both peers need this enabled for HD stereo to be on. If just pub, you get no echo/noise cancellation. if just viewer, you get high bitrate mono
log("AUDIO BITRATE SET");
session.audiobitrate = urlParams.get('audiobitrate') || urlParams.get('ab');
@ -577,6 +583,20 @@ if (urlParams.has('nocursor')){
}
if (urlParams.has('vbr')){
session.cbr = 0;
}
if (urlParams.has('minptime')){
session.minptime = parseInt(urlParams.get('minptime')) || 10;
if (session.minptime<10){session.minptime=10;}
}
if (urlParams.has('maxptime')){
session.maxptime = parseInt(urlParams.get('maxptime')) || 30;
if (session.maxptime<session.minptime){session.maxptime=session.minptime;}
}
if (urlParams.has('codec')){
log("CODEC CHANGED");
@ -1011,11 +1031,15 @@ window.onmessage = function(e){ // iFRAME support
}
if ("getStats" in e.data){
var out = "";
var stats = {};
stats.total_outbound_connections = Object.keys(session.pcs).length;
stats.total_inbound_connections = Object.keys(session.rpcs).length;
stats.inbound_stats = {};
for (var i in session.rpcs){
out += printValues(session.rpcs[i].stats);
stats.inbound_stats[session.rpcs[i].streamID] = session.rpcs[i].stats;
}
parent.postMessage({"stats": out }, "*");
parent.postMessage({"stats": stats }, "*");
}
if ("close" in e.data){
@ -1447,7 +1471,6 @@ function publishScreen(){
noiseSuppression: false
},
video: {width: width, height: height, mediaSource: "screen"}
//,cursor: {exact: "none"}
};
if (session.noiseSuppression == true){
@ -1460,14 +1483,15 @@ function publishScreen(){
constraints.audio.echoCancellation = true; // the defaults for screen publishing should be off.
}
//if (session.nocursor){
// constraints.video.cursor = ["motion", "always"];
//}
if (session.nocursor){
constraints.video.cursor = { exact: "none" }; // Not sure this does anything, but whatever.
}
if (session.framerate){
if (session.framerate!==false){
constraints.video.frameRate = session.framerate;
}
} else {
constraints.video.frameRate = {ideal: 60};
}
var audioSelect = document.querySelector('select#audioSourceScreenshare');
var outputSelect = document.querySelector('select#outputSourceScreenshare');
@ -2744,7 +2768,7 @@ var grabVideoTimer = null;
async function grabVideo(quality=0, eleName='previewWebcam', selector="select#videoSource"){
if( activatedPreview == true){log("activated preview return 2");return;}
activatedPreview = true;
log("Grabbing video");
log("Grabbing video: "+quality);
if (grabVideoTimer){
clearTimeout(grabVideoTimer);
}
@ -3238,7 +3262,7 @@ function setupWebcamSelection(stream=null){
warnlog("video source changed");
activatedPreview=false;
if (session.quality){
if (session.quality!==false){
grabVideo(session.quality);
} else {
session.quality_wb = parseInt(getById("webcamquality").elements.namedItem("resolution").value);
@ -3293,9 +3317,9 @@ function setupWebcamSelection(stream=null){
return;
}
} else {
log("GRabbing video");
log("GRabbing video: "+session.quality);
activatedPreview = false;
if (session.quality){
if (session.quality!==false){
grabVideo(session.quality);
} else {
session.quality_wb = parseInt(getById("webcamquality").elements.namedItem("resolution").value);

54
translations/ja.json Normal file
View File

@ -0,0 +1,54 @@
{
"GO": "GO",
"add-group-chat": "OBSにグループミーティングを追加",
"add-to-group": "グループシーンに追加",
"add-your-camera": "OBSに自分のカメラを追加",
"added-notes": "<i><u>追加情報:<u></i><li>ルーム名を知っている人は誰でもルームに入れるため、ユニークなルーム名にして下さい。</li><li>ハードウェア性能にもよりますが、パフォーマンス上の理由から、4人以上のルーム利用はおすすめできません。</li><li>iOSデバイスでは、2人以下のグループサイズに制限されます。これはハードウェアによる制限です。</li><li>\"Recording\" オプションは実験的な新機能です。</li><li>ビデオフィードを「グループシーン」に表示するには、そこに「追加」する必要があります。</li><li>ゲストのビューに、新しい「強化されたフルスクリーン」ボタンが追加されました。</li>",
"advanced-paramaters": "高度なパラメータ",
"audio-sources": "音声ソース",
"back": "戻る",
"balanced": "バランス",
"copy-this-url": "このURLをOBSの「ブラウザソース」に追加",
"copy-to-clipboard": "クリップボードにコピー",
"create-reusable-invite": "再利用可能な招待リンクを作成",
"enable-stereo-and-pro": "ステレオ・プロHDオーディオを有効にする",
"enter-the-rooms-control": "ルーム管理センターに入る",
"force-vp9-video-codec": "VP9ビデオコーデックの使用を強制 (less artifacting)",
"generate-invite-link": "招待リンクを作成",
"here-you-can-pre-generate": "再利用可能なブラウザソースリンクと、関連するゲスト招待リンクを、事前に作成できます。",
"high-security-mode": "高セキュリティモード",
"info-blob": "<h2>OBS.Ninja とは?</h2><br><li>超低遅延でプライバシーが保護された、ビデオストリームサービスです。</li><li>ライブ配信でゲストとの対話を配信したり、少人数のグループミーティングにも利用できます。</li><li>100% <strong>無料</strong>、ダウンロード不要、サインイン不要、個人情報を一切収集しません。</li><li>あなたや友人のスマートフォン、タブレット、PCなどから、直接OBSビデオストリームに映像を取り込めます。</li><li>プライバシーと超低遅延を実現するために、最先端のピアツーピア転送技術を使用しています。</li><br><li>YouTube: <i class=\"fa fa-youtube-play\" aria-hidden=\"true\"></i> <a href=\"https://www.youtube.com/watch?v=6R_sQKxFAhg\">デモ動画を見る</a> </li><li>Github: <i class=\"fa fa-github\" aria-hidden=\"true\"></i> <a href=\"https://github.com/steveseguin/obsninja\">https://github.com/steveseguin/obsninja</a> </li><br><i><font style=\"color:red\">既知の問題点:</font></i><br><li><i class=\"fa fa-apple\" aria-hidden=\"true\"></i>MacOSユーザーは、OBS v23を使用するか、OBS v25でChromeブラウザーを<i>ウィンドウキャプチャー</i>する必要があります。</li><li>一部のユーザーは「ピクセレーション」問題が発生します。その場合、URLパラメータに <code>&amp;codec=vp9</code> を追加して下さい。</li><br><i>フォーラムや連絡先:</i><br><li>ヘルプや高度な情報は、<a href=\"https://www.reddit.com/r/OBSNinja/\">sub-reddit</a><i class=\"fa fa-reddit-alien\" aria-hidden=\"true\"> でチェックして下さい。</li><li><a href=\"https://discord.gg/EksyhGA\">Discord</a> もあります。</li><li>メール <a href=\"mailto:steve@seguin.email\">steve@seguin.email</a> でも連絡できます。</i>",
"joining-room": "ルームに参加しています",
"logo-header": "<font id=\"qos\" style=\"color: white;\">O</font>BS.Ninja ",
"max-resolution": "最大解像度",
"mute": "ミュート",
"no-audio": "音声なし",
"note-share-audio": "<strong>注意</strong>: Chromeの「音声の共有」を必ずクリックして下さい。<br>(Firefox は音声の共有をサポートしていません)",
"open-in-new-tab": "新しいタブで開く",
"record": "録画",
"remote-control-for-obs": "OBS用リモートコントロール",
"remote-screenshare-obs": "OBSに画面共有を追加",
"room-name": "ルーム名",
"rooms-allow-for": "ルームを利用すると、グループミーティングや複数ストリームを、一つの画面で管理できます。",
"select-audio-source": "音声ソースを選択",
"select-audio-video": "映像/音声ソースを下から選んで下さい",
"select-screen-to-share": "共有する画面を選択",
"show-tips": "ヒントを表示",
"smooth-cool": "スムーズ&クール",
"unlock-video-bitrate": "ビデオビットレートをアンロック (20mbps)",
"video-source": "映像ソース",
"volume": "ボリューム",
"you-are-in-the-control-center": "ルーム管理センター",
"waiting-for-camera": "カメラがロードされるのを待っています...",
"video-resolution": "ビデオ解像度: ",
"hide-screen-share": "画面共有オプションを非表示",
"allow-remote-control": "カメラズームのリモートコントロール (android)",
"add-the-guest-to-a-room": "ゲストをルームに追加:",
"invite-group-chat-type": "このルームのゲストは、次のことができる:",
"can-see-and-hear": "グループミーティングの映像・音声を視聴できる",
"can-hear-only": "グループミーティングの音声のみ聞ける",
"cant-see-or-hear": "グループミーティングの映像・音声を視聴できない",
"password-input-field": "Password",
"select-output-source": "音声出力先:",
"add-a-password-to-stream": "パスワードを追加:"
}

File diff suppressed because one or more lines are too long