mirror of
https://github.com/ianramzy/decentralized-video-chat.git
synced 2025-02-20 23:15:01 +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();
|
||||
|
||||
|
||||
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 =
|
||||
navigator.getUserMedia ||
|
||||
navigator.webkitGetUserMedia ||
|
||||
@ -13,14 +30,8 @@ var isWebRTCSupported =
|
||||
navigator.msGetUserMedia ||
|
||||
window.RTCPeerConnection;
|
||||
|
||||
// try {
|
||||
// window.RTCPeerConnection.peerConnection.addStream
|
||||
// } catch (e) {
|
||||
// alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
|
||||
// window.location.href = "/landing";
|
||||
// }
|
||||
|
||||
if (!isWebRTCSupported) {
|
||||
// Handle IE
|
||||
if (!isWebRTCSupported || browserName === "Safari" || browserName === "MSIE") {
|
||||
alert("Your browser doesn't support Neon Chat. Please use Chrome or Firefox.");
|
||||
window.location.href = "/";
|
||||
}
|
||||
@ -28,14 +39,6 @@ if (!isWebRTCSupported) {
|
||||
|
||||
function logIt(message, error) {
|
||||
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.
|
||||
@ -53,32 +56,29 @@ var VideoChat = {
|
||||
// accepted callback to the onMediaStream function, otherwise callback to the
|
||||
// noMediaStream function.
|
||||
requestMediaStream: function (event) {
|
||||
|
||||
logIt("requestMediaStream");
|
||||
navigator.mediaDevices
|
||||
.getUserMedia({video: true, audio: true})
|
||||
.then(stream => {
|
||||
VideoChat.onMediaStream(stream);
|
||||
})
|
||||
.catch(error => {
|
||||
logIt(error);
|
||||
logIt('Failed to get local webcam video, check webcam privacy settings');
|
||||
setTimeout(VideoChat.requestMediaStream, 1000);
|
||||
// alert("Please check your webcam browser privacy settings.")
|
||||
});
|
||||
navigator.mediaDevices.getUserMedia({
|
||||
video: true,
|
||||
audio: true
|
||||
}).then(stream => {
|
||||
VideoChat.onMediaStream(stream);
|
||||
}).catch(error => {
|
||||
logIt(error);
|
||||
logIt('Failed to get local webcam video, check webcam privacy settings');
|
||||
setTimeout(VideoChat.requestMediaStream, 1000);
|
||||
});
|
||||
},
|
||||
|
||||
requestScreenStream: function (event) {
|
||||
navigator.mediaDevices
|
||||
.getDisplayMedia({video: true, audio: true})
|
||||
.then(stream => {
|
||||
VideoChat.onMediaStream(stream);
|
||||
})
|
||||
.catch(error => {
|
||||
logIt(error);
|
||||
logIt('No media stream for us.');
|
||||
alert("Please check your screen sharing browser privacy settings.")
|
||||
});
|
||||
navigator.mediaDevices.getDisplayMedia({
|
||||
video: true,
|
||||
audio: true
|
||||
}).then(stream => {
|
||||
VideoChat.onMediaStream(stream);
|
||||
}).catch(error => {
|
||||
logIt(error);
|
||||
logIt('No media stream for us.');
|
||||
});
|
||||
},
|
||||
|
||||
// The onMediaStream function receives the media stream as an argument.
|
||||
@ -279,7 +279,6 @@ function openFullscreen() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function muteMicrophone() {
|
||||
var muted = VideoChat.localStream.getAudioTracks()[0].enabled;
|
||||
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'));
|
||||
|
||||
|
||||
function log(msg, room) {
|
||||
function logIt(msg, room) {
|
||||
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
|
||||
// second in the room. Otherwise it is full.
|
||||
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 numClients = typeof clients !== 'undefined' ? clients.length : 0;
|
||||
if (numClients === 0) {
|
||||
@ -44,12 +44,12 @@ io.on('connection', function (socket) {
|
||||
} else if (numClients === 1) {
|
||||
socket.join(room);
|
||||
// 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.emit('ready', room).to(room);
|
||||
socket.broadcast.to(room).emit('ready', room);
|
||||
} else {
|
||||
log("room already full", room);
|
||||
logIt("room already 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
|
||||
// token to get ephemeral credentials to use the TURN server.
|
||||
socket.on('token', function (room) {
|
||||
log('Received token request', room);
|
||||
logIt('Received token request', room);
|
||||
twilio.tokens.create(function (err, response) {
|
||||
if (err) {
|
||||
log(err, room);
|
||||
logIt(err, room);
|
||||
} 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);
|
||||
}
|
||||
});
|
||||
@ -70,19 +70,19 @@ io.on('connection', function (socket) {
|
||||
|
||||
// Relay candidate messages
|
||||
socket.on('candidate', function (candidate, room) {
|
||||
log('Received candidate. Broadcasting...', room);
|
||||
logIt('Received candidate. Broadcasting...', room);
|
||||
socket.broadcast.to(room).emit('candidate', candidate);
|
||||
});
|
||||
|
||||
// Relay offers
|
||||
socket.on('offer', function (offer, room) {
|
||||
log('Received offer. Broadcasting...', room);
|
||||
logIt('Received offer. Broadcasting...', room);
|
||||
socket.broadcast.to(room).emit('offer', offer);
|
||||
});
|
||||
|
||||
// Relay answers
|
||||
socket.on('answer', function (answer, room) {
|
||||
log('Received answer. Broadcasting...', room);
|
||||
logIt('Received answer. Broadcasting...', room);
|
||||
socket.broadcast.to(room).emit('answer', answer);
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user