app.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. "use strict";
  2. const localMedia = document.getElementById("my-video");
  3. localMedia.muted = true;
  4. navigator.mediaDevices.getUserMedia({
  5. audio: true,
  6. video: true,
  7. }).then((localStream) => {
  8. localMedia.srcObject = localStream;
  9. grid.localStream = localStream;
  10. localMedia.addEventListener("loadedmetadata", () => localMedia.play());
  11. }).catch((error) => {
  12. peer.error = error.message;
  13. });
  14. const callee = new Vue({
  15. el: "#callee",
  16. data: {
  17. calleeId: "",
  18. },
  19. methods: {
  20. addPeer: () => {
  21. if (callee.calleeId && !grid.peers.includes(callee.calleeId))
  22. grid.peers.push(callee.calleeId);
  23. },
  24. },
  25. });
  26. const grid = new Vue({
  27. el: "#grid",
  28. data: {
  29. localStream: undefined,
  30. peers: [],
  31. },
  32. methods: {
  33. makeCall: (peerId) => {
  34. let call = peer.peer.call(peerId, grid.localStream);
  35. let video = document.getElementById(call.peer);
  36. call.on("stream", (remoteStream) => {
  37. video.srcObject = remoteStream;
  38. video.addEventListener("loadedmetadata", () => video.play());
  39. });
  40. },
  41. },
  42. });
  43. const peer = new Vue({
  44. el: "#peer",
  45. data: {
  46. clientId: "",
  47. error: "",
  48. peer: new Peer(undefined, {
  49. host: "localhost",
  50. key: "testingkey",
  51. path: "/peerjs/conference",
  52. port: 3000,
  53. }),
  54. },
  55. });
  56. peer.peer.on("close", () => peer.clientId = "");
  57. peer.peer.on("error", (error) => peer.error = error.message);
  58. peer.peer.on("open", () => peer.clientId = peer.peer.id);
  59. peer.peer.on("call", (call) => {
  60. call.answer(grid.localStream);
  61. let video = document.getElementById(call.peer);
  62. call.on("stream", (remoteStream) => {
  63. video.srcObject = remoteStream;
  64. video.addEventListener("loadedmetadata", () => video.play());
  65. });
  66. });