Advertisement
Guest User

Untitled

a guest
Aug 31st, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 90.64 KB | None | 0 0
  1. ! function(e, t) {
  2. "object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.SpinBikeRpmMeter = t() : e.SpinBikeRpmMeter = t()
  3. }(this, function() {
  4. return function(e) {
  5. function t(r) {
  6. if (n[r]) return n[r].exports;
  7. var i = n[r] = {
  8. exports: {},
  9. id: r,
  10. loaded: !1
  11. };
  12. return e[r].call(i.exports, i, i.exports, t), i.loaded = !0, i.exports
  13. }
  14. var n = {};
  15. return t.m = e, t.c = n, t.p = "", t(0)
  16. }([function(e, t, n) {
  17. "use strict";
  18.  
  19. function r(e) {
  20. return e && e.__esModule ? e : {
  21. default: e
  22. }
  23. }
  24.  
  25. function i(e, t) {
  26. if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function")
  27. }
  28.  
  29. function a(e, t) {
  30. if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  31. return !t || "object" != typeof t && "function" != typeof t ? e : t
  32. }
  33.  
  34. function o(e, t) {
  35. if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t);
  36. e.prototype = Object.create(t && t.prototype, {
  37. constructor: {
  38. value: e,
  39. enumerable: !1,
  40. writable: !0,
  41. configurable: !0
  42. }
  43. }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t)
  44. }
  45. Object.defineProperty(t, "__esModule", {
  46. value: !0
  47. }), t.PULSE_EVENT = void 0;
  48. var s = function() {
  49. function e(e, t) {
  50. for (var n = 0; n < t.length; n++) {
  51. var r = t[n];
  52. r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)
  53. }
  54. }
  55. return function(t, n, r) {
  56. return n && e(t.prototype, n), r && e(t, r), t
  57. }
  58. }(),
  59. c = n(2),
  60. d = r(c),
  61. u = n(7),
  62. p = r(u),
  63. f = n(3),
  64. l = r(f),
  65. m = n(16),
  66. h = r(m),
  67. v = n(5),
  68. g = r(v),
  69. w = ((0, g.default)("spin-bike:rpm-meter"), t.PULSE_EVENT = "pulse"),
  70. y = function(e) {
  71. function t() {
  72. var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
  73. n = e.bufferSize,
  74. r = void 0 === n ? 512 : n,
  75. o = e.numberOfInputChannels,
  76. s = void 0 === o ? 1 : o,
  77. c = e.numberOfOutputChannels,
  78. d = void 0 === c ? 1 : c;
  79. i(this, t);
  80. var u = a(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this));
  81. return u.initAudioScriptProcessor(r, s, d), u
  82. }
  83. return o(t, e), s(t, [{
  84. key: "getUserMedia",
  85. value: function() {
  86. return new Promise(function(e, t) {
  87. (0, l.default)({
  88. audio: !0,
  89. video: !1
  90. }, function(n, r) {
  91. n && t("Can't get user media (getUserMedia)"), e(r)
  92. })
  93. })
  94. }
  95. }, {
  96. key: "start",
  97. value: function() {
  98. var e = this,
  99. t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
  100. n = t.pulseThresholdRms,
  101. r = void 0 === n ? .1 : n,
  102. i = t.minSecondsBetweenPulses,
  103. a = void 0 === i ? .2 : i;
  104. return this.pulseThresholdRms = r, this.minSecondsBetweenPulses = a, this.isFirstPulse = !0, this.lastPulseTimestamp = 0, new Promise(function(t, n) {
  105. e.getUserMedia().then(function(n) {
  106. var r = e.audioContext.createMediaStreamSource(n);
  107. r.connect(e.audioScriptProcessor), e.audioScriptProcessor.connect(e.audioContext.destination), t(function() {
  108. r.disconnect(), e.audioScriptProcessor.disconnect()
  109. })
  110. }).catch(function(e) {
  111. return n(e)
  112. })
  113. })
  114. }
  115. }, {
  116. key: "initAudioScriptProcessor",
  117. value: function(e, t, n) {
  118. this.audioContext = d.default, this.audioScriptProcessor = this.audioContext.createScriptProcessor(e, t, n), this.audioScriptProcessor.onaudioprocess = this.handleAudioProcess.bind(this)
  119. }
  120. }, {
  121. key: "handleAudioProcess",
  122. value: function(e) {
  123. var t = e.inputBuffer.getChannelData(0),
  124. n = this.getRms(t);
  125. if (this.isPulse(n)) {
  126. if (this.isFirstPulse) return this.lastPulseTimestamp = p.default.now(), void(this.isFirstPulse = !1);
  127. var r = p.default.now(),
  128. i = r - this.lastPulseTimestamp,
  129. a = this.calcRPM(i);
  130. this.lastPulseTimestamp = r;
  131. var o = {
  132. timestamp: r,
  133. secondsBetweenPulses: i,
  134. rpm: a
  135. };
  136. this.emit(w, o)
  137. }
  138. }
  139. }, {
  140. key: "calcRPM",
  141. value: function(e) {
  142. return Math.floor(60 / e)
  143. }
  144. }, {
  145. key: "getRms",
  146. value: function(e) {
  147. var t = 0;
  148. return e.forEach(function(e) {
  149. t += e * e
  150. }), Math.sqrt(t / e.length)
  151. }
  152. }, {
  153. key: "isPulse",
  154. value: function(e) {
  155. return !(e < this.pulseThresholdRms) && p.default.now() - this.lastPulseTimestamp > this.minSecondsBetweenPulses
  156. }
  157. }]), t
  158. }(h.default);
  159. t.default = y
  160. }, function(e, t) {
  161. "use strict";
  162. var n = !0,
  163. r = {
  164. disableLog: function(e) {
  165. return "boolean" != typeof e ? new Error("Argument type: " + typeof e + ". Please use a boolean.") : (n = e, e ? "adapter.js logging disabled" : "adapter.js logging enabled")
  166. },
  167. log: function() {
  168. if ("object" == typeof window) {
  169. if (n) return;
  170. "undefined" != typeof console && "function" == typeof console.log && console.log.apply(console, arguments)
  171. }
  172. },
  173. extractVersion: function(e, t, n) {
  174. var r = e.match(t);
  175. return r && r.length >= n && parseInt(r[n], 10)
  176. },
  177. detectBrowser: function() {
  178. var e = {};
  179. if (e.browser = null, e.version = null, e.minVersion = null, "undefined" == typeof window || !window.navigator) return e.browser = "Not a browser.", e;
  180. if (navigator.mozGetUserMedia) e.browser = "firefox", e.version = this.extractVersion(navigator.userAgent, /Firefox\/([0-9]+)\./, 1), e.minVersion = 31;
  181. else if (navigator.webkitGetUserMedia)
  182. if (window.webkitRTCPeerConnection) e.browser = "chrome", e.version = this.extractVersion(navigator.userAgent, /Chrom(e|ium)\/([0-9]+)\./, 2), e.minVersion = 38;
  183. else {
  184. if (!navigator.userAgent.match(/Version\/(\d+).(\d+)/)) return e.browser = "Unsupported webkit-based browser with GUM support but no WebRTC support.", e;
  185. e.browser = "safari", e.version = this.extractVersion(navigator.userAgent, /AppleWebKit\/([0-9]+)\./, 1), e.minVersion = 602
  186. }
  187. else {
  188. if (!navigator.mediaDevices || !navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) return e.browser = "Not a supported browser.", e;
  189. e.browser = "edge", e.version = this.extractVersion(navigator.userAgent, /Edge\/(\d+).(\d+)$/, 2), e.minVersion = 10547
  190. }
  191. return e.version < e.minVersion && r.log("Browser: " + e.browser + " Version: " + e.version + " < minimum supported version: " + e.minVersion + "\n some things might not work!"), e
  192. }
  193. };
  194. e.exports = {
  195. log: r.log,
  196. disableLog: r.disableLog,
  197. browserDetails: r.detectBrowser(),
  198. extractVersion: r.extractVersion
  199. }
  200. }, function(e, t, n) {
  201. var r = n(4),
  202. i = r.AudioContext || r.webkitAudioContext;
  203. i && (e.exports = new i)
  204. }, function(e, t, n) {
  205. n(8);
  206. e.exports = function(e, t) {
  207. var n, r = 2 === arguments.length,
  208. i = {
  209. video: !0,
  210. audio: !0
  211. },
  212. a = "PermissionDeniedError",
  213. o = "PERMISSION_DENIED",
  214. s = "ConstraintNotSatisfiedError";
  215. return r || (t = e, e = i), "undefined" != typeof navigator && navigator.getUserMedia ? e.audio || e.video ? (localStorage && "true" === localStorage.useFirefoxFakeDevice && (e.fake = !0), void navigator.mediaDevices.getUserMedia(e).then(function(e) {
  216. t(null, e)
  217. }).catch(function(e) {
  218. var n;
  219. "string" == typeof e ? (n = new Error("MediaStreamError"), e === a || e === o ? n.name = a : n.name = s) : (n = e, n.name || (n[a] ? e.name = a : e.name = s)), t(n)
  220. })) : (n = new Error("MediaStreamError"), n.name = "NoMediaRequestedError", setTimeout(function() {
  221. t(n)
  222. }, 0)) : (n = new Error("MediaStreamError"), n.name = "NotSupportedError", setTimeout(function() {
  223. t(n)
  224. }, 0))
  225. }
  226. }, function(e, t) {
  227. (function(t) {
  228. "undefined" != typeof window ? e.exports = window : "undefined" != typeof t ? e.exports = t : e.exports = {}
  229. }).call(t, function() {
  230. return this
  231. }())
  232. }, function(e, t) {
  233. function n() {}
  234. e.exports = n
  235. }, function(e, t) {
  236. "use strict";
  237. var n = {};
  238. n.generateIdentifier = function() {
  239. return Math.random().toString(36).substr(2, 10)
  240. }, n.localCName = n.generateIdentifier(), n.splitLines = function(e) {
  241. return e.trim().split("\n").map(function(e) {
  242. return e.trim()
  243. })
  244. }, n.splitSections = function(e) {
  245. var t = e.split("\nm=");
  246. return t.map(function(e, t) {
  247. return (t > 0 ? "m=" + e : e).trim() + "\r\n"
  248. })
  249. }, n.matchPrefix = function(e, t) {
  250. return n.splitLines(e).filter(function(e) {
  251. return 0 === e.indexOf(t)
  252. })
  253. }, n.parseCandidate = function(e) {
  254. var t;
  255. t = 0 === e.indexOf("a=candidate:") ? e.substring(12).split(" ") : e.substring(10).split(" ");
  256. for (var n = {
  257. foundation: t[0],
  258. component: t[1],
  259. protocol: t[2].toLowerCase(),
  260. priority: parseInt(t[3], 10),
  261. ip: t[4],
  262. port: parseInt(t[5], 10),
  263. type: t[7]
  264. }, r = 8; r < t.length; r += 2) switch (t[r]) {
  265. case "raddr":
  266. n.relatedAddress = t[r + 1];
  267. break;
  268. case "rport":
  269. n.relatedPort = parseInt(t[r + 1], 10);
  270. break;
  271. case "tcptype":
  272. n.tcpType = t[r + 1];
  273. break;
  274. default:
  275. n[t[r]] = t[r + 1]
  276. }
  277. return n
  278. }, n.writeCandidate = function(e) {
  279. var t = [];
  280. t.push(e.foundation), t.push(e.component), t.push(e.protocol.toUpperCase()), t.push(e.priority), t.push(e.ip), t.push(e.port);
  281. var n = e.type;
  282. return t.push("typ"), t.push(n), "host" !== n && e.relatedAddress && e.relatedPort && (t.push("raddr"), t.push(e.relatedAddress), t.push("rport"), t.push(e.relatedPort)), e.tcpType && "tcp" === e.protocol.toLowerCase() && (t.push("tcptype"), t.push(e.tcpType)), "candidate:" + t.join(" ")
  283. }, n.parseIceOptions = function(e) {
  284. return e.substr(14).split(" ")
  285. }, n.parseRtpMap = function(e) {
  286. var t = e.substr(9).split(" "),
  287. n = {
  288. payloadType: parseInt(t.shift(), 10)
  289. };
  290. return t = t[0].split("/"), n.name = t[0], n.clockRate = parseInt(t[1], 10), n.numChannels = 3 === t.length ? parseInt(t[2], 10) : 1, n
  291. }, n.writeRtpMap = function(e) {
  292. var t = e.payloadType;
  293. return void 0 !== e.preferredPayloadType && (t = e.preferredPayloadType), "a=rtpmap:" + t + " " + e.name + "/" + e.clockRate + (1 !== e.numChannels ? "/" + e.numChannels : "") + "\r\n"
  294. }, n.parseExtmap = function(e) {
  295. var t = e.substr(9).split(" ");
  296. return {
  297. id: parseInt(t[0], 10),
  298. direction: t[0].indexOf("/") > 0 ? t[0].split("/")[1] : "sendrecv",
  299. uri: t[1]
  300. }
  301. }, n.writeExtmap = function(e) {
  302. return "a=extmap:" + (e.id || e.preferredId) + (e.direction && "sendrecv" !== e.direction ? "/" + e.direction : "") + " " + e.uri + "\r\n"
  303. }, n.parseFmtp = function(e) {
  304. for (var t, n = {}, r = e.substr(e.indexOf(" ") + 1).split(";"), i = 0; i < r.length; i++) t = r[i].trim().split("="), n[t[0].trim()] = t[1];
  305. return n
  306. }, n.writeFmtp = function(e) {
  307. var t = "",
  308. n = e.payloadType;
  309. if (void 0 !== e.preferredPayloadType && (n = e.preferredPayloadType), e.parameters && Object.keys(e.parameters).length) {
  310. var r = [];
  311. Object.keys(e.parameters).forEach(function(t) {
  312. r.push(t + "=" + e.parameters[t])
  313. }), t += "a=fmtp:" + n + " " + r.join(";") + "\r\n"
  314. }
  315. return t
  316. }, n.parseRtcpFb = function(e) {
  317. var t = e.substr(e.indexOf(" ") + 1).split(" ");
  318. return {
  319. type: t.shift(),
  320. parameter: t.join(" ")
  321. }
  322. }, n.writeRtcpFb = function(e) {
  323. var t = "",
  324. n = e.payloadType;
  325. return void 0 !== e.preferredPayloadType && (n = e.preferredPayloadType), e.rtcpFeedback && e.rtcpFeedback.length && e.rtcpFeedback.forEach(function(e) {
  326. t += "a=rtcp-fb:" + n + " " + e.type + (e.parameter && e.parameter.length ? " " + e.parameter : "") + "\r\n"
  327. }), t
  328. }, n.parseSsrcMedia = function(e) {
  329. var t = e.indexOf(" "),
  330. n = {
  331. ssrc: parseInt(e.substr(7, t - 7), 10)
  332. },
  333. r = e.indexOf(":", t);
  334. return r > -1 ? (n.attribute = e.substr(t + 1, r - t - 1), n.value = e.substr(r + 1)) : n.attribute = e.substr(t + 1), n
  335. }, n.getMid = function(e) {
  336. var t = n.matchPrefix(e, "a=mid:")[0];
  337. if (t) return t.substr(6)
  338. }, n.parseFingerprint = function(e) {
  339. var t = e.substr(14).split(" ");
  340. return {
  341. algorithm: t[0].toLowerCase(),
  342. value: t[1]
  343. }
  344. }, n.getDtlsParameters = function(e, t) {
  345. var r = n.matchPrefix(e + t, "a=fingerprint:");
  346. return {
  347. role: "auto",
  348. fingerprints: r.map(n.parseFingerprint)
  349. }
  350. }, n.writeDtlsParameters = function(e, t) {
  351. var n = "a=setup:" + t + "\r\n";
  352. return e.fingerprints.forEach(function(e) {
  353. n += "a=fingerprint:" + e.algorithm + " " + e.value + "\r\n"
  354. }), n
  355. }, n.getIceParameters = function(e, t) {
  356. var r = n.splitLines(e);
  357. r = r.concat(n.splitLines(t));
  358. var i = {
  359. usernameFragment: r.filter(function(e) {
  360. return 0 === e.indexOf("a=ice-ufrag:")
  361. })[0].substr(12),
  362. password: r.filter(function(e) {
  363. return 0 === e.indexOf("a=ice-pwd:")
  364. })[0].substr(10)
  365. };
  366. return i
  367. }, n.writeIceParameters = function(e) {
  368. return "a=ice-ufrag:" + e.usernameFragment + "\r\na=ice-pwd:" + e.password + "\r\n"
  369. }, n.parseRtpParameters = function(e) {
  370. for (var t = {
  371. codecs: [],
  372. headerExtensions: [],
  373. fecMechanisms: [],
  374. rtcp: []
  375. }, r = n.splitLines(e), i = r[0].split(" "), a = 3; a < i.length; a++) {
  376. var o = i[a],
  377. s = n.matchPrefix(e, "a=rtpmap:" + o + " ")[0];
  378. if (s) {
  379. var c = n.parseRtpMap(s),
  380. d = n.matchPrefix(e, "a=fmtp:" + o + " ");
  381. switch (c.parameters = d.length ? n.parseFmtp(d[0]) : {}, c.rtcpFeedback = n.matchPrefix(e, "a=rtcp-fb:" + o + " ").map(n.parseRtcpFb), t.codecs.push(c), c.name.toUpperCase()) {
  382. case "RED":
  383. case "ULPFEC":
  384. t.fecMechanisms.push(c.name.toUpperCase())
  385. }
  386. }
  387. }
  388. return n.matchPrefix(e, "a=extmap:").forEach(function(e) {
  389. t.headerExtensions.push(n.parseExtmap(e))
  390. }), t
  391. }, n.writeRtpDescription = function(e, t) {
  392. var r = "";
  393. r += "m=" + e + " ", r += t.codecs.length > 0 ? "9" : "0", r += " UDP/TLS/RTP/SAVPF ", r += t.codecs.map(function(e) {
  394. return void 0 !== e.preferredPayloadType ? e.preferredPayloadType : e.payloadType
  395. }).join(" ") + "\r\n", r += "c=IN IP4 0.0.0.0\r\n", r += "a=rtcp:9 IN IP4 0.0.0.0\r\n", t.codecs.forEach(function(e) {
  396. r += n.writeRtpMap(e), r += n.writeFmtp(e), r += n.writeRtcpFb(e)
  397. });
  398. var i = 0;
  399. return t.codecs.forEach(function(e) {
  400. e.maxptime > i && (i = e.maxptime)
  401. }), i > 0 && (r += "a=maxptime:" + i + "\r\n"), r += "a=rtcp-mux\r\n", t.headerExtensions.forEach(function(e) {
  402. r += n.writeExtmap(e)
  403. }), r
  404. }, n.parseRtpEncodingParameters = function(e) {
  405. var t, r = [],
  406. i = n.parseRtpParameters(e),
  407. a = i.fecMechanisms.indexOf("RED") !== -1,
  408. o = i.fecMechanisms.indexOf("ULPFEC") !== -1,
  409. s = n.matchPrefix(e, "a=ssrc:").map(function(e) {
  410. return n.parseSsrcMedia(e)
  411. }).filter(function(e) {
  412. return "cname" === e.attribute
  413. }),
  414. c = s.length > 0 && s[0].ssrc,
  415. d = n.matchPrefix(e, "a=ssrc-group:FID").map(function(e) {
  416. var t = e.split(" ");
  417. return t.shift(), t.map(function(e) {
  418. return parseInt(e, 10)
  419. })
  420. });
  421. d.length > 0 && d[0].length > 1 && d[0][0] === c && (t = d[0][1]), i.codecs.forEach(function(e) {
  422. if ("RTX" === e.name.toUpperCase() && e.parameters.apt) {
  423. var n = {
  424. ssrc: c,
  425. codecPayloadType: parseInt(e.parameters.apt, 10),
  426. rtx: {
  427. ssrc: t
  428. }
  429. };
  430. r.push(n), a && (n = JSON.parse(JSON.stringify(n)), n.fec = {
  431. ssrc: t,
  432. mechanism: o ? "red+ulpfec" : "red"
  433. }, r.push(n))
  434. }
  435. }), 0 === r.length && c && r.push({
  436. ssrc: c
  437. });
  438. var u = n.matchPrefix(e, "b=");
  439. return u.length && (0 === u[0].indexOf("b=TIAS:") ? u = parseInt(u[0].substr(7), 10) : 0 === u[0].indexOf("b=AS:") && (u = parseInt(u[0].substr(5), 10)), r.forEach(function(e) {
  440. e.maxBitrate = u
  441. })), r
  442. }, n.parseRtcpParameters = function(e) {
  443. var t = {},
  444. r = n.matchPrefix(e, "a=ssrc:").map(function(e) {
  445. return n.parseSsrcMedia(e)
  446. }).filter(function(e) {
  447. return "cname" === e.attribute
  448. })[0];
  449. r && (t.cname = r.value, t.ssrc = r.ssrc);
  450. var i = n.matchPrefix(e, "a=rtcp-rsize");
  451. t.reducedSize = i.length > 0, t.compound = 0 === i.length;
  452. var a = n.matchPrefix(e, "a=rtcp-mux");
  453. return t.mux = a.length > 0, t
  454. }, n.parseMsid = function(e) {
  455. var t, r = n.matchPrefix(e, "a=msid:");
  456. if (1 === r.length) return t = r[0].substr(7).split(" "), {
  457. stream: t[0],
  458. track: t[1]
  459. };
  460. var i = n.matchPrefix(e, "a=ssrc:").map(function(e) {
  461. return n.parseSsrcMedia(e)
  462. }).filter(function(e) {
  463. return "msid" === e.attribute
  464. });
  465. return i.length > 0 ? (t = i[0].value.split(" "), {
  466. stream: t[0],
  467. track: t[1]
  468. }) : void 0
  469. }, n.writeSessionBoilerplate = function() {
  470. return "v=0\r\no=thisisadapterortc 8169639915646943137 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"
  471. }, n.writeMediaSection = function(e, t, r, i) {
  472. var a = n.writeRtpDescription(e.kind, t);
  473. if (a += n.writeIceParameters(e.iceGatherer.getLocalParameters()), a += n.writeDtlsParameters(e.dtlsTransport.getLocalParameters(), "offer" === r ? "actpass" : "active"), a += "a=mid:" + e.mid + "\r\n", a += e.direction ? "a=" + e.direction + "\r\n" : e.rtpSender && e.rtpReceiver ? "a=sendrecv\r\n" : e.rtpSender ? "a=sendonly\r\n" : e.rtpReceiver ? "a=recvonly\r\n" : "a=inactive\r\n", e.rtpSender) {
  474. var o = "msid:" + i.id + " " + e.rtpSender.track.id + "\r\n";
  475. a += "a=" + o, a += "a=ssrc:" + e.sendEncodingParameters[0].ssrc + " " + o, e.sendEncodingParameters[0].rtx && (a += "a=ssrc:" + e.sendEncodingParameters[0].rtx.ssrc + " " + o, a += "a=ssrc-group:FID " + e.sendEncodingParameters[0].ssrc + " " + e.sendEncodingParameters[0].rtx.ssrc + "\r\n")
  476. }
  477. return a += "a=ssrc:" + e.sendEncodingParameters[0].ssrc + " cname:" + n.localCName + "\r\n", e.rtpSender && e.sendEncodingParameters[0].rtx && (a += "a=ssrc:" + e.sendEncodingParameters[0].rtx.ssrc + " cname:" + n.localCName + "\r\n"), a
  478. }, n.getDirection = function(e, t) {
  479. for (var r = n.splitLines(e), i = 0; i < r.length; i++) switch (r[i]) {
  480. case "a=sendrecv":
  481. case "a=sendonly":
  482. case "a=recvonly":
  483. case "a=inactive":
  484. return r[i].substr(2)
  485. }
  486. return t ? n.getDirection(t) : "sendrecv"
  487. }, n.getKind = function(e) {
  488. var t = n.splitLines(e),
  489. r = t[0].split(" ");
  490. return r[0].substr(2)
  491. }, n.isRejected = function(e) {
  492. return "0" === e.split(" ", 2)[1]
  493. }, e.exports = n
  494. }, function(e, t) {
  495. function n(e) {
  496. return e
  497. }
  498.  
  499. function r(e) {
  500. return Math.round(e)
  501. }
  502.  
  503. function i(e) {
  504. return "string" == typeof e || "[object String]" === Object.prototype.toString.call(e)
  505. }
  506.  
  507. function a(e) {
  508. return "number" == typeof e || "[object Number]" === Object.prototype.toString.call(e)
  509. }
  510.  
  511. function o(e) {
  512. return "[object Date]" === Object.prototype.toString.call(e)
  513. }
  514. var s = e.exports = {};
  515. s.Millisecond = .001, s.Second = 1, s.Minute = 60, s.Hour = 60 * s.Minute, s.Day = 24 * s.Hour, s.Week = 7 * s.Day, s.Month = 30.436875 * s.Day, s.Year = 12 * s.Month;
  516. var c = new RegExp("^\\s*([-+]?)\\s*" + ["y", "M", "w", "d", "h", "m", "s", "ms"].map(function(e) {
  517. return "(?:(\\d+)\\s*" + e + ")?"
  518. }).join("\\s*") + "\\s*$"),
  519. d = n;
  520. Object.defineProperty(s, "round", {
  521. get: function() {
  522. return d
  523. },
  524. set: function(e) {
  525. d = e ? r : n
  526. }
  527. }), s.now = function(e) {
  528. var t = Date.now() / 1e3;
  529. return d(e ? s.add(t, e) : t)
  530. }, s.add = function(e, t) {
  531. if (!a(e)) throw new Error("Time must be a number");
  532. if (i(t)) {
  533. var n = c.exec(t);
  534. if (!n) throw new Error("Expected delta string format: [+|-] [{years}y] [{months}M] [{weeks}w] [{days}d] [{hours}h] [{minutes}m] [{seconds}s] [{milliseconds}ms]");
  535. t = ("-" === n[1] ? -1 : 1) * ((n[2] || 0) * s.Year + (n[3] || 0) * s.Month + (n[4] || 0) * s.Week + (n[5] || 0) * s.Day + (n[6] || 0) * s.Hour + (n[7] || 0) * s.Minute + (n[8] || 0) * s.Second + (n[9] || 0) * s.Millisecond)
  536. } else if (!a(t)) throw new Error("Delta must be either a string or a number");
  537. return d(e + t)
  538. }, s.duration = function(e) {
  539. return s.add(0, e)
  540. }, s.fromDate = function(e) {
  541. if (i(e)) e = new Date(e);
  542. else if (!o(e)) throw new Error("Expected either a string or a date");
  543. return d(e.getTime() / 1e3)
  544. }, s.toDate = function(e) {
  545. if (!a(e)) throw new Error("Expected a number");
  546. return new Date(1e3 * e)
  547. }
  548. }, function(e, t, n) {
  549. "use strict";
  550. ! function() {
  551. var t = n(1).log,
  552. r = n(1).browserDetails;
  553. e.exports.browserDetails = r, e.exports.extractVersion = n(1).extractVersion, e.exports.disableLog = n(1).disableLog;
  554. var i = n(9) || null,
  555. a = n(11) || null,
  556. o = n(13) || null,
  557. s = n(15) || null;
  558. switch (r.browser) {
  559. case "opera":
  560. case "chrome":
  561. if (!i || !i.shimPeerConnection) return void t("Chrome shim is not included in this adapter release.");
  562. t("adapter.js shimming chrome."), e.exports.browserShim = i, i.shimGetUserMedia(), i.shimMediaStream(), i.shimSourceObject(), i.shimPeerConnection(), i.shimOnTrack();
  563. break;
  564. case "firefox":
  565. if (!o || !o.shimPeerConnection) return void t("Firefox shim is not included in this adapter release.");
  566. t("adapter.js shimming firefox."), e.exports.browserShim = o, o.shimGetUserMedia(), o.shimSourceObject(), o.shimPeerConnection(), o.shimOnTrack();
  567. break;
  568. case "edge":
  569. if (!a || !a.shimPeerConnection) return void t("MS edge shim is not included in this adapter release.");
  570. t("adapter.js shimming edge."), e.exports.browserShim = a, a.shimGetUserMedia(), a.shimPeerConnection();
  571. break;
  572. case "safari":
  573. if (!s) return void t("Safari shim is not included in this adapter release.");
  574. t("adapter.js shimming safari."), e.exports.browserShim = s, s.shimGetUserMedia();
  575. break;
  576. default:
  577. t("Unsupported browser!")
  578. }
  579. }()
  580. }, function(e, t, n) {
  581. "use strict";
  582. var r = n(1).log,
  583. i = n(1).browserDetails,
  584. a = {
  585. shimMediaStream: function() {
  586. window.MediaStream = window.MediaStream || window.webkitMediaStream
  587. },
  588. shimOnTrack: function() {
  589. "object" != typeof window || !window.RTCPeerConnection || "ontrack" in window.RTCPeerConnection.prototype || Object.defineProperty(window.RTCPeerConnection.prototype, "ontrack", {
  590. get: function() {
  591. return this._ontrack
  592. },
  593. set: function(e) {
  594. var t = this;
  595. this._ontrack && (this.removeEventListener("track", this._ontrack), this.removeEventListener("addstream", this._ontrackpoly)), this.addEventListener("track", this._ontrack = e), this.addEventListener("addstream", this._ontrackpoly = function(e) {
  596. e.stream.addEventListener("addtrack", function(n) {
  597. var r = new Event("track");
  598. r.track = n.track, r.receiver = {
  599. track: n.track
  600. }, r.streams = [e.stream], t.dispatchEvent(r)
  601. }), e.stream.getTracks().forEach(function(t) {
  602. var n = new Event("track");
  603. n.track = t, n.receiver = {
  604. track: t
  605. }, n.streams = [e.stream], this.dispatchEvent(n)
  606. }.bind(this))
  607. }.bind(this))
  608. }
  609. })
  610. },
  611. shimSourceObject: function() {
  612. "object" == typeof window && (!window.HTMLMediaElement || "srcObject" in window.HTMLMediaElement.prototype || Object.defineProperty(window.HTMLMediaElement.prototype, "srcObject", {
  613. get: function() {
  614. return this._srcObject
  615. },
  616. set: function(e) {
  617. var t = this;
  618. return this._srcObject = e, this.src && URL.revokeObjectURL(this.src), e ? (this.src = URL.createObjectURL(e), e.addEventListener("addtrack", function() {
  619. t.src && URL.revokeObjectURL(t.src), t.src = URL.createObjectURL(e)
  620. }), void e.addEventListener("removetrack", function() {
  621. t.src && URL.revokeObjectURL(t.src), t.src = URL.createObjectURL(e)
  622. })) : void(this.src = "")
  623. }
  624. }))
  625. },
  626. shimPeerConnection: function() {
  627. window.RTCPeerConnection = function(e, t) {
  628. r("PeerConnection"), e && e.iceTransportPolicy && (e.iceTransports = e.iceTransportPolicy);
  629. var n = new webkitRTCPeerConnection(e, t),
  630. i = n.getStats.bind(n);
  631. return n.getStats = function(e, t, n) {
  632. var r = this,
  633. a = arguments;
  634. if (arguments.length > 0 && "function" == typeof e) return i(e, t);
  635. var o = function(e) {
  636. var t = {},
  637. n = e.result();
  638. return n.forEach(function(e) {
  639. var n = {
  640. id: e.id,
  641. timestamp: e.timestamp,
  642. type: e.type
  643. };
  644. e.names().forEach(function(t) {
  645. n[t] = e.stat(t)
  646. }), t[n.id] = n
  647. }), t
  648. },
  649. s = function(e, t) {
  650. var n = new Map(Object.keys(e).map(function(t) {
  651. return [t, e[t]]
  652. }));
  653. return t = t || e, Object.keys(t).forEach(function(e) {
  654. n[e] = t[e]
  655. }), n
  656. };
  657. if (arguments.length >= 2) {
  658. var c = function(e) {
  659. a[1](s(o(e)))
  660. };
  661. return i.apply(this, [c, arguments[0]])
  662. }
  663. return new Promise(function(t, n) {
  664. 1 === a.length && "object" == typeof e ? i.apply(r, [function(e) {
  665. t(s(o(e)))
  666. }, n]) : i.apply(r, [function(e) {
  667. t(s(o(e), e.result()))
  668. }, n])
  669. }).then(t, n)
  670. }, n
  671. }, window.RTCPeerConnection.prototype = webkitRTCPeerConnection.prototype, webkitRTCPeerConnection.generateCertificate && Object.defineProperty(window.RTCPeerConnection, "generateCertificate", {
  672. get: function() {
  673. return webkitRTCPeerConnection.generateCertificate
  674. }
  675. }), ["createOffer", "createAnswer"].forEach(function(e) {
  676. var t = webkitRTCPeerConnection.prototype[e];
  677. webkitRTCPeerConnection.prototype[e] = function() {
  678. var e = this;
  679. if (arguments.length < 1 || 1 === arguments.length && "object" == typeof arguments[0]) {
  680. var n = 1 === arguments.length ? arguments[0] : void 0;
  681. return new Promise(function(r, i) {
  682. t.apply(e, [r, i, n])
  683. })
  684. }
  685. return t.apply(this, arguments)
  686. }
  687. }), i.version < 51 && ["setLocalDescription", "setRemoteDescription", "addIceCandidate"].forEach(function(e) {
  688. var t = webkitRTCPeerConnection.prototype[e];
  689. webkitRTCPeerConnection.prototype[e] = function() {
  690. var e = arguments,
  691. n = this,
  692. r = new Promise(function(r, i) {
  693. t.apply(n, [e[0], r, i])
  694. });
  695. return e.length < 2 ? r : r.then(function() {
  696. e[1].apply(null, [])
  697. }, function(t) {
  698. e.length >= 3 && e[2].apply(null, [t])
  699. })
  700. }
  701. });
  702. var e = RTCPeerConnection.prototype.addIceCandidate;
  703. RTCPeerConnection.prototype.addIceCandidate = function() {
  704. return null === arguments[0] ? Promise.resolve() : e.apply(this, arguments)
  705. }, ["setLocalDescription", "setRemoteDescription", "addIceCandidate"].forEach(function(e) {
  706. var t = webkitRTCPeerConnection.prototype[e];
  707. webkitRTCPeerConnection.prototype[e] = function() {
  708. return arguments[0] = new("addIceCandidate" === e ? RTCIceCandidate : RTCSessionDescription)(arguments[0]), t.apply(this, arguments)
  709. }
  710. })
  711. },
  712. attachMediaStream: function(e, t) {
  713. r("DEPRECATED, attachMediaStream will soon be removed."), i.version >= 43 ? e.srcObject = t : "undefined" != typeof e.src ? e.src = URL.createObjectURL(t) : r("Error attaching stream to element.")
  714. },
  715. reattachMediaStream: function(e, t) {
  716. r("DEPRECATED, reattachMediaStream will soon be removed."), i.version >= 43 ? e.srcObject = t.srcObject : e.src = t.src
  717. }
  718. };
  719. e.exports = {
  720. shimMediaStream: a.shimMediaStream,
  721. shimOnTrack: a.shimOnTrack,
  722. shimSourceObject: a.shimSourceObject,
  723. shimPeerConnection: a.shimPeerConnection,
  724. shimGetUserMedia: n(10),
  725. attachMediaStream: a.attachMediaStream,
  726. reattachMediaStream: a.reattachMediaStream
  727. }
  728. }, function(e, t, n) {
  729. "use strict";
  730. var r = n(1).log;
  731. e.exports = function() {
  732. var e = function(e) {
  733. if ("object" != typeof e || e.mandatory || e.optional) return e;
  734. var t = {};
  735. return Object.keys(e).forEach(function(n) {
  736. if ("require" !== n && "advanced" !== n && "mediaSource" !== n) {
  737. var r = "object" == typeof e[n] ? e[n] : {
  738. ideal: e[n]
  739. };
  740. void 0 !== r.exact && "number" == typeof r.exact && (r.min = r.max = r.exact);
  741. var i = function(e, t) {
  742. return e ? e + t.charAt(0).toUpperCase() + t.slice(1) : "deviceId" === t ? "sourceId" : t
  743. };
  744. if (void 0 !== r.ideal) {
  745. t.optional = t.optional || [];
  746. var a = {};
  747. "number" == typeof r.ideal ? (a[i("min", n)] = r.ideal, t.optional.push(a), a = {}, a[i("max", n)] = r.ideal, t.optional.push(a)) : (a[i("", n)] = r.ideal, t.optional.push(a))
  748. }
  749. void 0 !== r.exact && "number" != typeof r.exact ? (t.mandatory = t.mandatory || {}, t.mandatory[i("", n)] = r.exact) : ["min", "max"].forEach(function(e) {
  750. void 0 !== r[e] && (t.mandatory = t.mandatory || {}, t.mandatory[i(e, n)] = r[e])
  751. })
  752. }
  753. }), e.advanced && (t.optional = (t.optional || []).concat(e.advanced)), t
  754. },
  755. t = function(t, n) {
  756. if (t = JSON.parse(JSON.stringify(t)), t && t.audio && (t.audio = e(t.audio)), t && "object" == typeof t.video) {
  757. var i = t.video.facingMode;
  758. if (i = i && ("object" == typeof i ? i : {
  759. ideal: i
  760. }), i && ("user" === i.exact || "environment" === i.exact || "user" === i.ideal || "environment" === i.ideal) && (!navigator.mediaDevices.getSupportedConstraints || !navigator.mediaDevices.getSupportedConstraints().facingMode) && (delete t.video.facingMode, "environment" === i.exact || "environment" === i.ideal)) return navigator.mediaDevices.enumerateDevices().then(function(a) {
  761. a = a.filter(function(e) {
  762. return "videoinput" === e.kind
  763. });
  764. var o = a.find(function(e) {
  765. return e.label.toLowerCase().indexOf("back") !== -1
  766. }) || a.length && a[a.length - 1];
  767. return o && (t.video.deviceId = i.exact ? {
  768. exact: o.deviceId
  769. } : {
  770. ideal: o.deviceId
  771. }), t.video = e(t.video), r("chrome: " + JSON.stringify(t)), n(t)
  772. });
  773. t.video = e(t.video)
  774. }
  775. return r("chrome: " + JSON.stringify(t)), n(t)
  776. },
  777. n = function(e) {
  778. return {
  779. name: {
  780. PermissionDeniedError: "NotAllowedError",
  781. ConstraintNotSatisfiedError: "OverconstrainedError"
  782. } [e.name] || e.name,
  783. message: e.message,
  784. constraint: e.constraintName,
  785. toString: function() {
  786. return this.name + (this.message && ": ") + this.message
  787. }
  788. }
  789. },
  790. i = function(e, r, i) {
  791. t(e, function(e) {
  792. navigator.webkitGetUserMedia(e, r, function(e) {
  793. i(n(e))
  794. })
  795. })
  796. };
  797. navigator.getUserMedia = i;
  798. var a = function(e) {
  799. return new Promise(function(t, n) {
  800. navigator.getUserMedia(e, t, n)
  801. })
  802. };
  803. if (navigator.mediaDevices || (navigator.mediaDevices = {
  804. getUserMedia: a,
  805. enumerateDevices: function() {
  806. return new Promise(function(e) {
  807. var t = {
  808. audio: "audioinput",
  809. video: "videoinput"
  810. };
  811. return MediaStreamTrack.getSources(function(n) {
  812. e(n.map(function(e) {
  813. return {
  814. label: e.label,
  815. kind: t[e.kind],
  816. deviceId: e.id,
  817. groupId: ""
  818. }
  819. }))
  820. })
  821. })
  822. }
  823. }), navigator.mediaDevices.getUserMedia) {
  824. var o = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
  825. navigator.mediaDevices.getUserMedia = function(e) {
  826. return t(e, function(e) {
  827. return o(e).catch(function(e) {
  828. return Promise.reject(n(e))
  829. })
  830. })
  831. }
  832. } else navigator.mediaDevices.getUserMedia = function(e) {
  833. return a(e)
  834. };
  835. "undefined" == typeof navigator.mediaDevices.addEventListener && (navigator.mediaDevices.addEventListener = function() {
  836. r("Dummy mediaDevices.addEventListener called.")
  837. }), "undefined" == typeof navigator.mediaDevices.removeEventListener && (navigator.mediaDevices.removeEventListener = function() {
  838. r("Dummy mediaDevices.removeEventListener called.")
  839. })
  840. }
  841. }, function(e, t, n) {
  842. "use strict";
  843. var r = n(6),
  844. i = n(1).log,
  845. a = {
  846. shimPeerConnection: function() {
  847. window.RTCIceGatherer && (window.RTCIceCandidate || (window.RTCIceCandidate = function(e) {
  848. return e
  849. }), window.RTCSessionDescription || (window.RTCSessionDescription = function(e) {
  850. return e
  851. })), window.RTCPeerConnection = function(e) {
  852. var t = this,
  853. n = document.createDocumentFragment();
  854. if (["addEventListener", "removeEventListener", "dispatchEvent"].forEach(function(e) {
  855. t[e] = n[e].bind(n)
  856. }), this.onicecandidate = null, this.onaddstream = null, this.ontrack = null, this.onremovestream = null, this.onsignalingstatechange = null, this.oniceconnectionstatechange = null, this.onnegotiationneeded = null, this.ondatachannel = null, this.localStreams = [], this.remoteStreams = [], this.getLocalStreams = function() {
  857. return t.localStreams
  858. }, this.getRemoteStreams = function() {
  859. return t.remoteStreams
  860. }, this.localDescription = new RTCSessionDescription({
  861. type: "",
  862. sdp: ""
  863. }), this.remoteDescription = new RTCSessionDescription({
  864. type: "",
  865. sdp: ""
  866. }), this.signalingState = "stable", this.iceConnectionState = "new", this.iceGatheringState = "new", this.iceOptions = {
  867. gatherPolicy: "all",
  868. iceServers: []
  869. }, e && e.iceTransportPolicy) switch (e.iceTransportPolicy) {
  870. case "all":
  871. case "relay":
  872. this.iceOptions.gatherPolicy = e.iceTransportPolicy;
  873. break;
  874. case "none":
  875. throw new TypeError('iceTransportPolicy "none" not supported')
  876. }
  877. if (this.usingBundle = e && "max-bundle" === e.bundlePolicy, e && e.iceServers) {
  878. var r = JSON.parse(JSON.stringify(e.iceServers));
  879. this.iceOptions.iceServers = r.filter(function(e) {
  880. if (e && e.urls) {
  881. var t = e.urls;
  882. return "string" == typeof t && (t = [t]), t = t.filter(function(e) {
  883. return 0 === e.indexOf("turn:") && e.indexOf("transport=udp") !== -1
  884. })[0], !!t
  885. }
  886. return !1
  887. })
  888. }
  889. this.transceivers = [], this._localIceCandidatesBuffer = []
  890. }, window.RTCPeerConnection.prototype._emitBufferedCandidates = function() {
  891. var e = this,
  892. t = r.splitSections(e.localDescription.sdp);
  893. this._localIceCandidatesBuffer.forEach(function(n) {
  894. var r = !n.candidate || 0 === Object.keys(n.candidate).length;
  895. if (r)
  896. for (var i = 1; i < t.length; i++) t[i].indexOf("\r\na=end-of-candidates\r\n") === -1 && (t[i] += "a=end-of-candidates\r\n");
  897. else n.candidate.candidate.indexOf("typ endOfCandidates") === -1 && (t[n.candidate.sdpMLineIndex + 1] += "a=" + n.candidate.candidate + "\r\n");
  898. if (e.localDescription.sdp = t.join(""), e.dispatchEvent(n), null !== e.onicecandidate && e.onicecandidate(n), !n.candidate && "complete" !== e.iceGatheringState) {
  899. var a = e.transceivers.every(function(e) {
  900. return e.iceGatherer && "completed" === e.iceGatherer.state
  901. });
  902. a && (e.iceGatheringState = "complete")
  903. }
  904. }), this._localIceCandidatesBuffer = []
  905. }, window.RTCPeerConnection.prototype.addStream = function(e) {
  906. this.localStreams.push(e.clone()), this._maybeFireNegotiationNeeded()
  907. }, window.RTCPeerConnection.prototype.removeStream = function(e) {
  908. var t = this.localStreams.indexOf(e);
  909. t > -1 && (this.localStreams.splice(t, 1), this._maybeFireNegotiationNeeded())
  910. }, window.RTCPeerConnection.prototype.getSenders = function() {
  911. return this.transceivers.filter(function(e) {
  912. return !!e.rtpSender
  913. }).map(function(e) {
  914. return e.rtpSender
  915. })
  916. }, window.RTCPeerConnection.prototype.getReceivers = function() {
  917. return this.transceivers.filter(function(e) {
  918. return !!e.rtpReceiver
  919. }).map(function(e) {
  920. return e.rtpReceiver
  921. })
  922. }, window.RTCPeerConnection.prototype._getCommonCapabilities = function(e, t) {
  923. var n = {
  924. codecs: [],
  925. headerExtensions: [],
  926. fecMechanisms: []
  927. };
  928. return e.codecs.forEach(function(e) {
  929. for (var r = 0; r < t.codecs.length; r++) {
  930. var i = t.codecs[r];
  931. if (e.name.toLowerCase() === i.name.toLowerCase() && e.clockRate === i.clockRate && e.numChannels === i.numChannels) {
  932. n.codecs.push(i);
  933. break
  934. }
  935. }
  936. }), e.headerExtensions.forEach(function(e) {
  937. for (var r = 0; r < t.headerExtensions.length; r++) {
  938. var i = t.headerExtensions[r];
  939. if (e.uri === i.uri) {
  940. n.headerExtensions.push(i);
  941. break
  942. }
  943. }
  944. }), n
  945. }, window.RTCPeerConnection.prototype._createIceAndDtlsTransports = function(e, t) {
  946. var n = this,
  947. i = new RTCIceGatherer(n.iceOptions),
  948. a = new RTCIceTransport(i);
  949. i.onlocalcandidate = function(o) {
  950. var s = new Event("icecandidate");
  951. s.candidate = {
  952. sdpMid: e,
  953. sdpMLineIndex: t
  954. };
  955. var c = o.candidate,
  956. d = !c || 0 === Object.keys(c).length;
  957. d ? (void 0 === i.state && (i.state = "completed"), s.candidate.candidate = "candidate:1 1 udp 1 0.0.0.0 9 typ endOfCandidates") : (c.component = "RTCP" === a.component ? 2 : 1, s.candidate.candidate = r.writeCandidate(c));
  958. var u = r.splitSections(n.localDescription.sdp);
  959. s.candidate.candidate.indexOf("typ endOfCandidates") === -1 ? u[s.candidate.sdpMLineIndex + 1] += "a=" + s.candidate.candidate + "\r\n" : u[s.candidate.sdpMLineIndex + 1] += "a=end-of-candidates\r\n", n.localDescription.sdp = u.join("");
  960. var p = n.transceivers.every(function(e) {
  961. return e.iceGatherer && "completed" === e.iceGatherer.state
  962. });
  963. switch (n.iceGatheringState) {
  964. case "new":
  965. n._localIceCandidatesBuffer.push(s), d && p && n._localIceCandidatesBuffer.push(new Event("icecandidate"));
  966. break;
  967. case "gathering":
  968. n._emitBufferedCandidates(), n.dispatchEvent(s), null !== n.onicecandidate && n.onicecandidate(s), p && (n.dispatchEvent(new Event("icecandidate")), null !== n.onicecandidate && n.onicecandidate(new Event("icecandidate")), n.iceGatheringState = "complete");
  969. break;
  970. case "complete":
  971. }
  972. }, a.onicestatechange = function() {
  973. n._updateConnectionState()
  974. };
  975. var o = new RTCDtlsTransport(a);
  976. return o.ondtlsstatechange = function() {
  977. n._updateConnectionState()
  978. }, o.onerror = function() {
  979. o.state = "failed", n._updateConnectionState()
  980. }, {
  981. iceGatherer: i,
  982. iceTransport: a,
  983. dtlsTransport: o
  984. }
  985. }, window.RTCPeerConnection.prototype._transceive = function(e, t, n) {
  986. var i = this._getCommonCapabilities(e.localCapabilities, e.remoteCapabilities);
  987. t && e.rtpSender && (i.encodings = e.sendEncodingParameters, i.rtcp = {
  988. cname: r.localCName
  989. }, e.recvEncodingParameters.length && (i.rtcp.ssrc = e.recvEncodingParameters[0].ssrc), e.rtpSender.send(i)), n && e.rtpReceiver && (i.encodings = e.recvEncodingParameters, i.rtcp = {
  990. cname: e.cname
  991. }, e.sendEncodingParameters.length && (i.rtcp.ssrc = e.sendEncodingParameters[0].ssrc), e.rtpReceiver.receive(i))
  992. }, window.RTCPeerConnection.prototype.setLocalDescription = function(e) {
  993. var t, n, i = this;
  994. if ("offer" === e.type) this._pendingOffer && (t = r.splitSections(e.sdp), n = t.shift(), t.forEach(function(e, t) {
  995. var n = r.parseRtpParameters(e);
  996. i._pendingOffer[t].localCapabilities = n
  997. }), this.transceivers = this._pendingOffer, delete this._pendingOffer);
  998. else if ("answer" === e.type) {
  999. t = r.splitSections(i.remoteDescription.sdp), n = t.shift();
  1000. var a = r.matchPrefix(n, "a=ice-lite").length > 0;
  1001. t.forEach(function(e, t) {
  1002. var o = i.transceivers[t],
  1003. s = o.iceGatherer,
  1004. c = o.iceTransport,
  1005. d = o.dtlsTransport,
  1006. u = o.localCapabilities,
  1007. p = o.remoteCapabilities,
  1008. f = "0" === e.split("\n", 1)[0].split(" ", 2)[1];
  1009. if (!f) {
  1010. var l = r.getIceParameters(e, n);
  1011. if (a) {
  1012. var m = r.matchPrefix(e, "a=candidate:").map(function(e) {
  1013. return r.parseCandidate(e)
  1014. }).filter(function(e) {
  1015. return "1" === e.component
  1016. });
  1017. m.length && c.setRemoteCandidates(m)
  1018. }
  1019. var h = r.getDtlsParameters(e, n);
  1020. a && (h.role = "server"), i.usingBundle && 0 !== t || (c.start(s, l, a ? "controlling" : "controlled"), d.start(h));
  1021. var v = i._getCommonCapabilities(u, p);
  1022. i._transceive(o, v.codecs.length > 0, !1)
  1023. }
  1024. })
  1025. }
  1026. switch (this.localDescription = {
  1027. type: e.type,
  1028. sdp: e.sdp
  1029. }, e.type) {
  1030. case "offer":
  1031. this._updateSignalingState("have-local-offer");
  1032. break;
  1033. case "answer":
  1034. this._updateSignalingState("stable");
  1035. break;
  1036. default:
  1037. throw new TypeError('unsupported type "' + e.type + '"')
  1038. }
  1039. var o = arguments.length > 1 && "function" == typeof arguments[1];
  1040. if (o) {
  1041. var s = arguments[1];
  1042. window.setTimeout(function() {
  1043. s(), "new" === i.iceGatheringState && (i.iceGatheringState = "gathering"), i._emitBufferedCandidates()
  1044. }, 0)
  1045. }
  1046. var c = Promise.resolve();
  1047. return c.then(function() {
  1048. o || ("new" === i.iceGatheringState && (i.iceGatheringState = "gathering"), window.setTimeout(i._emitBufferedCandidates.bind(i), 500))
  1049. }), c
  1050. }, window.RTCPeerConnection.prototype.setRemoteDescription = function(e) {
  1051. var t = this,
  1052. n = new MediaStream,
  1053. i = [],
  1054. a = r.splitSections(e.sdp),
  1055. o = a.shift(),
  1056. s = r.matchPrefix(o, "a=ice-lite").length > 0;
  1057. switch (this.usingBundle = r.matchPrefix(o, "a=group:BUNDLE ").length > 0, a.forEach(function(a, c) {
  1058. var d, u, p, f, l, m, h, v, g, w, y, b, C = r.splitLines(a),
  1059. P = C[0].substr(2).split(" "),
  1060. S = P[0],
  1061. T = "0" === P[1],
  1062. E = r.getDirection(a, o),
  1063. R = r.parseRtpParameters(a);
  1064. T || (y = r.getIceParameters(a, o), b = r.getDtlsParameters(a, o), b.role = "client"), v = r.parseRtpEncodingParameters(a);
  1065. var x = r.matchPrefix(a, "a=mid:");
  1066. x = x.length ? x[0].substr(6) : r.generateIdentifier();
  1067. var k, O = r.matchPrefix(a, "a=ssrc:").map(function(e) {
  1068. return r.parseSsrcMedia(e)
  1069. }).filter(function(e) {
  1070. return "cname" === e.attribute
  1071. })[0];
  1072. O && (k = O.value);
  1073. var M = r.matchPrefix(a, "a=end-of-candidates").length > 0,
  1074. D = r.matchPrefix(a, "a=candidate:").map(function(e) {
  1075. return r.parseCandidate(e)
  1076. }).filter(function(e) {
  1077. return "1" === e.component
  1078. });
  1079. if ("offer" !== e.type || T) "answer" !== e.type || T || (d = t.transceivers[c], u = d.iceGatherer, p = d.iceTransport, f = d.dtlsTransport, l = d.rtpSender, m = d.rtpReceiver, h = d.sendEncodingParameters, g = d.localCapabilities, t.transceivers[c].recvEncodingParameters = v, t.transceivers[c].remoteCapabilities = R, t.transceivers[c].cname = k, (s || M) && D.length && p.setRemoteCandidates(D), t.usingBundle && 0 !== c || (p.start(u, y, "controlling"), f.start(b)), t._transceive(d, "sendrecv" === E || "recvonly" === E, "sendrecv" === E || "sendonly" === E), !m || "sendrecv" !== E && "sendonly" !== E ? delete d.rtpReceiver : (w = m.track, i.push([w, m]), n.addTrack(w)));
  1080. else {
  1081. var L = t.usingBundle && c > 0 ? {
  1082. iceGatherer: t.transceivers[0].iceGatherer,
  1083. iceTransport: t.transceivers[0].iceTransport,
  1084. dtlsTransport: t.transceivers[0].dtlsTransport
  1085. } : t._createIceAndDtlsTransports(x, c);
  1086. if (M && L.iceTransport.setRemoteCandidates(D), g = RTCRtpReceiver.getCapabilities(S), h = [{
  1087. ssrc: 1001 * (2 * c + 2)
  1088. }], m = new RTCRtpReceiver(L.dtlsTransport, S), w = m.track, i.push([w, m]), n.addTrack(w), t.localStreams.length > 0 && t.localStreams[0].getTracks().length >= c) {
  1089. var j = t.localStreams[0].getTracks()[c];
  1090. l = new RTCRtpSender(j, L.dtlsTransport)
  1091. }
  1092. t.transceivers[c] = {
  1093. iceGatherer: L.iceGatherer,
  1094. iceTransport: L.iceTransport,
  1095. dtlsTransport: L.dtlsTransport,
  1096. localCapabilities: g,
  1097. remoteCapabilities: R,
  1098. rtpSender: l,
  1099. rtpReceiver: m,
  1100. kind: S,
  1101. mid: x,
  1102. cname: k,
  1103. sendEncodingParameters: h,
  1104. recvEncodingParameters: v
  1105. }, t._transceive(t.transceivers[c], !1, "sendrecv" === E || "sendonly" === E)
  1106. }
  1107. }), this.remoteDescription = {
  1108. type: e.type,
  1109. sdp: e.sdp
  1110. }, e.type) {
  1111. case "offer":
  1112. this._updateSignalingState("have-remote-offer");
  1113. break;
  1114. case "answer":
  1115. this._updateSignalingState("stable");
  1116. break;
  1117. default:
  1118. throw new TypeError('unsupported type "' + e.type + '"')
  1119. }
  1120. return n.getTracks().length && (t.remoteStreams.push(n), window.setTimeout(function() {
  1121. var e = new Event("addstream");
  1122. e.stream = n, t.dispatchEvent(e), null !== t.onaddstream && window.setTimeout(function() {
  1123. t.onaddstream(e)
  1124. }, 0), i.forEach(function(r) {
  1125. var i = r[0],
  1126. a = r[1],
  1127. o = new Event("track");
  1128. o.track = i, o.receiver = a, o.streams = [n], t.dispatchEvent(e), null !== t.ontrack && window.setTimeout(function() {
  1129. t.ontrack(o)
  1130. }, 0)
  1131. })
  1132. }, 0)), arguments.length > 1 && "function" == typeof arguments[1] && window.setTimeout(arguments[1], 0), Promise.resolve()
  1133. }, window.RTCPeerConnection.prototype.close = function() {
  1134. this.transceivers.forEach(function(e) {
  1135. e.iceTransport && e.iceTransport.stop(), e.dtlsTransport && e.dtlsTransport.stop(), e.rtpSender && e.rtpSender.stop(), e.rtpReceiver && e.rtpReceiver.stop()
  1136. }), this._updateSignalingState("closed")
  1137. }, window.RTCPeerConnection.prototype._updateSignalingState = function(e) {
  1138. this.signalingState = e;
  1139. var t = new Event("signalingstatechange");
  1140. this.dispatchEvent(t), null !== this.onsignalingstatechange && this.onsignalingstatechange(t)
  1141. }, window.RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() {
  1142. var e = new Event("negotiationneeded");
  1143. this.dispatchEvent(e), null !== this.onnegotiationneeded && this.onnegotiationneeded(e)
  1144. }, window.RTCPeerConnection.prototype._updateConnectionState = function() {
  1145. var e, t = this,
  1146. n = {
  1147. new: 0,
  1148. closed: 0,
  1149. connecting: 0,
  1150. checking: 0,
  1151. connected: 0,
  1152. completed: 0,
  1153. failed: 0
  1154. };
  1155. if (this.transceivers.forEach(function(e) {
  1156. n[e.iceTransport.state]++, n[e.dtlsTransport.state]++
  1157. }), n.connected += n.completed, e = "new", n.failed > 0 ? e = "failed" : n.connecting > 0 || n.checking > 0 ? e = "connecting" : n.disconnected > 0 ? e = "disconnected" : n.new > 0 ? e = "new" : (n.connected > 0 || n.completed > 0) && (e = "connected"), e !== t.iceConnectionState) {
  1158. t.iceConnectionState = e;
  1159. var r = new Event("iceconnectionstatechange");
  1160. this.dispatchEvent(r), null !== this.oniceconnectionstatechange && this.oniceconnectionstatechange(r)
  1161. }
  1162. }, window.RTCPeerConnection.prototype.createOffer = function() {
  1163. var e = this;
  1164. if (this._pendingOffer) throw new Error("createOffer called while there is a pending offer.");
  1165. var t;
  1166. 1 === arguments.length && "function" != typeof arguments[0] ? t = arguments[0] : 3 === arguments.length && (t = arguments[2]);
  1167. var n = [],
  1168. i = 0,
  1169. a = 0;
  1170. if (this.localStreams.length && (i = this.localStreams[0].getAudioTracks().length, a = this.localStreams[0].getVideoTracks().length), t) {
  1171. if (t.mandatory || t.optional) throw new TypeError("Legacy mandatory/optional constraints not supported.");
  1172. void 0 !== t.offerToReceiveAudio && (i = t.offerToReceiveAudio), void 0 !== t.offerToReceiveVideo && (a = t.offerToReceiveVideo)
  1173. }
  1174. for (this.localStreams.length && this.localStreams[0].getTracks().forEach(function(e) {
  1175. n.push({
  1176. kind: e.kind,
  1177. track: e,
  1178. wantReceive: "audio" === e.kind ? i > 0 : a > 0
  1179. }), "audio" === e.kind ? i-- : "video" === e.kind && a--
  1180. }); i > 0 || a > 0;) i > 0 && (n.push({
  1181. kind: "audio",
  1182. wantReceive: !0
  1183. }), i--), a > 0 && (n.push({
  1184. kind: "video",
  1185. wantReceive: !0
  1186. }), a--);
  1187. var o = r.writeSessionBoilerplate(),
  1188. s = [];
  1189. n.forEach(function(t, n) {
  1190. var i, a, o = t.track,
  1191. c = t.kind,
  1192. d = r.generateIdentifier(),
  1193. u = e.usingBundle && n > 0 ? {
  1194. iceGatherer: s[0].iceGatherer,
  1195. iceTransport: s[0].iceTransport,
  1196. dtlsTransport: s[0].dtlsTransport
  1197. } : e._createIceAndDtlsTransports(d, n),
  1198. p = RTCRtpSender.getCapabilities(c),
  1199. f = [{
  1200. ssrc: 1001 * (2 * n + 1)
  1201. }];
  1202. o && (i = new RTCRtpSender(o, u.dtlsTransport)), t.wantReceive && (a = new RTCRtpReceiver(u.dtlsTransport, c)), s[n] = {
  1203. iceGatherer: u.iceGatherer,
  1204. iceTransport: u.iceTransport,
  1205. dtlsTransport: u.dtlsTransport,
  1206. localCapabilities: p,
  1207. remoteCapabilities: null,
  1208. rtpSender: i,
  1209. rtpReceiver: a,
  1210. kind: c,
  1211. mid: d,
  1212. sendEncodingParameters: f,
  1213. recvEncodingParameters: null
  1214. }
  1215. }), this.usingBundle && (o += "a=group:BUNDLE " + s.map(function(e) {
  1216. return e.mid
  1217. }).join(" ") + "\r\n"), n.forEach(function(t, n) {
  1218. var i = s[n];
  1219. o += r.writeMediaSection(i, i.localCapabilities, "offer", e.localStreams[0])
  1220. }), this._pendingOffer = s;
  1221. var c = new RTCSessionDescription({
  1222. type: "offer",
  1223. sdp: o
  1224. });
  1225. return arguments.length && "function" == typeof arguments[0] && window.setTimeout(arguments[0], 0, c), Promise.resolve(c)
  1226. }, window.RTCPeerConnection.prototype.createAnswer = function() {
  1227. var e = this,
  1228. t = r.writeSessionBoilerplate();
  1229. this.usingBundle && (t += "a=group:BUNDLE " + this.transceivers.map(function(e) {
  1230. return e.mid
  1231. }).join(" ") + "\r\n"), this.transceivers.forEach(function(n) {
  1232. var i = e._getCommonCapabilities(n.localCapabilities, n.remoteCapabilities);
  1233. t += r.writeMediaSection(n, i, "answer", e.localStreams[0])
  1234. });
  1235. var n = new RTCSessionDescription({
  1236. type: "answer",
  1237. sdp: t
  1238. });
  1239. return arguments.length && "function" == typeof arguments[0] && window.setTimeout(arguments[0], 0, n), Promise.resolve(n)
  1240. }, window.RTCPeerConnection.prototype.addIceCandidate = function(e) {
  1241. if (null === e) this.transceivers.forEach(function(e) {
  1242. e.iceTransport.addRemoteCandidate({})
  1243. });
  1244. else {
  1245. var t = e.sdpMLineIndex;
  1246. if (e.sdpMid)
  1247. for (var n = 0; n < this.transceivers.length; n++)
  1248. if (this.transceivers[n].mid === e.sdpMid) {
  1249. t = n;
  1250. break
  1251. }
  1252. var i = this.transceivers[t];
  1253. if (i) {
  1254. var a = Object.keys(e.candidate).length > 0 ? r.parseCandidate(e.candidate) : {};
  1255. if ("tcp" === a.protocol && 0 === a.port) return;
  1256. if ("1" !== a.component) return;
  1257. "endOfCandidates" === a.type && (a = {}), i.iceTransport.addRemoteCandidate(a);
  1258. var o = r.splitSections(this.remoteDescription.sdp);
  1259. o[t + 1] += (a.type ? e.candidate.trim() : "a=end-of-candidates") + "\r\n", this.remoteDescription.sdp = o.join("")
  1260. }
  1261. }
  1262. return arguments.length > 1 && "function" == typeof arguments[1] && window.setTimeout(arguments[1], 0), Promise.resolve()
  1263. }, window.RTCPeerConnection.prototype.getStats = function() {
  1264. var e = [];
  1265. this.transceivers.forEach(function(t) {
  1266. ["rtpSender", "rtpReceiver", "iceGatherer", "iceTransport", "dtlsTransport"].forEach(function(n) {
  1267. t[n] && e.push(t[n].getStats())
  1268. })
  1269. });
  1270. var t = arguments.length > 1 && "function" == typeof arguments[1] && arguments[1];
  1271. return new Promise(function(n) {
  1272. var r = new Map;
  1273. Promise.all(e).then(function(e) {
  1274. e.forEach(function(e) {
  1275. Object.keys(e).forEach(function(t) {
  1276. r.set(t, e[t]), r[t] = e[t]
  1277. })
  1278. }), t && window.setTimeout(t, 0, r), n(r)
  1279. })
  1280. })
  1281. }
  1282. },
  1283. attachMediaStream: function(e, t) {
  1284. i("DEPRECATED, attachMediaStream will soon be removed."), e.srcObject = t
  1285. },
  1286. reattachMediaStream: function(e, t) {
  1287. i("DEPRECATED, reattachMediaStream will soon be removed."), e.srcObject = t.srcObject
  1288. }
  1289. };
  1290. e.exports = {
  1291. shimPeerConnection: a.shimPeerConnection,
  1292. shimGetUserMedia: n(12),
  1293. attachMediaStream: a.attachMediaStream,
  1294. reattachMediaStream: a.reattachMediaStream
  1295. }
  1296. }, function(e, t) {
  1297. "use strict";
  1298. e.exports = function() {
  1299. var e = function(e) {
  1300. return {
  1301. name: {
  1302. PermissionDeniedError: "NotAllowedError"
  1303. } [e.name] || e.name,
  1304. message: e.message,
  1305. constraint: e.constraint,
  1306. toString: function() {
  1307. return this.name
  1308. }
  1309. }
  1310. },
  1311. t = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
  1312. navigator.mediaDevices.getUserMedia = function(n) {
  1313. return t(n).catch(function(t) {
  1314. return Promise.reject(e(t))
  1315. })
  1316. }
  1317. }
  1318. }, function(e, t, n) {
  1319. "use strict";
  1320. var r = n(1).log,
  1321. i = n(1).browserDetails,
  1322. a = {
  1323. shimOnTrack: function() {
  1324. "object" != typeof window || !window.RTCPeerConnection || "ontrack" in window.RTCPeerConnection.prototype || Object.defineProperty(window.RTCPeerConnection.prototype, "ontrack", {
  1325. get: function() {
  1326. return this._ontrack
  1327. },
  1328. set: function(e) {
  1329. this._ontrack && (this.removeEventListener("track", this._ontrack), this.removeEventListener("addstream", this._ontrackpoly)), this.addEventListener("track", this._ontrack = e), this.addEventListener("addstream", this._ontrackpoly = function(e) {
  1330. e.stream.getTracks().forEach(function(t) {
  1331. var n = new Event("track");
  1332. n.track = t, n.receiver = {
  1333. track: t
  1334. }, n.streams = [e.stream], this.dispatchEvent(n)
  1335. }.bind(this))
  1336. }.bind(this))
  1337. }
  1338. })
  1339. },
  1340. shimSourceObject: function() {
  1341. "object" == typeof window && (!window.HTMLMediaElement || "srcObject" in window.HTMLMediaElement.prototype || Object.defineProperty(window.HTMLMediaElement.prototype, "srcObject", {
  1342. get: function() {
  1343. return this.mozSrcObject
  1344. },
  1345. set: function(e) {
  1346. this.mozSrcObject = e
  1347. }
  1348. }))
  1349. },
  1350. shimPeerConnection: function() {
  1351. if ("object" == typeof window && (window.RTCPeerConnection || window.mozRTCPeerConnection)) {
  1352. window.RTCPeerConnection || (window.RTCPeerConnection = function(e, t) {
  1353. if (i.version < 38 && e && e.iceServers) {
  1354. for (var n = [], r = 0; r < e.iceServers.length; r++) {
  1355. var a = e.iceServers[r];
  1356. if (a.hasOwnProperty("urls"))
  1357. for (var o = 0; o < a.urls.length; o++) {
  1358. var s = {
  1359. url: a.urls[o]
  1360. };
  1361. 0 === a.urls[o].indexOf("turn") && (s.username = a.username, s.credential = a.credential), n.push(s)
  1362. } else n.push(e.iceServers[r])
  1363. }
  1364. e.iceServers = n
  1365. }
  1366. return new mozRTCPeerConnection(e, t)
  1367. }, window.RTCPeerConnection.prototype = mozRTCPeerConnection.prototype, mozRTCPeerConnection.generateCertificate && Object.defineProperty(window.RTCPeerConnection, "generateCertificate", {
  1368. get: function() {
  1369. return mozRTCPeerConnection.generateCertificate
  1370. }
  1371. }), window.RTCSessionDescription = mozRTCSessionDescription, window.RTCIceCandidate = mozRTCIceCandidate), ["setLocalDescription", "setRemoteDescription", "addIceCandidate"].forEach(function(e) {
  1372. var t = RTCPeerConnection.prototype[e];
  1373. RTCPeerConnection.prototype[e] = function() {
  1374. return arguments[0] = new("addIceCandidate" === e ? RTCIceCandidate : RTCSessionDescription)(arguments[0]), t.apply(this, arguments)
  1375. }
  1376. });
  1377. var e = RTCPeerConnection.prototype.addIceCandidate;
  1378. RTCPeerConnection.prototype.addIceCandidate = function() {
  1379. return null === arguments[0] ? Promise.resolve() : e.apply(this, arguments)
  1380. };
  1381. var t = function(e) {
  1382. var t = new Map;
  1383. return Object.keys(e).forEach(function(n) {
  1384. t.set(n, e[n]), t[n] = e[n]
  1385. }), t
  1386. },
  1387. n = RTCPeerConnection.prototype.getStats;
  1388. RTCPeerConnection.prototype.getStats = function(e, r, i) {
  1389. return n.apply(this, [e || null]).then(function(e) {
  1390. return t(e)
  1391. }).then(r, i)
  1392. }
  1393. }
  1394. },
  1395. attachMediaStream: function(e, t) {
  1396. r("DEPRECATED, attachMediaStream will soon be removed."), e.srcObject = t
  1397. },
  1398. reattachMediaStream: function(e, t) {
  1399. r("DEPRECATED, reattachMediaStream will soon be removed."), e.srcObject = t.srcObject
  1400. }
  1401. };
  1402. e.exports = {
  1403. shimOnTrack: a.shimOnTrack,
  1404. shimSourceObject: a.shimSourceObject,
  1405. shimPeerConnection: a.shimPeerConnection,
  1406. shimGetUserMedia: n(14),
  1407. attachMediaStream: a.attachMediaStream,
  1408. reattachMediaStream: a.reattachMediaStream
  1409. }
  1410. }, function(e, t, n) {
  1411. "use strict";
  1412. var r = n(1).log,
  1413. i = n(1).browserDetails;
  1414. e.exports = function() {
  1415. var e = function(e) {
  1416. return {
  1417. name: {
  1418. SecurityError: "NotAllowedError",
  1419. PermissionDeniedError: "NotAllowedError"
  1420. } [e.name] || e.name,
  1421. message: {
  1422. "The operation is insecure.": "The request is not allowed by the user agent or the platform in the current context."
  1423. } [e.message] || e.message,
  1424. constraint: e.constraint,
  1425. toString: function() {
  1426. return this.name + (this.message && ": ") + this.message
  1427. }
  1428. }
  1429. },
  1430. t = function(t, n, a) {
  1431. var o = function(e) {
  1432. if ("object" != typeof e || e.require) return e;
  1433. var t = [];
  1434. return Object.keys(e).forEach(function(n) {
  1435. if ("require" !== n && "advanced" !== n && "mediaSource" !== n) {
  1436. var r = e[n] = "object" == typeof e[n] ? e[n] : {
  1437. ideal: e[n]
  1438. };
  1439. if (void 0 === r.min && void 0 === r.max && void 0 === r.exact || t.push(n), void 0 !== r.exact && ("number" == typeof r.exact ? r.min = r.max = r.exact : e[n] = r.exact, delete r.exact), void 0 !== r.ideal) {
  1440. e.advanced = e.advanced || [];
  1441. var i = {};
  1442. "number" == typeof r.ideal ? i[n] = {
  1443. min: r.ideal,
  1444. max: r.ideal
  1445. } : i[n] = r.ideal, e.advanced.push(i), delete r.ideal, Object.keys(r).length || delete e[n]
  1446. }
  1447. }
  1448. }), t.length && (e.require = t), e
  1449. };
  1450. return t = JSON.parse(JSON.stringify(t)), i.version < 38 && (r("spec: " + JSON.stringify(t)), t.audio && (t.audio = o(t.audio)), t.video && (t.video = o(t.video)), r("ff37: " + JSON.stringify(t))), navigator.mozGetUserMedia(t, n, function(t) {
  1451. a(e(t))
  1452. })
  1453. },
  1454. n = function(e) {
  1455. return new Promise(function(n, r) {
  1456. t(e, n, r)
  1457. })
  1458. };
  1459. if (navigator.mediaDevices || (navigator.mediaDevices = {
  1460. getUserMedia: n,
  1461. addEventListener: function() {},
  1462. removeEventListener: function() {}
  1463. }), navigator.mediaDevices.enumerateDevices = navigator.mediaDevices.enumerateDevices || function() {
  1464. return new Promise(function(e) {
  1465. var t = [{
  1466. kind: "audioinput",
  1467. deviceId: "default",
  1468. label: "",
  1469. groupId: ""
  1470. }, {
  1471. kind: "videoinput",
  1472. deviceId: "default",
  1473. label: "",
  1474. groupId: ""
  1475. }];
  1476. e(t)
  1477. })
  1478. }, i.version < 41) {
  1479. var a = navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices);
  1480. navigator.mediaDevices.enumerateDevices = function() {
  1481. return a().then(void 0, function(e) {
  1482. if ("NotFoundError" === e.name) return [];
  1483. throw e
  1484. })
  1485. }
  1486. }
  1487. if (i.version < 49) {
  1488. var o = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
  1489. navigator.mediaDevices.getUserMedia = function(t) {
  1490. return o(t).catch(function(t) {
  1491. return Promise.reject(e(t))
  1492. })
  1493. }
  1494. }
  1495. navigator.getUserMedia = function(e, n, r) {
  1496. return i.version < 44 ? t(e, n, r) : (console.warn("navigator.getUserMedia has been replaced by navigator.mediaDevices.getUserMedia"), void navigator.mediaDevices.getUserMedia(e).then(n, r))
  1497. }
  1498. }
  1499. }, function(e, t) {
  1500. "use strict";
  1501. var n = {
  1502. shimGetUserMedia: function() {
  1503. navigator.getUserMedia = navigator.webkitGetUserMedia
  1504. }
  1505. };
  1506. e.exports = {
  1507. shimGetUserMedia: n.shimGetUserMedia
  1508. }
  1509. }, function(e, t, n) {
  1510. var r;
  1511. (function() {
  1512. "use strict";
  1513.  
  1514. function t() {}
  1515.  
  1516. function i(e, t) {
  1517. for (var n = e.length; n--;)
  1518. if (e[n].listener === t) return n;
  1519. return -1
  1520. }
  1521.  
  1522. function a(e) {
  1523. return function() {
  1524. return this[e].apply(this, arguments)
  1525. }
  1526. }
  1527. var o = t.prototype,
  1528. s = this,
  1529. c = s.EventEmitter;
  1530. o.getListeners = function(e) {
  1531. var t, n, r = this._getEvents();
  1532. if (e instanceof RegExp) {
  1533. t = {};
  1534. for (n in r) r.hasOwnProperty(n) && e.test(n) && (t[n] = r[n])
  1535. } else t = r[e] || (r[e] = []);
  1536. return t
  1537. }, o.flattenListeners = function(e) {
  1538. var t, n = [];
  1539. for (t = 0; t < e.length; t += 1) n.push(e[t].listener);
  1540. return n
  1541. }, o.getListenersAsObject = function(e) {
  1542. var t, n = this.getListeners(e);
  1543. return n instanceof Array && (t = {}, t[e] = n), t || n
  1544. }, o.addListener = function(e, t) {
  1545. var n, r = this.getListenersAsObject(e),
  1546. a = "object" == typeof t;
  1547. for (n in r) r.hasOwnProperty(n) && i(r[n], t) === -1 && r[n].push(a ? t : {
  1548. listener: t,
  1549. once: !1
  1550. });
  1551. return this
  1552. }, o.on = a("addListener"), o.addOnceListener = function(e, t) {
  1553. return this.addListener(e, {
  1554. listener: t,
  1555. once: !0
  1556. })
  1557. }, o.once = a("addOnceListener"), o.defineEvent = function(e) {
  1558. return this.getListeners(e), this
  1559. }, o.defineEvents = function(e) {
  1560. for (var t = 0; t < e.length; t += 1) this.defineEvent(e[t]);
  1561. return this
  1562. }, o.removeListener = function(e, t) {
  1563. var n, r, a = this.getListenersAsObject(e);
  1564. for (r in a) a.hasOwnProperty(r) && (n = i(a[r], t), n !== -1 && a[r].splice(n, 1));
  1565. return this
  1566. }, o.off = a("removeListener"), o.addListeners = function(e, t) {
  1567. return this.manipulateListeners(!1, e, t)
  1568. }, o.removeListeners = function(e, t) {
  1569. return this.manipulateListeners(!0, e, t)
  1570. }, o.manipulateListeners = function(e, t, n) {
  1571. var r, i, a = e ? this.removeListener : this.addListener,
  1572. o = e ? this.removeListeners : this.addListeners;
  1573. if ("object" != typeof t || t instanceof RegExp)
  1574. for (r = n.length; r--;) a.call(this, t, n[r]);
  1575. else
  1576. for (r in t) t.hasOwnProperty(r) && (i = t[r]) && ("function" == typeof i ? a.call(this, r, i) : o.call(this, r, i));
  1577. return this
  1578. }, o.removeEvent = function(e) {
  1579. var t, n = typeof e,
  1580. r = this._getEvents();
  1581. if ("string" === n) delete r[e];
  1582. else if (e instanceof RegExp)
  1583. for (t in r) r.hasOwnProperty(t) && e.test(t) && delete r[t];
  1584. else delete this._events;
  1585. return this
  1586. }, o.removeAllListeners = a("removeEvent"), o.emitEvent = function(e, t) {
  1587. var n, r, i, a, o, s = this.getListenersAsObject(e);
  1588. for (a in s)
  1589. if (s.hasOwnProperty(a))
  1590. for (n = s[a].slice(0), i = n.length; i--;) r = n[i], r.once === !0 && this.removeListener(e, r.listener), o = r.listener.apply(this, t || []), o === this._getOnceReturnValue() && this.removeListener(e, r.listener);
  1591. return this
  1592. }, o.trigger = a("emitEvent"), o.emit = function(e) {
  1593. var t = Array.prototype.slice.call(arguments, 1);
  1594. return this.emitEvent(e, t)
  1595. }, o.setOnceReturnValue = function(e) {
  1596. return this._onceReturnValue = e, this
  1597. }, o._getOnceReturnValue = function() {
  1598. return !this.hasOwnProperty("_onceReturnValue") || this._onceReturnValue
  1599. }, o._getEvents = function() {
  1600. return this._events || (this._events = {})
  1601. }, t.noConflict = function() {
  1602. return s.EventEmitter = c, t
  1603. }, r = function() {
  1604. return t
  1605. }.call(s, n, s, e), !(void 0 !== r && (e.exports = r))
  1606. }).call(this)
  1607. }])
  1608. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement