Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var PeerManager = (function () {
- var localId,
- config = {
- peerConnectionConfig: {
- iceServers: [
- {"url": "stun:23.21.150.121"},
- {"url": "stun:stun.l.google.com:19302"}
- ]
- },
- peerConnectionConstraints: {
- optional: [
- {"DtlsSrtpKeyAgreement": true}
- ]
- }
- },
- peerDatabase = {},
- localStream,
- remoteVideoContainer = document.getElementById('remoteVideosContainer'),
- //socket = io();
- auth = getCookie("userID"),
- socket = io.connect("http://192.168.0.106:3000",{ query: "auth_token="+auth});
- socket.on('message', handleMessage);
- window.rr = peerDatabase;
- socket.on('id', function(id) {
- localId = id;
- });
- function getCookie(w){
- cName = "";
- pCOOKIES = new Array();
- pCOOKIES = document.cookie.split('; ');
- for(bb = 0; bb < pCOOKIES.length; bb++){
- NmeVal = new Array();
- NmeVal = pCOOKIES[bb].split('=');
- if(NmeVal[0] == w){
- cName = unescape(NmeVal[1]);
- }
- }
- return cName;
- }
- function addPeer(remoteId) {
- var peer = new Peer(config.peerConnectionConfig, config.peerConnectionConstraints);
- peer.pc.onicecandidate = function(event) {
- if (event.candidate) {
- send('candidate', remoteId, {
- label: event.candidate.sdpMLineIndex,
- id: event.candidate.sdpMid,
- candidate: event.candidate.candidate
- });
- }
- };
- peer.pc.onaddstream = function(event) {
- var ts = document.getElementById("remoteVideo");
- attachMediaStream(ts, event.stream);
- //remoteVideosContainer.appendChild(peer.remoteVideoEl);
- };
- peer.pc.onremovestream = function(event) {
- peer.remoteVideoEl.src = '';
- // remoteVideosContainer.removeChild(peer.remoteVideoEl);
- };
- peer.pc.oniceconnectionstatechange = function(event) {
- switch(
- ( event.srcElement // Chrome
- || event.target ) // Firefox
- .iceConnectionState) {
- case 'disconnected':
- // remoteVideosContainer.removeChild(peer.remoteVideoEl);
- break;
- }
- };
- peerDatabase[remoteId] = peer;
- return peer;
- }
- function answer(remoteId) {
- var pc = peerDatabase[remoteId].pc;
- pc.createAnswer(
- function(sessionDescription) {
- pc.setLocalDescription(sessionDescription);
- send('answer', remoteId, sessionDescription);
- },
- error
- );
- }
- function offer(remoteId) {
- var pc = peerDatabase[remoteId].pc;
- pc.createOffer(
- function(sessionDescription) {
- pc.setLocalDescription(sessionDescription);
- send('offer', remoteId, sessionDescription);
- },
- error
- );
- }
- function handleMessage(message) {
- var type = message.type,
- from = message.from,
- pc = (peerDatabase[from] || addPeer(from)).pc;
- console.log('received ' + type + ' from ' + from);
- switch (type) {
- case 'init':
- toggleLocalStream(pc);
- offer(from);
- break;
- case 'offer':
- pc.setRemoteDescription(new RTCSessionDescription(message.payload), function(){}, error);
- answer(from);
- break;
- case 'answer':
- pc.setRemoteDescription(new RTCSessionDescription(message.payload), function(){}, error);
- break;
- case 'candidate':
- if(pc.remoteDescription) {
- pc.addIceCandidate(new RTCIceCandidate({
- sdpMLineIndex: message.payload.label,
- sdpMid: message.payload.id,
- candidate: message.payload.candidate
- }), function(){}, error);
- }
- break;
- }
- }
- function send(type, to, payload) {
- console.log('sending ' + type + ' to ' + to);
- socket.emit('message', {
- to: to,
- type: type,
- payload: payload
- });
- }
- function toggleLocalStream(pc) {
- if(localStream) {
- (!!pc.getLocalStreams().length) ? pc.removeStream(localStream) : pc.addStream(localStream);
- }
- }
- function error(err){
- console.log(err);
- }
- return {
- getId: function() {
- return localId;
- },
- setLocalStream: function(stream) {
- // if local cam has been stopped, remove it from all outgoing streams.
- if(!stream) {
- for(id in peerDatabase) {
- pc = peerDatabase[id].pc;
- if(!!pc.getLocalStreams().length) {
- pc.removeStream(localStream);
- offer(id);
- }
- }
- }
- console.log("localstraem attached");
- localStream = stream;
- },
- toggleLocalStream: function(remoteId) {
- peer = peerDatabase[remoteId] || addPeer(remoteId);
- toggleLocalStream(peer.pc);
- },
- peerInit: function(remoteId) {
- peer = peerDatabase[remoteId] || addPeer(remoteId);
- send('init', remoteId, null);
- },
- peerRenegociate: function(remoteId) {
- offer(remoteId);
- },
- send: function(type, payload) {
- socket.emit(type, payload);
- }
- };
- });
- var Peer = function (pcConfig, pcConstraints) {
- this.pc = new RTCPeerConnection(pcConfig, pcConstraints);
- this.remoteVideoEl = document.getElementById('remoteVideo');
- this.remoteVideoEl.controls = true;
- this.remoteVideoEl.autoplay = true;
- }
- var client = new PeerManager();
- var mediaConfig = {
- audio:true,
- video: {
- mandatory: {},
- optional: []
- }
- };
- attachMediaStream = function(element, stream) {
- if (typeof element.srcObject !== 'undefined') {
- element.srcObject = stream;
- } else if (typeof element.mozSrcObject !== 'undefined') {
- element.mozSrcObject = stream;
- } else if (typeof element.src !== 'undefined') {
- element.src = URL.createObjectURL(stream);
- } else {
- console.log('Error attaching stream to element.');
- }
- };
- var onSuccess = function(stream) {
- resolve(stream);
- };
- var onError = function(error) {
- reject(error);
- };
- var nbm = function (){
- navigator.getUserMedia(mediaConfig, successCallback, errorCallback);
- function successCallback(stream) {
- var a = document.getElementById('localVideo');
- attachMediaStream(a, stream);
- client.setLocalStream(stream);
- }
- function errorCallback(err) {
- console.log(err);
- }
- }
- window.onload = function(){
- nbm();
- }
- client.peerRenegociate(51);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement