// Muaz Khan - www.MuazKhan.com // MIT License - www.WebRTC-Experiment.com/licence // Experiments - github.com/muaz-khan/RTCMultiConnection window.enableAdapter = true; // enable adapter.js var rtcMultiConnection = new RTCMultiConnection(); // Using getScreenId.js to capture screen from any domain // You do NOT need to deploy Chrome Extension YOUR-Self!! rtcMultiConnection.getScreenConstraints = function(callback) { getScreenConstraints(function(error, screen_constraints) { if (!error) { screen_constraints = rtcMultiConnection.modifyScreenConstraints(screen_constraints); callback(error, screen_constraints); return; } alert(error); throw error; }); }; rtcMultiConnection.enableFileSharing = true; rtcMultiConnection.customStreams = {}; rtcMultiConnection.renegotiatedSessions = {}; rtcMultiConnection.sendCustomMessage = function(message) { var socket = rtcMultiConnection.getSocket(); socket.emit(rtcMultiConnection.socketCustomEvent, message); }; rtcMultiConnection.session = { data: true }; rtcMultiConnection.sdpConstraints.mandatory = { OfferToReceiveAudio: true, OfferToReceiveVideo: true }; /* // http://www.rtcmulticonnection.org/docs/fakeDataChannels/ rtcMultiConnection.fakeDataChannels = true; if(rtcMultiConnection.UA.Firefox) { rtcMultiConnection.session.data = true; } */ rtcMultiConnection.autoTranslateText = false; rtcMultiConnection.onopen = function(e) { getElement('#allow-webcam').disabled = false; getElement('#allow-mic').disabled = false; getElement('#share-files').disabled = false; getElement('#allow-screen').disabled = false; if(!e.extra.username) { e.extra.username = 'userid:' + e.userid; } addNewMessage({ header: e.extra.username, message: 'Data connection is opened between you and ' + e.extra.username + '.', userinfo: getUserinfo(rtcMultiConnection.blobURLs[rtcMultiConnection.userid], 'images/info.png'), color: '#B7ECB7' }); numbersOfUsers.innerHTML = parseInt(numbersOfUsers.innerHTML) + 1; }; var whoIsTyping = document.querySelector('#who-is-typing'); rtcMultiConnection.onmessage = function(e) { if (e.data.typing) { whoIsTyping.innerHTML = e.extra.username + ' is typing ...'; return; } if (e.data.stoppedTyping) { whoIsTyping.innerHTML = ''; return; } whoIsTyping.innerHTML = ''; addNewMessage({ header: e.extra.username, message: 'Text message from ' + e.extra.username + ':

' + (rtcMultiConnection.autoTranslateText ? linkify(e.data) + ' ( ' + linkify(e.original) + ' )' : linkify(e.data)), userinfo: getUserinfo(rtcMultiConnection.blobURLs[e.userid], 'images/chat-message.png'), color: e.extra.color }); document.title = e.data; }; var sessions = { }; rtcMultiConnection.onNewSession = function(session) { if (sessions[session.sessionid]) return; sessions[session.sessionid] = session; session.join(); addNewMessage({ header: session.extra.username, message: 'Making handshake with room owner....!', userinfo: '', color: session.extra.color }); }; rtcMultiConnection.onNewParticipant = function(participantId, userPreferences) { rtcMultiConnection.acceptParticipationRequest(participantId, userPreferences); var user = rtcMultiConnection.peers[participantId]; addNewMessage({ header: 'New Participant', message: 'A participant found. Accepting request of ' + user.extra.username + ' ( ' + participantId + ' )...', userinfo: '', color: user.extra.color }); }; rtcMultiConnection.onCustomMessage = function(message) { if (message.hasCamera || message.hasScreen) { var msg = message.extra.username + ' enabled webcam. ---- '; if (message.hasScreen) { msg = message.extra.username + ' is ready to share screen. ---- '; } addNewMessage({ header: message.extra.username, message: msg, userinfo: '', color: message.extra.color, callback: function(div) { div.querySelector('#preview').onclick = function() { this.disabled = true; message.session.oneway = true; rtcMultiConnection.sendMessage({ renegotiate: true, streamid: message.streamid, session: message.session }); }; div.querySelector('#share-your-cam').onclick = function() { this.disabled = true; if (!message.hasScreen) { session = { audio: true, video: true }; rtcMultiConnection.captureUserMedia(function(stream) { rtcMultiConnection.renegotiatedSessions[JSON.stringify(session)] = { session: session, stream: stream }; rtcMultiConnection.addStream(stream, message.userid); div.querySelector('#preview').onclick(); }, session); } if (message.hasScreen) { var session = { screen: true }; rtcMultiConnection.captureUserMedia(function(stream) { rtcMultiConnection.renegotiatedSessions[JSON.stringify(session)] = { session: session, stream: stream } rtcMultiConnection.addStream(stream, message.userid); div.querySelector('#preview').onclick(); }, session); } }; } }); } if (message.hasMic) { addNewMessage({ header: message.extra.username, message: message.extra.username + ' enabled microphone. ---- ', userinfo: '', color: message.extra.color, callback: function(div) { div.querySelector('#listen').onclick = function() { this.disabled = true; message.session.oneway = true; rtcMultiConnection.sendMessage({ renegotiate: true, streamid: message.streamid, session: message.session }); }; div.querySelector('#share-your-mic').onclick = function() { this.disabled = true; var session = { audio: true }; rtcMultiConnection.captureUserMedia(function(stream) { rtcMultiConnection.renegotiatedSessions[JSON.stringify(session)] = { session: session, stream: stream }; rtcMultiConnection.addStream(stream, message.userid); div.querySelector('#listen').onclick(); }, session); }; } }); } if (message.renegotiate) { var customStream = rtcMultiConnection.customStreams[message.streamid]; if (customStream) { // rtcMultiConnection.peers[message.userid].peer.addStream(customStream); rtcMultiConnection.renegotiate(message.userid); } } }; rtcMultiConnection.blobURLs = { }; rtcMultiConnection.onstream = function(e) { if (e.stream.getVideoTracks().length) { rtcMultiConnection.blobURLs[e.userid] = e.streamid; /* if( document.getElementById(e.userid) ) { document.getElementById(e.userid).muted = true; } */ addNewMessage({ header: e.extra.username, message: e.extra.username + ' enabled webcam.', userinfo: '