@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/dist/common/browser-detection.js.map +1 -1
  2. package/dist/common/collection.js.map +1 -1
  3. package/dist/common/config.js.map +1 -1
  4. package/dist/common/errors/captcha-error.js +7 -0
  5. package/dist/common/errors/captcha-error.js.map +1 -1
  6. package/dist/common/errors/intent-to-join.js +8 -0
  7. package/dist/common/errors/intent-to-join.js.map +1 -1
  8. package/dist/common/errors/join-meeting.js +8 -0
  9. package/dist/common/errors/join-meeting.js.map +1 -1
  10. package/dist/common/errors/media.js +7 -0
  11. package/dist/common/errors/media.js.map +1 -1
  12. package/dist/common/errors/parameter.js.map +1 -1
  13. package/dist/common/errors/password-error.js +7 -0
  14. package/dist/common/errors/password-error.js.map +1 -1
  15. package/dist/common/errors/permission.js +7 -0
  16. package/dist/common/errors/permission.js.map +1 -1
  17. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  18. package/dist/common/errors/reconnection.js +7 -0
  19. package/dist/common/errors/reconnection.js.map +1 -1
  20. package/dist/common/errors/stats.js +7 -0
  21. package/dist/common/errors/stats.js.map +1 -1
  22. package/dist/common/errors/webex-errors.js +5 -29
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/errors/webex-meetings-error.js +5 -2
  25. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  26. package/dist/common/events/events-scope.js.map +1 -1
  27. package/dist/common/events/events.js.map +1 -1
  28. package/dist/common/events/trigger-proxy.js.map +1 -1
  29. package/dist/common/events/util.js.map +1 -1
  30. package/dist/common/logs/logger-config.js.map +1 -1
  31. package/dist/common/logs/logger-proxy.js.map +1 -1
  32. package/dist/common/logs/request.js +3 -0
  33. package/dist/common/logs/request.js.map +1 -1
  34. package/dist/common/queue.js.map +1 -1
  35. package/dist/config.js +1 -0
  36. package/dist/config.js.map +1 -1
  37. package/dist/constants.js +15 -74
  38. package/dist/constants.js.map +1 -1
  39. package/dist/locus-info/controlsUtils.js.map +1 -1
  40. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  41. package/dist/locus-info/fullState.js.map +1 -1
  42. package/dist/locus-info/hostUtils.js.map +1 -1
  43. package/dist/locus-info/index.js +43 -5
  44. package/dist/locus-info/index.js.map +1 -1
  45. package/dist/locus-info/infoUtils.js +4 -0
  46. package/dist/locus-info/infoUtils.js.map +1 -1
  47. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  48. package/dist/locus-info/parser.js +12 -3
  49. package/dist/locus-info/parser.js.map +1 -1
  50. package/dist/locus-info/selfUtils.js.map +1 -1
  51. package/dist/media/index.js +71 -210
  52. package/dist/media/index.js.map +1 -1
  53. package/dist/media/internal-media-core-wrapper.js +22 -0
  54. package/dist/media/internal-media-core-wrapper.js.map +1 -0
  55. package/dist/media/properties.js +32 -25
  56. package/dist/media/properties.js.map +1 -1
  57. package/dist/media/util.js +0 -27
  58. package/dist/media/util.js.map +1 -1
  59. package/dist/mediaQualityMetrics/config.js.map +1 -1
  60. package/dist/meeting/effectsState.js +8 -1
  61. package/dist/meeting/effectsState.js.map +1 -1
  62. package/dist/meeting/index.js +1146 -602
  63. package/dist/meeting/index.js.map +1 -1
  64. package/dist/meeting/muteState.js +6 -0
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +83 -24
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/state.js.map +1 -1
  69. package/dist/meeting/util.js +5 -44
  70. package/dist/meeting/util.js.map +1 -1
  71. package/dist/meeting-info/collection.js +4 -1
  72. package/dist/meeting-info/collection.js.map +1 -1
  73. package/dist/meeting-info/index.js +5 -0
  74. package/dist/meeting-info/index.js.map +1 -1
  75. package/dist/meeting-info/meeting-info-v2.js +14 -2
  76. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  77. package/dist/meeting-info/request.js +3 -0
  78. package/dist/meeting-info/request.js.map +1 -1
  79. package/dist/meeting-info/util.js.map +1 -1
  80. package/dist/meeting-info/utilv2.js.map +1 -1
  81. package/dist/meetings/collection.js +4 -1
  82. package/dist/meetings/collection.js.map +1 -1
  83. package/dist/meetings/index.js +136 -25
  84. package/dist/meetings/index.js.map +1 -1
  85. package/dist/meetings/request.js +4 -0
  86. package/dist/meetings/request.js.map +1 -1
  87. package/dist/meetings/util.js +24 -1
  88. package/dist/meetings/util.js.map +1 -1
  89. package/dist/member/index.js +30 -7
  90. package/dist/member/index.js.map +1 -1
  91. package/dist/member/util.js +2 -1
  92. package/dist/member/util.js.map +1 -1
  93. package/dist/members/collection.js +1 -0
  94. package/dist/members/collection.js.map +1 -1
  95. package/dist/members/index.js +82 -1
  96. package/dist/members/index.js.map +1 -1
  97. package/dist/members/request.js +19 -9
  98. package/dist/members/request.js.map +1 -1
  99. package/dist/members/util.js.map +1 -1
  100. package/dist/metrics/config.js.map +1 -1
  101. package/dist/metrics/constants.js.map +1 -1
  102. package/dist/metrics/index.js +8 -0
  103. package/dist/metrics/index.js.map +1 -1
  104. package/dist/multistream/mediaRequestManager.js +133 -0
  105. package/dist/multistream/mediaRequestManager.js.map +1 -0
  106. package/dist/multistream/multistreamMedia.js +116 -0
  107. package/dist/multistream/multistreamMedia.js.map +1 -0
  108. package/dist/multistream/receiveSlot.js +209 -0
  109. package/dist/multistream/receiveSlot.js.map +1 -0
  110. package/dist/multistream/receiveSlotManager.js +195 -0
  111. package/dist/multistream/receiveSlotManager.js.map +1 -0
  112. package/dist/multistream/remoteMedia.js +289 -0
  113. package/dist/multistream/remoteMedia.js.map +1 -0
  114. package/dist/multistream/remoteMediaGroup.js +243 -0
  115. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  116. package/dist/multistream/remoteMediaManager.js +1113 -0
  117. package/dist/multistream/remoteMediaManager.js.map +1 -0
  118. package/dist/networkQualityMonitor/index.js +10 -2
  119. package/dist/networkQualityMonitor/index.js.map +1 -1
  120. package/dist/personal-meeting-room/index.js +11 -0
  121. package/dist/personal-meeting-room/index.js.map +1 -1
  122. package/dist/personal-meeting-room/request.js +2 -1
  123. package/dist/personal-meeting-room/request.js.map +1 -1
  124. package/dist/personal-meeting-room/util.js.map +1 -1
  125. package/dist/reachability/index.js +17 -7
  126. package/dist/reachability/index.js.map +1 -1
  127. package/dist/reachability/request.js +1 -0
  128. package/dist/reachability/request.js.map +1 -1
  129. package/dist/reactions/reactions.js +111 -0
  130. package/dist/reactions/reactions.js.map +1 -0
  131. package/dist/reactions/reactions.type.js +40 -0
  132. package/dist/reactions/reactions.type.js.map +1 -0
  133. package/dist/reconnection-manager/index.js +130 -132
  134. package/dist/reconnection-manager/index.js.map +1 -1
  135. package/dist/roap/index.js +58 -231
  136. package/dist/roap/index.js.map +1 -1
  137. package/dist/roap/request.js +7 -116
  138. package/dist/roap/request.js.map +1 -1
  139. package/dist/roap/turnDiscovery.js +20 -6
  140. package/dist/roap/turnDiscovery.js.map +1 -1
  141. package/dist/statsAnalyzer/global.js +2 -0
  142. package/dist/statsAnalyzer/global.js.map +1 -1
  143. package/dist/statsAnalyzer/index.js +58 -37
  144. package/dist/statsAnalyzer/index.js.map +1 -1
  145. package/dist/statsAnalyzer/mqaUtil.js +9 -3
  146. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  147. package/dist/transcription/index.js +10 -3
  148. package/dist/transcription/index.js.map +1 -1
  149. package/package.json +21 -20
  150. package/src/common/{browser-detection.js → browser-detection.ts} +1 -1
  151. package/src/common/collection.ts +6 -6
  152. package/src/common/{config.js → config.ts} +1 -1
  153. package/src/common/errors/{captcha-error.js → captcha-error.ts} +5 -1
  154. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +6 -1
  155. package/src/common/errors/{join-meeting.js → join-meeting.ts} +6 -1
  156. package/src/common/errors/{media.js → media.ts} +5 -1
  157. package/src/common/errors/parameter.ts +3 -2
  158. package/src/common/errors/{password-error.js → password-error.ts} +5 -1
  159. package/src/common/errors/{permission.js → permission.ts} +5 -1
  160. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  161. package/src/common/errors/{reconnection.js → reconnection.ts} +5 -1
  162. package/src/common/errors/{stats.js → stats.ts} +5 -1
  163. package/src/common/errors/{webex-errors.js → webex-errors.ts} +1 -20
  164. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +3 -1
  165. package/src/common/events/{events-scope.js → events-scope.ts} +1 -1
  166. package/src/common/events/{events.js → events.ts} +0 -0
  167. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +1 -2
  168. package/src/common/events/{util.js → util.ts} +1 -1
  169. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  170. package/src/common/logs/{logger-proxy.js → logger-proxy.ts} +1 -1
  171. package/src/common/logs/{request.js → request.ts} +12 -2
  172. package/src/common/queue.ts +1 -2
  173. package/src/{config.js → config.ts} +2 -0
  174. package/src/constants.ts +139 -179
  175. package/src/locus-info/{controlsUtils.js → controlsUtils.ts} +4 -4
  176. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  177. package/src/locus-info/{fullState.js → fullState.ts} +1 -1
  178. package/src/locus-info/{hostUtils.js → hostUtils.ts} +5 -5
  179. package/src/locus-info/{index.js → index.ts} +67 -32
  180. package/src/locus-info/{infoUtils.js → infoUtils.ts} +7 -4
  181. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +13 -13
  182. package/src/locus-info/{parser.js → parser.ts} +22 -12
  183. package/src/locus-info/{selfUtils.js → selfUtils.ts} +17 -19
  184. package/src/media/{index.js → index.ts} +130 -205
  185. package/src/media/internal-media-core-wrapper.ts +9 -0
  186. package/src/media/{properties.js → properties.ts} +35 -29
  187. package/src/media/util.ts +16 -0
  188. package/src/mediaQualityMetrics/{config.js → config.ts} +1 -1
  189. package/src/meeting/{effectsState.js → effectsState.ts} +12 -6
  190. package/src/meeting/{index.js → index.ts} +993 -474
  191. package/src/meeting/{muteState.js → muteState.ts} +16 -11
  192. package/src/meeting/{request.js → request.ts} +148 -36
  193. package/src/meeting/{state.js → state.ts} +6 -6
  194. package/src/meeting/{util.js → util.ts} +9 -51
  195. package/src/meeting-info/{collection.js → collection.ts} +4 -1
  196. package/src/meeting-info/{index.js → index.ts} +10 -6
  197. package/src/meeting-info/{meeting-info-v2.js → meeting-info-v2.ts} +28 -10
  198. package/src/meeting-info/{request.js → request.ts} +6 -2
  199. package/src/meeting-info/{util.js → util.ts} +6 -5
  200. package/src/meeting-info/{utilv2.js → utilv2.ts} +8 -7
  201. package/src/meetings/{collection.js → collection.ts} +5 -2
  202. package/src/meetings/{index.js → index.ts} +118 -22
  203. package/src/meetings/{request.js → request.ts} +6 -1
  204. package/src/meetings/{util.js → util.ts} +28 -5
  205. package/src/member/{index.js → index.ts} +46 -15
  206. package/src/member/{util.js → util.ts} +17 -16
  207. package/src/members/{collection.js → collection.ts} +2 -1
  208. package/src/members/{index.js → index.ts} +94 -26
  209. package/src/members/{request.js → request.ts} +16 -5
  210. package/src/members/{util.js → util.ts} +7 -7
  211. package/src/metrics/{config.js → config.ts} +0 -2
  212. package/src/metrics/{constants.js → constants.ts} +0 -0
  213. package/src/metrics/{index.js → index.ts} +27 -8
  214. package/src/multistream/mediaRequestManager.ts +166 -0
  215. package/src/multistream/multistreamMedia.ts +92 -0
  216. package/src/multistream/receiveSlot.ts +141 -0
  217. package/src/multistream/receiveSlotManager.ts +142 -0
  218. package/src/multistream/remoteMedia.ts +228 -0
  219. package/src/multistream/remoteMediaGroup.ts +224 -0
  220. package/src/multistream/remoteMediaManager.ts +911 -0
  221. package/src/networkQualityMonitor/{index.js → index.ts} +18 -3
  222. package/src/personal-meeting-room/{index.js → index.ts} +17 -4
  223. package/src/personal-meeting-room/{request.js → request.ts} +3 -1
  224. package/src/personal-meeting-room/{util.js → util.ts} +1 -1
  225. package/src/reachability/{index.js → index.ts} +28 -17
  226. package/src/reachability/request.ts +4 -2
  227. package/src/reactions/reactions.ts +104 -0
  228. package/src/reactions/reactions.type.ts +36 -0
  229. package/src/reconnection-manager/{index.js → index.ts} +81 -65
  230. package/src/roap/index.ts +229 -0
  231. package/src/roap/{request.js → request.ts} +15 -74
  232. package/src/roap/turnDiscovery.ts +26 -11
  233. package/src/statsAnalyzer/{global.js → global.ts} +2 -0
  234. package/src/statsAnalyzer/{index.js → index.ts} +66 -61
  235. package/src/statsAnalyzer/{mqaUtil.js → mqaUtil.ts} +6 -1
  236. package/src/transcription/{index.js → index.ts} +16 -11
  237. package/test/integration/spec/journey.js +1 -1
  238. package/test/integration/spec/space-meeting.js +1 -2
  239. package/test/unit/spec/locus-info/infoUtils.js +17 -1
  240. package/test/unit/spec/media/index.ts +207 -0
  241. package/test/unit/spec/media/properties.ts +73 -82
  242. package/test/unit/spec/meeting/effectsState.js +1 -3
  243. package/test/unit/spec/meeting/index.js +672 -245
  244. package/test/unit/spec/meeting/muteState.js +7 -0
  245. package/test/unit/spec/meeting/request.js +25 -1
  246. package/test/unit/spec/meeting/utils.js +63 -2
  247. package/test/unit/spec/meetings/index.js +0 -4
  248. package/test/unit/spec/members/index.js +164 -2
  249. package/test/unit/spec/multistream/mediaRequestManager.ts +515 -0
  250. package/test/unit/spec/multistream/receiveSlot.ts +104 -0
  251. package/test/unit/spec/multistream/receiveSlotManager.ts +173 -0
  252. package/test/unit/spec/multistream/remoteMedia.ts +225 -0
  253. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  254. package/test/unit/spec/multistream/remoteMediaManager.ts +1309 -0
  255. package/test/unit/spec/reconnection-manager/index.js +68 -2
  256. package/test/unit/spec/roap/index.ts +63 -35
  257. package/test/unit/spec/stats-analyzer/index.js +19 -22
  258. package/dist/peer-connection-manager/index.js +0 -794
  259. package/dist/peer-connection-manager/index.js.map +0 -1
  260. package/dist/peer-connection-manager/util.js +0 -124
  261. package/dist/peer-connection-manager/util.js.map +0 -1
  262. package/dist/roap/collection.js +0 -73
  263. package/dist/roap/collection.js.map +0 -1
  264. package/dist/roap/handler.js +0 -337
  265. package/dist/roap/handler.js.map +0 -1
  266. package/dist/roap/state.js +0 -164
  267. package/dist/roap/state.js.map +0 -1
  268. package/dist/roap/util.js +0 -102
  269. package/dist/roap/util.js.map +0 -1
  270. package/src/media/util.js +0 -38
  271. package/src/peer-connection-manager/index.js +0 -723
  272. package/src/peer-connection-manager/util.ts +0 -117
  273. package/src/roap/collection.js +0 -63
  274. package/src/roap/handler.js +0 -252
  275. package/src/roap/index.js +0 -380
  276. package/src/roap/state.js +0 -149
  277. package/src/roap/util.js +0 -93
  278. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  279. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  280. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  281. package/test/unit/spec/roap/util.js +0 -30
@@ -22,24 +22,24 @@ exports.default = void 0;
22
22
 
23
23
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
24
24
 
25
- var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
26
-
27
25
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
28
26
 
27
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
28
+
29
29
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
30
30
 
31
31
  var _constants = require("../constants");
32
32
 
33
33
  var _config = _interopRequireDefault(require("../config"));
34
34
 
35
- var _peerConnectionManager = _interopRequireDefault(require("../peer-connection-manager"));
36
-
37
- var _reconnection = _interopRequireDefault(require("../common/errors/reconnection"));
35
+ var _config2 = _interopRequireDefault(require("../common/config"));
38
36
 
39
37
  var _media = _interopRequireDefault(require("../common/errors/media"));
40
38
 
41
39
  var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
42
40
 
41
+ var _internalMediaCoreWrapper = require("./internal-media-core-wrapper");
42
+
43
43
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
44
44
 
45
45
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -93,32 +93,6 @@ Media.setLocalTrack = function (enabled, track) {
93
93
 
94
94
  return false;
95
95
  };
96
- /**
97
- * @param {RTCPeerConnection} peerConnection
98
- * @param {Object} meetingProperties
99
- * @param {string} meetingProperties.meetingId
100
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
101
- * @returns {Promise}
102
- */
103
-
104
-
105
- Media.reconnectMedia = function (peerConnection, _ref) {
106
- var meetingId = _ref.meetingId,
107
- remoteQualityLevel = _ref.remoteQualityLevel,
108
- enableRtx = _ref.enableRtx,
109
- enableExtmap = _ref.enableExtmap;
110
-
111
- if (peerConnection.connectionState === _constants.PEER_CONNECTION_STATE.CLOSED || peerConnection.connectionState === _constants.PEER_CONNECTION_STATE.FAILED) {
112
- return _promise.default.reject(new _reconnection.default('Reinitiate peerconnection'));
113
- }
114
-
115
- return _peerConnectionManager.default.createOffer(peerConnection, {
116
- meetingId: meetingId,
117
- remoteQualityLevel: remoteQualityLevel,
118
- enableRtx: enableRtx,
119
- enableExtmap: enableExtmap
120
- });
121
- };
122
96
  /**
123
97
  * format the media array for send
124
98
  * @param {String} mediaId
@@ -171,195 +145,82 @@ Media.getLocalMedia = function (options, config) {
171
145
  return _promise.default.resolve(undefined);
172
146
  };
173
147
  /**
174
- * Returns the direction and tracks
175
- * @param {string} trackType type of track (audio/video)
176
- * @param {object} track tracks passed
177
- * @param {boolean} receiveTracks do you want to receive tracks from the remote side
178
- * @returns {Object} returns direction tracks to be added in transceiver
148
+ * creates a webrtc media connection with provided tracks and mediaDirection configuration
149
+ *
150
+ * @param {boolean} isMultistream
151
+ * @param {string} debugId string useful for debugging (will appear in media connection logs)
152
+ * @param {Object} options
153
+ * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
154
+ * audioTrack, videoTrack and shareTrack
155
+ * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
156
+ * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
157
+ * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
158
+ * @param {Object} [options.turnServerInfo]
159
+ * @returns {RoapMediaConnection}
179
160
  */
180
161
 
181
162
 
182
- Media.checkTracks = function (trackType, track, receiveTracks) {
183
- var getDirection = function getDirection(sendTracks, receiveTracks) {
184
- if (sendTracks && receiveTracks) {
185
- return 'sendrecv';
186
- }
187
-
188
- if (sendTracks && !receiveTracks) {
189
- return 'sendonly';
190
- }
191
-
192
- if (!sendTracks && receiveTracks) {
193
- return 'recvonly';
194
- }
163
+ Media.createMediaConnection = function (isMultistream, debugId, options) {
164
+ var mediaProperties = options.mediaProperties,
165
+ remoteQualityLevel = options.remoteQualityLevel,
166
+ enableRtx = options.enableRtx,
167
+ enableExtmap = options.enableExtmap,
168
+ turnServerInfo = options.turnServerInfo;
169
+ var iceServers = [];
195
170
 
196
- return 'inactive';
197
- };
198
-
199
- if (track) {
200
- return {
201
- track: track,
202
- direction: getDirection(!!track, receiveTracks)
203
- };
171
+ if (turnServerInfo) {
172
+ iceServers.push({
173
+ urls: turnServerInfo.url,
174
+ username: turnServerInfo.username || '',
175
+ credential: turnServerInfo.password || ''
176
+ });
204
177
  }
205
178
 
206
- return {
207
- track: trackType,
208
- direction: getDirection(!!track, receiveTracks)
209
- };
210
- };
211
- /**
212
- * creates peerconnection and attaches streams
213
- * @param {MediaDirection} mediaProperties
214
- * @param {Object} meetingProperties
215
- * @param {string} meetingProperties.meetingId
216
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
217
- * @returns {Array} [peerConnection, ]
218
- */
219
-
220
-
221
- Media.attachMedia = function (mediaProperties, _ref2) {
222
- var meetingId = _ref2.meetingId,
223
- remoteQualityLevel = _ref2.remoteQualityLevel,
224
- enableRtx = _ref2.enableRtx,
225
- enableExtmap = _ref2.enableExtmap;
226
- var mediaDirection = mediaProperties.mediaDirection,
227
- audioTrack = mediaProperties.audioTrack,
228
- videoTrack = mediaProperties.videoTrack,
229
- shareTrack = mediaProperties.shareTrack,
230
- peerConnection = mediaProperties.peerConnection;
231
- var result = null; // Add Transceiver for audio
232
-
233
- result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);
234
- peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {
235
- direction: result.direction
236
- }); // Add Transceiver for video
237
-
238
- result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);
239
- peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {
240
- direction: result.direction
241
- }); // Add Transceiver for share
242
-
243
- result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);
244
- peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {
245
- direction: result.direction
246
- });
247
-
248
- peerConnection.onnegotiationneeded = function (event) {
249
- _loggerProxy.default.logger.info("Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ".concat(event));
250
- };
251
-
252
- return _peerConnectionManager.default.createOffer(peerConnection, {
253
- meetingId: meetingId,
254
- remoteQualityLevel: remoteQualityLevel,
255
- enableRtx: enableRtx,
256
- enableExtmap: enableExtmap
257
- });
258
- };
259
- /**
260
- * updates all the media streams and creates a new media offer
261
- * @param {MediaDirection} mediaProperties
262
- * @param {Object} meetingProperties
263
- * @param {string} meetingProperties.meetingId
264
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
265
- * @returns {Promise}
266
- */
179
+ if (isMultistream) {
180
+ return new _internalMediaCoreWrapper.MultistreamRoapMediaConnection({
181
+ iceServers: iceServers
182
+ }, debugId);
183
+ }
267
184
 
185
+ if (!mediaProperties) {
186
+ throw new Error('mediaProperties have to be provided for non-multistream media connections');
187
+ }
268
188
 
269
- Media.updateMedia = function (mediaProperties, _ref3) {
270
- var meetingId = _ref3.meetingId,
271
- remoteQualityLevel = _ref3.remoteQualityLevel,
272
- enableRtx = _ref3.enableRtx,
273
- enableExtmap = _ref3.enableExtmap;
274
189
  var mediaDirection = mediaProperties.mediaDirection,
275
190
  audioTrack = mediaProperties.audioTrack,
276
191
  videoTrack = mediaProperties.videoTrack,
277
- shareTrack = mediaProperties.shareTrack,
278
- peerConnection = mediaProperties.peerConnection; // update audio transceiver
279
-
280
- Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {
281
- type: 'audio',
282
- track: audioTrack,
283
- sendTrack: mediaDirection.sendAudio && audioTrack,
284
- receiveTrack: mediaDirection.receiveAudio
285
- }); // update video transceiver
286
-
287
- Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {
288
- type: 'video',
289
- track: videoTrack,
290
- sendTrack: mediaDirection.sendVideo && videoTrack,
291
- receiveTrack: mediaDirection.receiveVideo
292
- }); // update content transceiver
293
-
294
- Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {
295
- type: 'video',
296
- track: shareTrack,
297
- sendTrack: mediaDirection.sendShare && shareTrack,
298
- receiveTrack: mediaDirection.receiveShare
299
- });
192
+ shareTrack = mediaProperties.shareTrack;
193
+ return new _internalMediaCoreWrapper.RoapMediaConnection({
194
+ iceServers: iceServers,
195
+ skipInactiveTransceivers: false,
196
+ requireH264: true,
197
+ sdpMunging: {
198
+ convertPort9to0: false,
199
+ addContentSlides: true,
200
+ bandwidthLimits: {
201
+ audio: _config2.default.meetings.bandwidth.audio,
202
+ video: _config2.default.meetings.bandwidth.video
203
+ },
204
+ startBitrate: _config2.default.meetings.bandwidth.startBitrate,
205
+ periodicKeyframes: 20,
206
+ // it's always been hardcoded in SDK so for now keeping it that way
207
+ disableExtmap: !enableExtmap,
208
+ disableRtx: !enableRtx // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
300
209
 
301
- peerConnection.onnegotiationneeded = function (event) {
302
- _loggerProxy.default.logger.info("Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ".concat(event));
303
- };
304
-
305
- return _peerConnectionManager.default.createOffer(peerConnection, {
306
- meetingId: meetingId,
307
- remoteQualityLevel: remoteQualityLevel,
308
- enableRtx: enableRtx,
309
- enableExtmap: enableExtmap
310
- });
311
- };
312
- /**
313
- * @param {RTCRtpTransceiver} transceiver
314
- * @param {Object} options
315
- * @param {MediaStreamTrack} options.track
316
- * @returns {undefined}
317
- */
318
-
319
-
320
- Media.setTrackOnTransceiver = function (transceiver, options) {
321
- var type = options.type,
322
- track = options.track,
323
- sendTrack = options.sendTrack,
324
- receiveTrack = options.receiveTrack;
325
-
326
- try {
327
- var result = Media.checkTracks(type, sendTrack && track, receiveTrack);
328
- transceiver.direction = result.direction;
329
-
330
- if (options.track) {
331
- transceiver.sender.replaceTrack(track);
332
210
  }
333
- } catch (e) {
334
- _loggerProxy.default.logger.error("Media:index#setTrackOnTransceiver --> ".concat(e));
335
-
336
- throw e;
337
- }
338
- };
339
- /**
340
- * creates a new offer
341
- * @param {Object} meetingProperties
342
- * @param {string} meetingProperties.meetingId
343
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
344
- * @param {RTCPeerConnection} peerConnection
345
- * @param {RTCRtpTransceiver} transceiver
346
- * @param {Object} options see #Media.setTrackOnTransceiver
347
- * @returns {Promise}
348
- */
349
-
350
-
351
- Media.updateTransceiver = function (_ref4, peerConnection, transceiver, options) {
352
- var meetingId = _ref4.meetingId,
353
- remoteQualityLevel = _ref4.remoteQualityLevel,
354
- enableRtx = _ref4.enableRtx,
355
- enableExtmap = _ref4.enableExtmap;
356
- Media.setTrackOnTransceiver(transceiver, options);
357
- return _peerConnectionManager.default.createOffer(peerConnection, {
358
- meetingId: meetingId,
359
- remoteQualityLevel: remoteQualityLevel,
360
- enableRtx: enableRtx,
361
- enableExtmap: enableExtmap
362
- });
211
+ }, {
212
+ send: {
213
+ audio: audioTrack,
214
+ video: videoTrack,
215
+ screenShareVideo: shareTrack
216
+ },
217
+ receive: {
218
+ audio: mediaDirection.receiveAudio,
219
+ video: mediaDirection.receiveVideo,
220
+ screenShareVideo: mediaDirection.receiveShare,
221
+ remoteQualityLevel: remoteQualityLevel
222
+ }
223
+ }, debugId);
363
224
  };
364
225
  /**
365
226
  * generates share streams
@@ -505,9 +366,9 @@ Media.getMedia = function (audio, video, config) {
505
366
  */
506
367
 
507
368
 
508
- Media.getSupportedDevice = function (_ref5) {
509
- var sendAudio = _ref5.sendAudio,
510
- sendVideo = _ref5.sendVideo;
369
+ Media.getSupportedDevice = function (_ref) {
370
+ var sendAudio = _ref.sendAudio,
371
+ sendVideo = _ref.sendVideo;
511
372
  return _promise.default.resolve().then(function () {
512
373
  if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
513
374
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled, track) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n if (peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId, audioMuted, videoMuted) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options, config) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType, track, receiveTracks) => {\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n } if (sendTracks && !receiveTracks) {\n return 'sendonly';\n } if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (mediaProperties, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for video\n result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for share\n result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (mediaProperties, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (transceiver, options) => {\n const {\n type, track, sendTrack, receiveTrack\n } = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = ({\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n}, peerConnection, transceiver, options) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (options, config = {}) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio, video, config) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (mediaSetting, audioVideo, sharePreferences, config) => Media.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
1
+ {"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","createMediaConnection","isMultistream","debugId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","iceServers","push","urls","url","username","credential","password","MultistreamRoapMediaConnection","Error","mediaDirection","audioTrack","videoTrack","shareTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","send","screenShareVideo","receive","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","reject","MediaError","toggleStream","stopTracks","stop","e","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n MEDIA_TRACK_CONSTRAINT,\n} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {RoapMediaConnection, MultistreamRoapMediaConnection} from './internal-media-core-wrapper';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {Object} options\n * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @returns {RoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n options: {\n mediaProperties?: {\n mediaDirection?: {\n receiveAudio: boolean,\n receiveVideo: boolean,\n receiveShare: boolean,\n },\n audioTrack?: MediaStreamTrack,\n videoTrack?: MediaStreamTrack,\n shareTrack?: MediaStreamTrack\n },\n remoteQualityLevel?: 'LOW'|'MEDIUM'|'HIGH',\n enableRtx?: boolean,\n enableExtmap?: boolean,\n turnServerInfo?: {\n url: string,\n username: string,\n password: string\n }\n }\n) => {\n const {\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo\n } = options;\n\n const iceServers = [];\n\n if (turnServerInfo) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || ''\n });\n }\n\n if (isMultistream) {\n return new MultistreamRoapMediaConnection({\n iceServers,\n }, debugId);\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack\n } = mediaProperties;\n\n\n return new RoapMediaConnection({\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n }\n }, {\n send: {\n audio: audioTrack,\n video: videoTrack,\n screenShareVideo: shareTrack\n },\n receive: {\n audio: mediaDirection.receiveAudio,\n video: mediaDirection.receiveVideo,\n screenShareVideo: mediaDirection.receiveShare,\n remoteQualityLevel\n }\n }, debugId);\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({ sendAudio, sendVideo }: { sendAudio: boolean; sendVideo: boolean }) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\nMedia.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+
9
+ exports.RoapMediaConnection = exports.MultistreamRoapMediaConnection = void 0;
10
+
11
+ var _internalMediaCore = require("@webex/internal-media-core");
12
+
13
+ /* We have this wrapper just because otherwise it's impossible to mock
14
+ * RoapMediaConnection and MultistreamRoapMediaConnection constructors in unit tests,
15
+ * because they are exported by @webex/internal-media-core as non-writable, non-configurable
16
+ * properties of MediaConnection and sinon doesn't allow spying on them or stubbing them.
17
+ */
18
+ var RoapMediaConnection = _internalMediaCore.MediaConnection.RoapMediaConnection;
19
+ exports.RoapMediaConnection = RoapMediaConnection;
20
+ var MultistreamRoapMediaConnection = _internalMediaCore.MediaConnection.MultistreamRoapMediaConnection;
21
+ exports.MultistreamRoapMediaConnection = MultistreamRoapMediaConnection;
22
+ //# sourceMappingURL=internal-media-core-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RoapMediaConnection","MC","MultistreamRoapMediaConnection"],"sources":["internal-media-core-wrapper.ts"],"sourcesContent":["import {MediaConnection as MC} from '@webex/internal-media-core';\n\n/* We have this wrapper just because otherwise it's impossible to mock\n * RoapMediaConnection and MultistreamRoapMediaConnection constructors in unit tests,\n * because they are exported by @webex/internal-media-core as non-writable, non-configurable\n * properties of MediaConnection and sinon doesn't allow spying on them or stubbing them.\n */\nexport const RoapMediaConnection = MC.RoapMediaConnection;\nexport const MultistreamRoapMediaConnection = MC.MultistreamRoapMediaConnection;\n"],"mappings":";;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,mBAAmB,GAAGC,kCAAA,CAAGD,mBAA/B;;AACA,IAAME,8BAA8B,GAAGD,kCAAA,CAAGC,8BAA1C"}
@@ -22,12 +22,12 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpe
22
22
 
23
23
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
24
24
 
25
+ var _internalMediaCore = require("@webex/internal-media-core");
26
+
25
27
  var _constants = require("../constants");
26
28
 
27
29
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
28
30
 
29
- var _util = _interopRequireDefault(require("./util"));
30
-
31
31
  /**
32
32
  * @class MediaProperties
33
33
  */
@@ -39,8 +39,20 @@ var MediaProperties = /*#__PURE__*/function () {
39
39
  function MediaProperties() {
40
40
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
41
41
  (0, _classCallCheck2.default)(this, MediaProperties);
42
+ (0, _defineProperty2.default)(this, "audioTrack", void 0);
43
+ (0, _defineProperty2.default)(this, "localQualityLevel", void 0);
44
+ (0, _defineProperty2.default)(this, "mediaDirection", void 0);
45
+ (0, _defineProperty2.default)(this, "mediaSettings", void 0);
46
+ (0, _defineProperty2.default)(this, "webrtcMediaConnection", void 0);
47
+ (0, _defineProperty2.default)(this, "remoteAudioTrack", void 0);
48
+ (0, _defineProperty2.default)(this, "remoteQualityLevel", void 0);
49
+ (0, _defineProperty2.default)(this, "remoteShare", void 0);
50
+ (0, _defineProperty2.default)(this, "remoteVideoTrack", void 0);
51
+ (0, _defineProperty2.default)(this, "shareTrack", void 0);
52
+ (0, _defineProperty2.default)(this, "videoDeviceId", void 0);
53
+ (0, _defineProperty2.default)(this, "videoTrack", void 0);
42
54
  (0, _defineProperty2.default)(this, "namespace", _constants.MEETINGS);
43
- this.peerConnection = _util.default.createPeerConnection();
55
+ this.webrtcMediaConnection = null;
44
56
  this.mediaDirection = options.mediaDirection;
45
57
  this.videoTrack = options.videoTrack;
46
58
  this.audioTrack = options.audioTrack;
@@ -76,8 +88,8 @@ var MediaProperties = /*#__PURE__*/function () {
76
88
  }
77
89
  }, {
78
90
  key: "setMediaPeerConnection",
79
- value: function setMediaPeerConnection(peerConnection) {
80
- this.peerConnection = peerConnection;
91
+ value: function setMediaPeerConnection(mediaPeerConnection) {
92
+ this.webrtcMediaConnection = mediaPeerConnection;
81
93
  }
82
94
  }, {
83
95
  key: "setLocalVideoTrack",
@@ -145,12 +157,7 @@ var MediaProperties = /*#__PURE__*/function () {
145
157
  }, {
146
158
  key: "unsetPeerConnection",
147
159
  value: function unsetPeerConnection() {
148
- this.peerConnection = null;
149
- }
150
- }, {
151
- key: "reInitiatePeerconnection",
152
- value: function reInitiatePeerconnection(turnServerInfo) {
153
- this.peerConnection = _util.default.createPeerConnection(turnServerInfo);
160
+ this.webrtcMediaConnection = null;
154
161
  }
155
162
  }, {
156
163
  key: "unsetLocalVideoTrack",
@@ -260,46 +267,46 @@ var MediaProperties = /*#__PURE__*/function () {
260
267
  this.unsetRemoteMedia();
261
268
  }
262
269
  /**
263
- * Waits until ice connection is established
270
+ * Waits for the webrtc media connection to be connected.
264
271
  *
265
272
  * @returns {Promise<void>}
266
273
  */
267
274
 
268
275
  }, {
269
- key: "waitForIceConnectedState",
270
- value: function waitForIceConnectedState() {
276
+ key: "waitForMediaConnectionConnected",
277
+ value: function waitForMediaConnectionConnected() {
271
278
  var _this = this;
272
279
 
273
- var isIceConnected = function isIceConnected() {
274
- return _this.peerConnection.iceConnectionState === _constants.ICE_STATE.CONNECTED || _this.peerConnection.iceConnectionState === _constants.ICE_STATE.COMPLETED;
280
+ var isConnected = function isConnected() {
281
+ return _this.webrtcMediaConnection.getConnectionState() === _internalMediaCore.MediaConnection.ConnectionState.Connected;
275
282
  };
276
283
 
277
- if (isIceConnected()) {
284
+ if (isConnected()) {
278
285
  return _promise.default.resolve();
279
286
  }
280
287
 
281
288
  return new _promise.default(function (resolve, reject) {
282
289
  var timer;
283
290
 
284
- var iceListener = function iceListener() {
285
- _loggerProxy.default.logger.log("Media:properties#waitForIceConnectedState --> ice state: ".concat(_this.peerConnection.iceConnectionState, ", conn state: ").concat(_this.peerConnection.connectionState));
291
+ var connectionStateListener = function connectionStateListener() {
292
+ _loggerProxy.default.logger.log("Media:properties#waitForMediaConnectionConnected --> connection state: ".concat(_this.webrtcMediaConnection.getConnectionState()));
286
293
 
287
- if (isIceConnected()) {
294
+ if (isConnected()) {
288
295
  clearTimeout(timer);
289
296
 
290
- _this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);
297
+ _this.webrtcMediaConnection.off(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
291
298
 
292
299
  resolve();
293
300
  }
294
301
  };
295
302
 
296
303
  timer = setTimeout(function () {
297
- _this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);
304
+ _this.webrtcMediaConnection.off(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
298
305
 
299
306
  reject();
300
307
  }, _constants.PC_BAIL_TIMEOUT);
301
308
 
302
- _this.peerConnection.addEventListener('iceconnectionstatechange', iceListener);
309
+ _this.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
303
310
  });
304
311
  }
305
312
  /**
@@ -318,13 +325,13 @@ var MediaProperties = /*#__PURE__*/function () {
318
325
  switch (_context.prev = _context.next) {
319
326
  case 0:
320
327
  _context.next = 2;
321
- return this.waitForIceConnectedState();
328
+ return this.waitForMediaConnectionConnected();
322
329
 
323
330
  case 2:
324
331
  allStatsReports = [];
325
332
  _context.prev = 3;
326
333
  _context.next = 6;
327
- return this.peerConnection.getStats();
334
+ return this.webrtcMediaConnection.getStats();
328
335
 
329
336
  case 6:
330
337
  statsResult = _context.sent;