mirror of
https://github.com/ianramzy/decentralized-video-chat.git
synced 2025-02-21 23:45:06 +08:00
Redirect safari and unsupported browsers
This commit is contained in:
parent
3740ae6ff6
commit
53c1486793
@ -6,6 +6,23 @@ url = window.location.href;
|
|||||||
const roomHash = url.substring(url.lastIndexOf('/') + 1).toLowerCase();
|
const roomHash = url.substring(url.lastIndexOf('/') + 1).toLowerCase();
|
||||||
|
|
||||||
|
|
||||||
|
function getBrowserName() {
|
||||||
|
var name = "Unknown";
|
||||||
|
if (window.navigator.userAgent.indexOf("MSIE") !== -1) {
|
||||||
|
} else if (window.navigator.userAgent.indexOf("Firefox") !== -1) {
|
||||||
|
name = "Firefox";
|
||||||
|
} else if (window.navigator.userAgent.indexOf("Opera") !== -1) {
|
||||||
|
name = "Opera";
|
||||||
|
} else if (window.navigator.userAgent.indexOf("Chrome") !== -1) {
|
||||||
|
name = "Chrome";
|
||||||
|
} else if (window.navigator.userAgent.indexOf("Safari") !== -1) {
|
||||||
|
name = "Safari";
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
var browserName = getBrowserName();
|
||||||
|
|
||||||
var isWebRTCSupported =
|
var isWebRTCSupported =
|
||||||
navigator.getUserMedia ||
|
navigator.getUserMedia ||
|
||||||
navigator.webkitGetUserMedia ||
|
navigator.webkitGetUserMedia ||
|
||||||
@ -13,14 +30,8 @@ var isWebRTCSupported =
|
|||||||
navigator.msGetUserMedia ||
|
navigator.msGetUserMedia ||
|
||||||
window.RTCPeerConnection;
|
window.RTCPeerConnection;
|
||||||
|
|
||||||
// try {
|
// Handle IE
|
||||||
// window.RTCPeerConnection.peerConnection.addStream
|
if (!isWebRTCSupported || browserName === "Safari" || browserName === "MSIE") {
|
||||||
// } catch (e) {
|
|
||||||
// alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
|
|
||||||
// window.location.href = "/landing";
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (!isWebRTCSupported) {
|
|
||||||
alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
|
alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
|
||||||
window.location.href = "/";
|
window.location.href = "/";
|
||||||
}
|
}
|
||||||
@ -28,14 +39,6 @@ if (!isWebRTCSupported) {
|
|||||||
|
|
||||||
function logIt(message, error) {
|
function logIt(message, error) {
|
||||||
console.log(message);
|
console.log(message);
|
||||||
// Add to logs on page
|
|
||||||
// let logs = document.getElementById('logs');
|
|
||||||
// let tmp = document.createElement('P');
|
|
||||||
// tmp.innerText = message;
|
|
||||||
// if (error) {
|
|
||||||
// tmp.classList.add('error');
|
|
||||||
// }
|
|
||||||
// logs.appendChild(tmp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create an object to save various objects to without polluting the global namespace.
|
// Create an object to save various objects to without polluting the global namespace.
|
||||||
@ -53,32 +56,29 @@ var VideoChat = {
|
|||||||
// accepted callback to the onMediaStream function, otherwise callback to the
|
// accepted callback to the onMediaStream function, otherwise callback to the
|
||||||
// noMediaStream function.
|
// noMediaStream function.
|
||||||
requestMediaStream: function (event) {
|
requestMediaStream: function (event) {
|
||||||
|
|
||||||
logIt("requestMediaStream");
|
logIt("requestMediaStream");
|
||||||
navigator.mediaDevices
|
navigator.mediaDevices.getUserMedia({
|
||||||
.getUserMedia({video: true, audio: true})
|
video: true,
|
||||||
.then(stream => {
|
audio: true
|
||||||
VideoChat.onMediaStream(stream);
|
}).then(stream => {
|
||||||
})
|
VideoChat.onMediaStream(stream);
|
||||||
.catch(error => {
|
}).catch(error => {
|
||||||
logIt(error);
|
logIt(error);
|
||||||
logIt('Failed to get local webcam video, check webcam privacy settings');
|
logIt('Failed to get local webcam video, check webcam privacy settings');
|
||||||
setTimeout(VideoChat.requestMediaStream, 1000);
|
setTimeout(VideoChat.requestMediaStream, 1000);
|
||||||
// alert("Please check your webcam browser privacy settings.")
|
});
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
requestScreenStream: function (event) {
|
requestScreenStream: function (event) {
|
||||||
navigator.mediaDevices
|
navigator.mediaDevices.getDisplayMedia({
|
||||||
.getDisplayMedia({video: true, audio: true})
|
video: true,
|
||||||
.then(stream => {
|
audio: true
|
||||||
VideoChat.onMediaStream(stream);
|
}).then(stream => {
|
||||||
})
|
VideoChat.onMediaStream(stream);
|
||||||
.catch(error => {
|
}).catch(error => {
|
||||||
logIt(error);
|
logIt(error);
|
||||||
logIt('No media stream for us.');
|
logIt('No media stream for us.');
|
||||||
alert("Please check your screen sharing browser privacy settings.")
|
});
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// The onMediaStream function receives the media stream as an argument.
|
// The onMediaStream function receives the media stream as an argument.
|
||||||
@ -279,7 +279,6 @@ function openFullscreen() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function muteMicrophone() {
|
function muteMicrophone() {
|
||||||
var muted = VideoChat.localStream.getAudioTracks()[0].enabled;
|
var muted = VideoChat.localStream.getAudioTracks()[0].enabled;
|
||||||
VideoChat.localStream.getAudioTracks()[0].enabled = !muted;
|
VideoChat.localStream.getAudioTracks()[0].enabled = !muted;
|
||||||
|
20
server.js
20
server.js
@ -27,7 +27,7 @@ app.get('/room/*', function (req, res) {
|
|||||||
app.use(express.static('public'));
|
app.use(express.static('public'));
|
||||||
|
|
||||||
|
|
||||||
function log(msg, room) {
|
function logIt(msg, room) {
|
||||||
console.log(room + ": " + msg)
|
console.log(room + ": " + msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ io.on('connection', function (socket) {
|
|||||||
// When a client tries to join a room, only allow them if they are first or
|
// When a client tries to join a room, only allow them if they are first or
|
||||||
// second in the room. Otherwise it is full.
|
// second in the room. Otherwise it is full.
|
||||||
socket.on('join', function (room) {
|
socket.on('join', function (room) {
|
||||||
log('A client joined the room', room);
|
logIt('A client joined the room', room);
|
||||||
var clients = io.sockets.adapter.rooms[room];
|
var clients = io.sockets.adapter.rooms[room];
|
||||||
var numClients = typeof clients !== 'undefined' ? clients.length : 0;
|
var numClients = typeof clients !== 'undefined' ? clients.length : 0;
|
||||||
if (numClients === 0) {
|
if (numClients === 0) {
|
||||||
@ -44,12 +44,12 @@ io.on('connection', function (socket) {
|
|||||||
} else if (numClients === 1) {
|
} else if (numClients === 1) {
|
||||||
socket.join(room);
|
socket.join(room);
|
||||||
// When the client is second to join the room, both clients are ready.
|
// When the client is second to join the room, both clients are ready.
|
||||||
log('Broadcasting ready message', room);
|
logIt('Broadcasting ready message', room);
|
||||||
socket.broadcast.to(room).emit('willInitiateCall', room);
|
socket.broadcast.to(room).emit('willInitiateCall', room);
|
||||||
socket.emit('ready', room).to(room);
|
socket.emit('ready', room).to(room);
|
||||||
socket.broadcast.to(room).emit('ready', room);
|
socket.broadcast.to(room).emit('ready', room);
|
||||||
} else {
|
} else {
|
||||||
log("room already full", room);
|
logIt("room already full", room);
|
||||||
socket.emit('full', room);
|
socket.emit('full', room);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -57,12 +57,12 @@ io.on('connection', function (socket) {
|
|||||||
// When receiving the token message, use the Twilio REST API to request an
|
// When receiving the token message, use the Twilio REST API to request an
|
||||||
// token to get ephemeral credentials to use the TURN server.
|
// token to get ephemeral credentials to use the TURN server.
|
||||||
socket.on('token', function (room) {
|
socket.on('token', function (room) {
|
||||||
log('Received token request', room);
|
logIt('Received token request', room);
|
||||||
twilio.tokens.create(function (err, response) {
|
twilio.tokens.create(function (err, response) {
|
||||||
if (err) {
|
if (err) {
|
||||||
log(err, room);
|
logIt(err, room);
|
||||||
} else {
|
} else {
|
||||||
log('Token generated. Returning it to the browser client', room);
|
logIt('Token generated. Returning it to the browser client', room);
|
||||||
socket.emit('token', response).to(room);
|
socket.emit('token', response).to(room);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -70,19 +70,19 @@ io.on('connection', function (socket) {
|
|||||||
|
|
||||||
// Relay candidate messages
|
// Relay candidate messages
|
||||||
socket.on('candidate', function (candidate, room) {
|
socket.on('candidate', function (candidate, room) {
|
||||||
log('Received candidate. Broadcasting...', room);
|
logIt('Received candidate. Broadcasting...', room);
|
||||||
socket.broadcast.to(room).emit('candidate', candidate);
|
socket.broadcast.to(room).emit('candidate', candidate);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Relay offers
|
// Relay offers
|
||||||
socket.on('offer', function (offer, room) {
|
socket.on('offer', function (offer, room) {
|
||||||
log('Received offer. Broadcasting...', room);
|
logIt('Received offer. Broadcasting...', room);
|
||||||
socket.broadcast.to(room).emit('offer', offer);
|
socket.broadcast.to(room).emit('offer', offer);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Relay answers
|
// Relay answers
|
||||||
socket.on('answer', function (answer, room) {
|
socket.on('answer', function (answer, room) {
|
||||||
log('Received answer. Broadcasting...', room);
|
logIt('Received answer. Broadcasting...', room);
|
||||||
socket.broadcast.to(room).emit('answer', answer);
|
socket.broadcast.to(room).emit('answer', answer);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user