Advertisement
Guest User

Untitled

a guest
Jun 27th, 2016
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1. var PeerManager = (function () {
  2.  
  3. var localId,
  4. config = {
  5. peerConnectionConfig: {
  6. iceServers: [
  7. {"url": "stun:23.21.150.121"},
  8. {"url": "stun:stun.l.google.com:19302"}
  9. ]
  10. },
  11. peerConnectionConstraints: {
  12. optional: [
  13. {"DtlsSrtpKeyAgreement": true}
  14. ]
  15. }
  16. },
  17. peerDatabase = {},
  18. localStream,
  19. remoteVideoContainer = document.getElementById('remoteVideosContainer'),
  20. //socket = io();
  21.  
  22. auth = getCookie("userID"),
  23. socket = io.connect("http://192.168.0.106:3000",{ query: "auth_token="+auth});
  24.  
  25.  
  26. socket.on('message', handleMessage);
  27.  
  28.  
  29. window.rr = peerDatabase;
  30.  
  31. socket.on('id', function(id) {
  32. localId = id;
  33. });
  34.  
  35. function getCookie(w){
  36. cName = "";
  37. pCOOKIES = new Array();
  38. pCOOKIES = document.cookie.split('; ');
  39. for(bb = 0; bb < pCOOKIES.length; bb++){
  40. NmeVal = new Array();
  41. NmeVal = pCOOKIES[bb].split('=');
  42. if(NmeVal[0] == w){
  43. cName = unescape(NmeVal[1]);
  44. }
  45. }
  46. return cName;
  47. }
  48.  
  49. function addPeer(remoteId) {
  50. var peer = new Peer(config.peerConnectionConfig, config.peerConnectionConstraints);
  51. peer.pc.onicecandidate = function(event) {
  52. if (event.candidate) {
  53. send('candidate', remoteId, {
  54. label: event.candidate.sdpMLineIndex,
  55. id: event.candidate.sdpMid,
  56. candidate: event.candidate.candidate
  57. });
  58. }
  59. };
  60. peer.pc.onaddstream = function(event) {
  61. var ts = document.getElementById("remoteVideo");
  62. attachMediaStream(ts, event.stream);
  63. //remoteVideosContainer.appendChild(peer.remoteVideoEl);
  64. };
  65. peer.pc.onremovestream = function(event) {
  66. peer.remoteVideoEl.src = '';
  67. // remoteVideosContainer.removeChild(peer.remoteVideoEl);
  68. };
  69. peer.pc.oniceconnectionstatechange = function(event) {
  70. switch(
  71. ( event.srcElement // Chrome
  72. || event.target ) // Firefox
  73. .iceConnectionState) {
  74. case 'disconnected':
  75. // remoteVideosContainer.removeChild(peer.remoteVideoEl);
  76. break;
  77. }
  78. };
  79. peerDatabase[remoteId] = peer;
  80.  
  81. return peer;
  82. }
  83.  
  84.  
  85. function answer(remoteId) {
  86. var pc = peerDatabase[remoteId].pc;
  87. pc.createAnswer(
  88. function(sessionDescription) {
  89. pc.setLocalDescription(sessionDescription);
  90. send('answer', remoteId, sessionDescription);
  91. },
  92. error
  93. );
  94. }
  95. function offer(remoteId) {
  96. var pc = peerDatabase[remoteId].pc;
  97. pc.createOffer(
  98. function(sessionDescription) {
  99. pc.setLocalDescription(sessionDescription);
  100. send('offer', remoteId, sessionDescription);
  101. },
  102. error
  103. );
  104. }
  105. function handleMessage(message) {
  106. var type = message.type,
  107. from = message.from,
  108. pc = (peerDatabase[from] || addPeer(from)).pc;
  109.  
  110. console.log('received ' + type + ' from ' + from);
  111.  
  112. switch (type) {
  113. case 'init':
  114. toggleLocalStream(pc);
  115. offer(from);
  116. break;
  117. case 'offer':
  118. pc.setRemoteDescription(new RTCSessionDescription(message.payload), function(){}, error);
  119. answer(from);
  120. break;
  121. case 'answer':
  122. pc.setRemoteDescription(new RTCSessionDescription(message.payload), function(){}, error);
  123. break;
  124. case 'candidate':
  125. if(pc.remoteDescription) {
  126. pc.addIceCandidate(new RTCIceCandidate({
  127. sdpMLineIndex: message.payload.label,
  128. sdpMid: message.payload.id,
  129. candidate: message.payload.candidate
  130. }), function(){}, error);
  131. }
  132. break;
  133. }
  134.  
  135. }
  136. function send(type, to, payload) {
  137. console.log('sending ' + type + ' to ' + to);
  138.  
  139. socket.emit('message', {
  140. to: to,
  141. type: type,
  142. payload: payload
  143. });
  144. }
  145. function toggleLocalStream(pc) {
  146.  
  147. if(localStream) {
  148. (!!pc.getLocalStreams().length) ? pc.removeStream(localStream) : pc.addStream(localStream);
  149. }
  150. }
  151. function error(err){
  152. console.log(err);
  153. }
  154.  
  155. return {
  156. getId: function() {
  157. return localId;
  158. },
  159.  
  160. setLocalStream: function(stream) {
  161.  
  162. // if local cam has been stopped, remove it from all outgoing streams.
  163. if(!stream) {
  164. for(id in peerDatabase) {
  165. pc = peerDatabase[id].pc;
  166. if(!!pc.getLocalStreams().length) {
  167. pc.removeStream(localStream);
  168. offer(id);
  169. }
  170. }
  171. }
  172. console.log("localstraem attached");
  173. localStream = stream;
  174. },
  175.  
  176. toggleLocalStream: function(remoteId) {
  177. peer = peerDatabase[remoteId] || addPeer(remoteId);
  178. toggleLocalStream(peer.pc);
  179. },
  180.  
  181. peerInit: function(remoteId) {
  182. peer = peerDatabase[remoteId] || addPeer(remoteId);
  183. send('init', remoteId, null);
  184.  
  185. },
  186.  
  187. peerRenegociate: function(remoteId) {
  188. offer(remoteId);
  189. },
  190.  
  191. send: function(type, payload) {
  192. socket.emit(type, payload);
  193. }
  194. };
  195.  
  196. });
  197.  
  198. var Peer = function (pcConfig, pcConstraints) {
  199. this.pc = new RTCPeerConnection(pcConfig, pcConstraints);
  200. this.remoteVideoEl = document.getElementById('remoteVideo');
  201. this.remoteVideoEl.controls = true;
  202. this.remoteVideoEl.autoplay = true;
  203. }
  204.  
  205. var client = new PeerManager();
  206. var mediaConfig = {
  207. audio:true,
  208. video: {
  209. mandatory: {},
  210. optional: []
  211. }
  212. };
  213.  
  214. attachMediaStream = function(element, stream) {
  215. if (typeof element.srcObject !== 'undefined') {
  216. element.srcObject = stream;
  217. } else if (typeof element.mozSrcObject !== 'undefined') {
  218. element.mozSrcObject = stream;
  219. } else if (typeof element.src !== 'undefined') {
  220. element.src = URL.createObjectURL(stream);
  221. } else {
  222. console.log('Error attaching stream to element.');
  223. }
  224. };
  225.  
  226. var onSuccess = function(stream) {
  227. resolve(stream);
  228. };
  229. var onError = function(error) {
  230. reject(error);
  231. };
  232.  
  233. var nbm = function (){
  234. navigator.getUserMedia(mediaConfig, successCallback, errorCallback);
  235.  
  236.  
  237. function successCallback(stream) {
  238. var a = document.getElementById('localVideo');
  239. attachMediaStream(a, stream);
  240.  
  241. client.setLocalStream(stream);
  242.  
  243.  
  244. }
  245.  
  246. function errorCallback(err) {
  247. console.log(err);
  248. }
  249. }
  250.  
  251.  
  252. window.onload = function(){
  253. nbm();
  254.  
  255. }
  256.  
  257. client.peerRenegociate(51);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement