Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.15 KB | None | 0 0
  1. //our username
  2. var name;
  3. var connectedUser;
  4.  
  5. //connecting to our signaling server
  6. var conn = new WebSocket('wss://localhost:9090');
  7.  
  8. conn.onopen = function () {
  9. console.log("Connected to the signaling server");
  10. };
  11.  
  12. //when we got a message from a signaling server
  13. conn.onmessage = function (msg) {
  14. console.log("Got message", msg.data);
  15.  
  16. var data = JSON.parse(msg.data);
  17.  
  18. switch(data.type) {
  19. case "login":
  20. handleLogin(data.success);
  21. break;
  22. //when somebody wants to call us
  23. case "offer":
  24. handleOffer(data.offer, data.name);
  25. break;
  26. case "answer":
  27. handleAnswer(data.answer);
  28. break;
  29. //when a remote peer sends an ice candidate to us
  30. case "candidate":
  31. handleCandidate(data.candidate);
  32. break;
  33. case "leave":
  34. handleLeave();
  35. break;
  36. default:
  37. break;
  38. }
  39. };
  40.  
  41. conn.onerror = function (err) {
  42. console.log("Got error", err);
  43. };
  44.  
  45. //alias for sending JSON encoded messages
  46. function send(message) {
  47. //attach the other peer username to our messages
  48. if (connectedUser) {
  49. message.name = connectedUser;
  50. }
  51.  
  52. conn.send(JSON.stringify(message));
  53. };
  54.  
  55. //******
  56. //UI selectors block
  57. //******
  58.  
  59. var loginPage = document.querySelector('#loginPage');
  60. var usernameInput = document.querySelector('#usernameInput');
  61. var loginBtn = document.querySelector('#loginBtn');
  62.  
  63. var callPage = document.querySelector('#callPage');
  64. var callToUsernameInput = document.querySelector('#callToUsernameInput');
  65. var callBtn = document.querySelector('#callBtn');
  66.  
  67. var hangUpBtn = document.querySelector('#hangUpBtn');
  68.  
  69. var localVideo = document.querySelector('#localVideo');
  70. var remoteVideo = document.querySelector('#remoteVideo');
  71.  
  72. var yourConn;
  73. var stream;
  74.  
  75. callPage.style.display = "none";
  76.  
  77. // Login when the user clicks the button
  78. loginBtn.addEventListener("click", function (event) {
  79. name = usernameInput.value;
  80.  
  81. if (name.length > 0) {
  82. send({
  83. type: "login",
  84. name: name
  85. });
  86. }
  87.  
  88. });
  89.  
  90. function handleLogin(success) {
  91. if (success === false) {
  92. alert("Ooops...try a different username");
  93. } else {
  94. loginPage.style.display = "none";
  95. callPage.style.display = "block";
  96.  
  97. //**********************
  98. //Starting a peer connection
  99. //**********************
  100.  
  101. //getting local video stream
  102. navigator.webkitGetUserMedia({ video:{width:320, height:240}, audio: true }, function (myStream) {
  103. stream = myStream;
  104.  
  105. //displaying local video stream on the page
  106. localVideo.srcObject = stream;
  107.  
  108. //using Google public stun server
  109. var configuration = {
  110. "iceServers": [{ "url": "stun:stun2.1.google.com:19302" },{url:'stun:stun01.sipphone.com'},
  111. {url:'stun:stun.ekiga.net'},
  112. {url:'stun:stun.fwdnet.net'},
  113. {url:'stun:stun.ideasip.com'},
  114. {url:'stun:stun.iptel.org'},
  115. {url:'stun:stun.rixtelecom.se'},
  116. {url:'stun:stun.schlund.de'},
  117. {url:'stun:stun.l.google.com:19302'},
  118. {url:'stun:stun1.l.google.com:19302'},
  119. {url:'stun:stun2.l.google.com:19302'},
  120. {url:'stun:stun3.l.google.com:19302'},
  121. {url:'stun:stun4.l.google.com:19302'},
  122. {url:'stun:stunserver.org'},
  123. {url:'stun:stun.softjoys.com'},
  124. {url:'stun:stun.voiparound.com'},
  125. {url:'stun:stun.voipbuster.com'},
  126. {url:'stun:stun.voipstunt.com'},
  127. {url:'stun:stun.voxgratia.org'},
  128. {url:'stun:stun.xten.com'},
  129. {
  130. url: 'turn:numb.viagenie.ca',
  131. credential: 'muazkh',
  132. username: 'webrtc@live.com'
  133. },
  134. {
  135. url: 'turn:numb.viagenie.ca',
  136. credential: '12345',
  137. username: 'kulkarniyudhi@gmail.com'
  138. },
  139. {
  140. url: 'turn:192.158.29.39:3478?transport=udp',
  141. credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
  142. username: '28224511:1379330808'
  143. },
  144. {
  145. url: 'turn:192.158.29.39:3478?transport=tcp',
  146. credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=',
  147. username: '28224511:1379330808'
  148. }]
  149. };
  150.  
  151. yourConn = new webkitRTCPeerConnection(configuration);
  152.  
  153. // setup stream listening
  154. yourConn.addStream(stream);
  155.  
  156. //when a remote user adds stream to the peer connection, we display it
  157. yourConn.onaddstream = function (e) {
  158. remoteVideo.srcObject = e.stream;
  159. };
  160.  
  161. // Setup ice handling
  162. yourConn.onicecandidate = function (event) {
  163. if (event.candidate) {
  164. send({
  165. type: "candidate",
  166. candidate: event.candidate
  167. });
  168. }
  169. };
  170.  
  171. }, function (error) {
  172. console.log(error);
  173. });
  174.  
  175. }
  176. };
  177.  
  178. //initiating a call
  179. callBtn.addEventListener("click", function () {
  180. var callToUsername = callToUsernameInput.value;
  181.  
  182. if (callToUsername.length > 0) {
  183.  
  184. connectedUser = callToUsername;
  185.  
  186. // create an offer
  187. yourConn.createOffer(function (offer) {
  188. send({
  189. type: "offer",
  190. offer: offer
  191. });
  192.  
  193. yourConn.setLocalDescription(offer);
  194. }, function (error) {
  195. alert("Error when creating an offer");
  196. });
  197.  
  198. }
  199. });
  200.  
  201. //when somebody sends us an offer
  202. function handleOffer(offer, name) {
  203. connectedUser = name;
  204. yourConn.setRemoteDescription(new RTCSessionDescription(offer));
  205.  
  206. //create an answer to an offer
  207. yourConn.createAnswer(function (answer) {
  208. yourConn.setLocalDescription(answer);
  209.  
  210. send({
  211. type: "answer",
  212. answer: answer
  213. });
  214.  
  215. }, function (error) {
  216. alert("Error when creating an answer");
  217. });
  218. };
  219.  
  220. //when we got an answer from a remote user
  221. function handleAnswer(answer) {
  222. yourConn.setRemoteDescription(new RTCSessionDescription(answer));
  223. };
  224.  
  225. //when we got an ice candidate from a remote user
  226. function handleCandidate(candidate) {
  227. yourConn.addIceCandidate(new RTCIceCandidate(candidate));
  228. };
  229.  
  230. //hang up
  231. hangUpBtn.addEventListener("click", function () {
  232.  
  233. send({
  234. type: "leave"
  235. });
  236.  
  237. handleLeave();
  238. });
  239.  
  240. function handleLeave() {
  241. connectedUser = null;
  242. remoteVideo.src = null;
  243.  
  244. yourConn.close();
  245. yourConn.onicecandidate = null;
  246. yourConn.onaddstream = null;
  247. location.reload();
  248. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement