Copy this URL into an OBS "Browser Source"
@@ -435,7 +436,7 @@
- Site last updated: June 28th, 2020. The previous version can be found at
+ Site last updated: July 10th, 2020. The previous version can be found at
https://obs.ninja/v7/ if you are having new issues.
@@ -525,6 +526,12 @@
Italian
+ German
+
+ Spanish
+
+ Dutch
+
Add More Here!
@@ -550,7 +557,7 @@
turn = {};
turn.username = "steve";
turn.credential = "justtesting";
- turn.urls = ["turn:turn2.obs.ninja:443"]; // US WEST
+ turn.urls = ["turn:turn2.obs.ninja:3478?transport=tcp"]; // US WEST
session.configuration.iceServers.push(turn);
// session.configuration.iceTransportPolicy = "relay"; // uncomment to enable "&privacy" and force the TURN server
diff --git a/main.js b/main.js
index 8c392cb..8ce3a79 100644
--- a/main.js
+++ b/main.js
@@ -139,7 +139,21 @@ document.addEventListener("keydown", event => {
if ((event.ctrlKey) || (event.metaKey) ){ // detect if CTRL is pressed
CtrlPressed = true;
}
+
+ if (CtrlPressed && event.keyCode){
+
+ if (event.keyCode == 77) { // m
+ toggleMute();
+ } else if (event.keyCode == 69) { // e
+ hangup();
+ } else if (event.keyCode == 66) { // b
+ toggleVideoMute();
+ }
+ }
+
+
});
+
document.addEventListener("keyup", event => {
if (!((event.ctrlKey) || (event.metaKey))){
if (CtrlPressed){
@@ -160,9 +174,10 @@ window.onpopstate = function() {
}
};
-if (typeof variable !== 'undefined') { // make sure to init the WebRTC if not exists.
+if (typeof session === 'undefined') { // make sure to init the WebRTC if not exists.
var session = WebRTC.Media;
session.streamID = session.generateStreamID();
+ errorlog("Serious error: WebRTC session didn't load in time");
}
@@ -647,6 +662,8 @@ if ((urlParams.has('mirror')) && (urlParams.has('flip'))){
var mirrorStyle = document.createElement('style');
mirrorStyle.innerHTML = "video {transform: scaleX(-1) scaleY(-1); }";
document.getElementsByTagName("head")[0].appendChild(mirrorStyle);
+ session.mirrored=true;
+ session.flipped=true;
} catch (e){errorlog(e);}
} else if (urlParams.has('mirror')){ // mirror the video horizontally
try {
@@ -654,12 +671,14 @@ if ((urlParams.has('mirror')) && (urlParams.has('flip'))){
var mirrorStyle = document.createElement('style');
mirrorStyle.innerHTML = "video {transform: scaleX(-1);}";
document.getElementsByTagName("head")[0].appendChild(mirrorStyle);
+ session.mirrored=true;
} catch (e){errorlog(e);}
} else if (urlParams.has('flip')){ // mirror the video vertically
try {
log("Mirror all videos");
+ session.flipped=true;
var mirrorStyle = document.createElement('style');
- mirrorStyle.innerHTML = "video {transform: scaleY(-1); }";
+ mirrorStyle.innerHTML = "video {transform: scaleY(-1);}";
document.getElementsByTagName("head")[0].appendChild(mirrorStyle);
} catch (e){errorlog(e);}
}
@@ -848,6 +867,73 @@ function updateStats(){
} catch (e){errorlog(e);}
}
+window.onmessage = function(e){ // iFRAME support
+ log(e.data);
+
+ if ("mute" in e.data) {
+ if (e.data.mute == true){
+ for (var i in session.rpcs){
+ try {
+ session.rpcs[i].videoElement.muted = true;
+ } catch(e){
+ errorlog(e);
+ }
+ }
+ } else if (e.data.mute == false){
+ for (var i in session.rpcs){
+ try {
+ session.rpcs[i].videoElement.muted = false;
+ } catch(e){
+ errorlog(e);
+ }
+ }
+ } else if (e.data.mute == "toggle"){
+ for (var i in session.rpcs){
+ try {
+ session.rpcs[i].videoElement.muted = !(session.rpcs[i].videoElement.muted);
+ } catch(e){
+ errorlog(e);
+ }
+ }
+ }
+ }
+
+ if ("volume" in e.data) {
+ for (var i in session.rpcs){
+ try {
+ session.rpcs[i].videoElement.volume = parseFloat(e.data.volume);
+ } catch(e){
+ errorlog(e);
+ }
+ }
+ }
+
+ if ("bitrate" in e.data){
+ for (var i in session.rpcs){
+ try {
+ session.requestRateLimit(parseInt(e.data.bitrate),i);
+ } catch(e){
+ errorlog(e);
+ }
+ }
+ }
+
+ if ("reload" in e.data){
+ location.reload();
+ }
+
+ if ("close" in e.data){
+ for (var i in session.rpcs){
+ try {
+ session.rpcs[i].close();
+ } catch(e){
+ errorlog(e);
+ }
+ }
+ }
+};
+
+
function toggleMute(){ // TODO: I need to have this be MUTE, toggle, with volume not touched.
if (session.muted==false){
session.muted = true;
@@ -1190,7 +1276,7 @@ function createRoom(roomname=false){
passAdd2="&password="+session.password;
}
- gridlayout.innerHTML = "
- Invites users to join the group and broadcast their feed to it. These users will see every feed, so a limit of 4 is recommended.
";
+ gridlayout.innerHTML = "
- Invites users to join the group and broadcast their feed to it. These users will see every feed, so performance problems may arise for some guests if too many people join a room.
";
gridlayout.innerHTML += " - Link to Invite users to broadcast their feeds to the group. These users will not see or hear any feed from the group. ";
@@ -1968,6 +2054,17 @@ function previewWebcam(){
if( activatedPreview == true){log("activeated preview return 1");return;}
activatedPreview = true;
+
+ if (session.mirrored && session.flipped){
+ getById('previewWebcam').style.transform = " scaleX(1) scaleY(-1)";
+ } else if (session.mirrored){
+ getById('previewWebcam').style.transform = "scaleX(1)";
+ } else if (session.flipped){
+ getById('previewWebcam').style.transform = "scaleY(-1) scaleX(-1)";
+ } else {
+ getById('previewWebcam').style.transform = "scaleX(-1)";
+ }
+
window.setTimeout(() => {
try{
var oldstream = getById('previewWebcam').srcObject;