@webex/plugin-meetings 3.0.0-beta.24 → 3.0.0-beta.241

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 (360) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +28 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +5 -10
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +190 -27
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +357 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +49 -106
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +90 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2593 -2558
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +228 -123
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +255 -195
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +601 -417
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +48 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +171 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +370 -90
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +4 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +213 -62
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/reachability/index.js +81 -30
  127. package/dist/reachability/index.js.map +1 -1
  128. package/dist/reachability/request.js +16 -7
  129. package/dist/reachability/request.js.map +1 -1
  130. package/dist/reconnection-manager/index.js +199 -154
  131. package/dist/reconnection-manager/index.js.map +1 -1
  132. package/dist/recording-controller/index.js +21 -2
  133. package/dist/recording-controller/index.js.map +1 -1
  134. package/dist/recording-controller/util.js +9 -8
  135. package/dist/recording-controller/util.js.map +1 -1
  136. package/dist/roap/index.js +23 -29
  137. package/dist/roap/index.js.map +1 -1
  138. package/dist/roap/request.js +112 -89
  139. package/dist/roap/request.js.map +1 -1
  140. package/dist/roap/turnDiscovery.js +96 -36
  141. package/dist/roap/turnDiscovery.js.map +1 -1
  142. package/dist/rtcMetrics/constants.js +12 -0
  143. package/dist/rtcMetrics/constants.js.map +1 -0
  144. package/dist/rtcMetrics/index.js +117 -0
  145. package/dist/rtcMetrics/index.js.map +1 -0
  146. package/dist/statsAnalyzer/index.js +51 -34
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +6 -6
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  154. package/dist/types/breakouts/events.d.ts +8 -0
  155. package/dist/types/breakouts/request.d.ts +22 -0
  156. package/dist/types/breakouts/utils.d.ts +15 -0
  157. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  158. package/dist/types/common/queue.d.ts +9 -7
  159. package/dist/types/config.d.ts +1 -6
  160. package/dist/types/constants.d.ts +154 -21
  161. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  162. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  163. package/dist/types/controls-options-manager/index.d.ts +136 -0
  164. package/dist/types/controls-options-manager/types.d.ts +43 -0
  165. package/dist/types/controls-options-manager/util.d.ts +1 -0
  166. package/dist/types/index.d.ts +6 -4
  167. package/dist/types/interpretation/collection.d.ts +5 -0
  168. package/dist/types/interpretation/index.d.ts +5 -0
  169. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  170. package/dist/types/locus-info/index.d.ts +57 -4
  171. package/dist/types/locus-info/parser.d.ts +65 -6
  172. package/dist/types/media/index.d.ts +2 -0
  173. package/dist/types/media/properties.d.ts +22 -36
  174. package/dist/types/meeting/in-meeting-actions.d.ts +90 -2
  175. package/dist/types/meeting/index.d.ts +297 -491
  176. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  177. package/dist/types/meeting/muteState.d.ts +98 -22
  178. package/dist/types/meeting/request.d.ts +72 -43
  179. package/dist/types/meeting/util.d.ts +101 -1
  180. package/dist/types/meeting-info/index.d.ts +6 -1
  181. package/dist/types/meeting-info/meeting-info-v2.d.ts +30 -1
  182. package/dist/types/meetings/collection.d.ts +8 -0
  183. package/dist/types/meetings/index.d.ts +76 -12
  184. package/dist/types/meetings/meetings.types.d.ts +4 -0
  185. package/dist/types/member/index.d.ts +13 -0
  186. package/dist/types/member/types.d.ts +32 -0
  187. package/dist/types/members/collection.d.ts +5 -0
  188. package/dist/types/members/index.d.ts +35 -2
  189. package/dist/types/members/request.d.ts +73 -9
  190. package/dist/types/members/types.d.ts +24 -0
  191. package/dist/types/members/util.d.ts +209 -1
  192. package/dist/types/metrics/constants.d.ts +3 -4
  193. package/dist/types/metrics/index.d.ts +4 -119
  194. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  195. package/dist/types/multistream/receiveSlot.d.ts +16 -12
  196. package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
  197. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  198. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  199. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  200. package/dist/types/reachability/index.d.ts +15 -3
  201. package/dist/types/reachability/request.d.ts +7 -3
  202. package/dist/types/reconnection-manager/index.d.ts +9 -0
  203. package/dist/types/recording-controller/index.d.ts +15 -1
  204. package/dist/types/recording-controller/util.d.ts +5 -4
  205. package/dist/types/roap/request.d.ts +15 -11
  206. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  207. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  208. package/dist/types/rtcMetrics/index.d.ts +47 -0
  209. package/dist/types/statsAnalyzer/index.d.ts +6 -1
  210. package/package.json +23 -20
  211. package/src/annotation/annotation.types.ts +50 -0
  212. package/src/annotation/constants.ts +36 -0
  213. package/src/annotation/index.ts +328 -0
  214. package/src/breakouts/README.md +44 -14
  215. package/src/breakouts/breakout.ts +87 -9
  216. package/src/breakouts/edit-lock-error.ts +25 -0
  217. package/src/breakouts/events.ts +56 -0
  218. package/src/breakouts/index.ts +710 -10
  219. package/src/breakouts/request.ts +55 -0
  220. package/src/breakouts/utils.ts +57 -0
  221. package/src/common/errors/webex-errors.ts +27 -2
  222. package/src/common/logs/logger-proxy.ts +1 -1
  223. package/src/common/queue.ts +22 -8
  224. package/src/config.ts +4 -9
  225. package/src/constants.ts +175 -18
  226. package/src/controls-options-manager/constants.ts +5 -0
  227. package/src/controls-options-manager/enums.ts +18 -0
  228. package/src/controls-options-manager/index.ts +278 -0
  229. package/src/controls-options-manager/types.ts +59 -0
  230. package/src/controls-options-manager/util.ts +300 -0
  231. package/src/index.ts +39 -0
  232. package/src/interpretation/README.md +60 -0
  233. package/src/interpretation/collection.ts +19 -0
  234. package/src/interpretation/index.ts +332 -0
  235. package/src/interpretation/siLanguage.ts +18 -0
  236. package/src/locus-info/controlsUtils.ts +108 -0
  237. package/src/locus-info/index.ts +381 -59
  238. package/src/locus-info/infoUtils.ts +10 -2
  239. package/src/locus-info/mediaSharesUtils.ts +48 -0
  240. package/src/locus-info/parser.ts +224 -39
  241. package/src/locus-info/selfUtils.ts +81 -5
  242. package/src/media/index.ts +89 -109
  243. package/src/media/properties.ts +48 -87
  244. package/src/meeting/in-meeting-actions.ts +179 -3
  245. package/src/meeting/index.ts +2086 -2151
  246. package/src/meeting/locusMediaRequest.ts +313 -0
  247. package/src/meeting/muteState.ts +227 -130
  248. package/src/meeting/request.ts +171 -120
  249. package/src/meeting/util.ts +588 -395
  250. package/src/meeting-info/index.ts +54 -8
  251. package/src/meeting-info/meeting-info-v2.ts +148 -14
  252. package/src/meeting-info/util.ts +1 -1
  253. package/src/meeting-info/utilv2.ts +23 -23
  254. package/src/meetings/collection.ts +20 -0
  255. package/src/meetings/index.ts +407 -108
  256. package/src/meetings/meetings.types.ts +12 -0
  257. package/src/meetings/request.ts +2 -0
  258. package/src/meetings/util.ts +103 -4
  259. package/src/member/index.ts +49 -0
  260. package/src/member/types.ts +38 -0
  261. package/src/member/util.ts +127 -25
  262. package/src/members/collection.ts +8 -0
  263. package/src/members/index.ts +107 -6
  264. package/src/members/request.ts +97 -17
  265. package/src/members/types.ts +28 -0
  266. package/src/members/util.ts +319 -240
  267. package/src/metrics/constants.ts +3 -4
  268. package/src/metrics/index.ts +1 -490
  269. package/src/multistream/mediaRequestManager.ts +289 -79
  270. package/src/multistream/receiveSlot.ts +55 -18
  271. package/src/multistream/receiveSlotManager.ts +46 -24
  272. package/src/multistream/remoteMedia.ts +27 -2
  273. package/src/multistream/remoteMediaGroup.ts +59 -0
  274. package/src/multistream/remoteMediaManager.ts +150 -32
  275. package/src/reachability/index.ts +69 -17
  276. package/src/reachability/request.ts +16 -7
  277. package/src/reconnection-manager/index.ts +81 -54
  278. package/src/recording-controller/index.ts +20 -3
  279. package/src/recording-controller/util.ts +26 -9
  280. package/src/roap/index.ts +23 -30
  281. package/src/roap/request.ts +104 -95
  282. package/src/roap/turnDiscovery.ts +50 -25
  283. package/src/rtcMetrics/constants.ts +3 -0
  284. package/src/rtcMetrics/index.ts +100 -0
  285. package/src/statsAnalyzer/index.ts +73 -35
  286. package/src/statsAnalyzer/mqaUtil.ts +8 -10
  287. package/test/integration/spec/converged-space-meetings.js +233 -0
  288. package/test/integration/spec/journey.js +336 -259
  289. package/test/integration/spec/space-meeting.js +76 -3
  290. package/test/unit/spec/annotation/index.ts +418 -0
  291. package/test/unit/spec/breakouts/breakout.ts +142 -24
  292. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  293. package/test/unit/spec/breakouts/events.ts +89 -0
  294. package/test/unit/spec/breakouts/index.ts +1545 -48
  295. package/test/unit/spec/breakouts/request.ts +104 -0
  296. package/test/unit/spec/breakouts/utils.js +72 -0
  297. package/test/unit/spec/common/queue.js +31 -2
  298. package/test/unit/spec/controls-options-manager/index.js +287 -0
  299. package/test/unit/spec/controls-options-manager/util.js +582 -0
  300. package/test/unit/spec/fixture/locus.js +1 -0
  301. package/test/unit/spec/interpretation/collection.ts +15 -0
  302. package/test/unit/spec/interpretation/index.ts +589 -0
  303. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  304. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  305. package/test/unit/spec/locus-info/index.js +1169 -36
  306. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  307. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  308. package/test/unit/spec/locus-info/parser.js +62 -22
  309. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  310. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  311. package/test/unit/spec/media/index.ts +138 -28
  312. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  313. package/test/unit/spec/meeting/index.js +3514 -1746
  314. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  315. package/test/unit/spec/meeting/muteState.js +370 -208
  316. package/test/unit/spec/meeting/request.js +440 -45
  317. package/test/unit/spec/meeting/utils.js +671 -54
  318. package/test/unit/spec/meeting-info/index.js +181 -0
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  320. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  321. package/test/unit/spec/meetings/collection.js +14 -0
  322. package/test/unit/spec/meetings/index.js +939 -150
  323. package/test/unit/spec/meetings/utils.js +206 -2
  324. package/test/unit/spec/member/index.js +58 -4
  325. package/test/unit/spec/member/util.js +479 -35
  326. package/test/unit/spec/members/index.js +319 -1
  327. package/test/unit/spec/members/request.js +206 -27
  328. package/test/unit/spec/members/utils.js +184 -0
  329. package/test/unit/spec/metrics/index.js +1 -50
  330. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  331. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  332. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  333. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  334. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  335. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  336. package/test/unit/spec/reachability/index.ts +185 -7
  337. package/test/unit/spec/reachability/request.js +68 -0
  338. package/test/unit/spec/reconnection-manager/index.js +80 -6
  339. package/test/unit/spec/recording-controller/index.js +294 -218
  340. package/test/unit/spec/recording-controller/util.js +223 -96
  341. package/test/unit/spec/roap/index.ts +31 -51
  342. package/test/unit/spec/roap/request.ts +202 -85
  343. package/test/unit/spec/roap/turnDiscovery.ts +45 -10
  344. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  345. package/test/unit/spec/stats-analyzer/index.js +29 -2
  346. package/test/utils/constants.js +9 -0
  347. package/test/utils/integrationTestUtils.js +46 -0
  348. package/test/utils/testUtils.js +0 -45
  349. package/test/utils/webex-config.js +4 -0
  350. package/test/utils/webex-test-users.js +6 -3
  351. package/dist/meeting/effectsState.js +0 -262
  352. package/dist/meeting/effectsState.js.map +0 -1
  353. package/dist/metrics/config.js +0 -299
  354. package/dist/metrics/config.js.map +0 -1
  355. package/dist/types/meeting/effectsState.d.ts +0 -42
  356. package/dist/types/metrics/config.d.ts +0 -178
  357. package/src/index.js +0 -16
  358. package/src/meeting/effectsState.ts +0 -211
  359. package/src/metrics/config.ts +0 -495
  360. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -4,15 +4,27 @@
4
4
  /* globals navigator */
5
5
 
6
6
  import {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';
7
+ import {
8
+ LocalCameraTrack,
9
+ LocalDisplayTrack,
10
+ LocalSystemAudioTrack,
11
+ LocalMicrophoneTrack,
12
+ } from '@webex/media-helpers';
7
13
  import LoggerProxy from '../common/logs/logger-proxy';
8
- import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
14
+ import {MEDIA_TRACK_CONSTRAINT} from '../constants';
9
15
  import Config from '../config';
10
16
  import StaticConfig from '../common/config';
11
- import MediaError from '../common/errors/media';
12
17
  import BrowserDetection from '../common/browser-detection';
18
+ import RtcMetrics from '../rtcMetrics';
13
19
 
14
20
  const {isBrowser} = BrowserDetection();
15
21
 
22
+ type MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];
23
+
24
+ export type BundlePolicy = ConstructorParameters<
25
+ typeof MultistreamRoapMediaConnection
26
+ >[0]['bundlePolicy'];
27
+
16
28
  /**
17
29
  * MediaDirection
18
30
  * @typedef {Object} MediaDirection
@@ -43,45 +55,6 @@ const {isBrowser} = BrowserDetection();
43
55
  */
44
56
  const Media: any = {};
45
57
 
46
- /**
47
- * @param {boolean} enabled
48
- * @param {MediaStreamTrack} track
49
- * @returns {Boolean}
50
- * @public
51
- */
52
- Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
53
- if (track) {
54
- track.enabled = enabled;
55
-
56
- return true;
57
- }
58
-
59
- return false;
60
- };
61
-
62
- /**
63
- * format the media array for send
64
- * @param {String} mediaId
65
- * @param {Boolean} audioMuted
66
- * @param {Boolean} videoMuted
67
- * @returns {Array} medias
68
- */
69
- Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {
70
- if (mediaId) {
71
- return [
72
- {
73
- localSdp: JSON.stringify({
74
- audioMuted,
75
- videoMuted,
76
- }),
77
- mediaId,
78
- },
79
- ];
80
- }
81
-
82
- return [];
83
- };
84
-
85
58
  /**
86
59
  * make a browser call to get the media
87
60
  * @param {SendOptions} options
@@ -109,33 +82,60 @@ Media.getLocalMedia = (options: any, config: object) => {
109
82
  return Promise.resolve(undefined);
110
83
  };
111
84
 
85
+ Media.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {
86
+ if (!receive && !send) {
87
+ return 'inactive';
88
+ }
89
+
90
+ if (forceSendRecv || (receive && send)) {
91
+ return 'sendrecv';
92
+ }
93
+
94
+ if (receive) {
95
+ return 'recvonly';
96
+ }
97
+
98
+ return 'sendonly';
99
+ };
100
+
112
101
  /**
113
102
  * creates a webrtc media connection with provided tracks and mediaDirection configuration
114
103
  *
115
104
  * @param {boolean} isMultistream
116
105
  * @param {string} debugId string useful for debugging (will appear in media connection logs)
106
+ * @param {object} webex main `webex` object.
107
+ * @param {string} meetingId id for the meeting using this connection
108
+ * @param {string} correlationId id used in requests to correlate to this session
117
109
  * @param {Object} options
118
- * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
119
- * audioTrack, videoTrack and shareTrack
110
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
111
+ * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
120
112
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
121
113
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
122
114
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
123
115
  * @param {Object} [options.turnServerInfo]
124
- * @returns {RoapMediaConnection}
116
+ * @param {BundlePolicy} [options.bundlePolicy]
117
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
125
118
  */
126
119
  Media.createMediaConnection = (
127
120
  isMultistream: boolean,
128
121
  debugId: string,
122
+ webex: object,
123
+ meetingId: string,
124
+ correlationId: string,
129
125
  options: {
130
- mediaProperties?: {
126
+ mediaProperties: {
131
127
  mediaDirection?: {
132
128
  receiveAudio: boolean;
133
129
  receiveVideo: boolean;
134
130
  receiveShare: boolean;
131
+ sendAudio: boolean;
132
+ sendVideo: boolean;
133
+ sendShare: boolean;
135
134
  };
136
- audioTrack?: MediaStreamTrack;
137
- videoTrack?: MediaStreamTrack;
138
- shareTrack?: MediaStreamTrack;
135
+ audioTrack?: LocalMicrophoneTrack;
136
+ videoTrack?: LocalCameraTrack;
137
+ shareVideoTrack?: LocalDisplayTrack;
138
+ shareAudioTrack?: LocalSystemAudioTrack;
139
139
  };
140
140
  remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
141
141
  enableRtx?: boolean;
@@ -145,9 +145,17 @@ Media.createMediaConnection = (
145
145
  username: string;
146
146
  password: string;
147
147
  };
148
+ bundlePolicy?: BundlePolicy;
148
149
  }
149
150
  ) => {
150
- const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;
151
+ const {
152
+ mediaProperties,
153
+ remoteQualityLevel,
154
+ enableRtx,
155
+ enableExtmap,
156
+ turnServerInfo,
157
+ bundlePolicy,
158
+ } = options;
151
159
 
152
160
  const iceServers = [];
153
161
 
@@ -160,11 +168,25 @@ Media.createMediaConnection = (
160
168
  }
161
169
 
162
170
  if (isMultistream) {
171
+ const config: MultistreamConnectionConfig = {
172
+ iceServers,
173
+ enableMainAudio:
174
+ mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,
175
+ enableMainVideo:
176
+ mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,
177
+ };
178
+
179
+ if (bundlePolicy) {
180
+ config.bundlePolicy = bundlePolicy;
181
+ }
182
+
183
+ const rtcMetrics = new RtcMetrics(webex, meetingId, correlationId);
184
+
163
185
  return new MultistreamRoapMediaConnection(
164
- {
165
- iceServers,
166
- },
167
- debugId
186
+ config,
187
+ meetingId,
188
+ (data) => rtcMetrics.addMetrics(data),
189
+ () => rtcMetrics.closeMetrics()
168
190
  );
169
191
  }
170
192
 
@@ -172,7 +194,7 @@ Media.createMediaConnection = (
172
194
  throw new Error('mediaProperties have to be provided for non-multistream media connections');
173
195
  }
174
196
 
175
- const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;
197
+ const {mediaDirection, audioTrack, videoTrack, shareVideoTrack} = mediaProperties;
176
198
 
177
199
  return new RoapMediaConnection(
178
200
  {
@@ -193,17 +215,21 @@ Media.createMediaConnection = (
193
215
  },
194
216
  },
195
217
  {
196
- send: {
197
- audio: audioTrack,
198
- video: videoTrack,
199
- screenShareVideo: shareTrack,
218
+ localTracks: {
219
+ audio: audioTrack?.underlyingTrack,
220
+ video: videoTrack?.underlyingTrack,
221
+ screenShareVideo: shareVideoTrack?.underlyingTrack,
200
222
  },
201
- receive: {
202
- audio: mediaDirection.receiveAudio,
203
- video: mediaDirection.receiveVideo,
204
- screenShareVideo: mediaDirection.receiveShare,
205
- remoteQualityLevel,
223
+ direction: {
224
+ audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
225
+ video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
226
+ screenShareVideo: Media.getDirection(
227
+ false,
228
+ mediaDirection.receiveShare,
229
+ mediaDirection.sendShare
230
+ ),
206
231
  },
232
+ remoteQualityLevel,
207
233
  },
208
234
  debugId
209
235
  );
@@ -348,52 +374,6 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
348
374
  });
349
375
  };
350
376
 
351
- /**
352
- * Checks if the machine has at least one audio or video device (Dont use this for screen share)
353
- * @param {object} [options]
354
- * {
355
- * sendAudio: true/false,
356
- * sendVideo: true/false
357
- * }
358
- * @returns {Object} {
359
- * sendAudio: true/false,
360
- * sendVideo: true/false
361
- *}
362
- */
363
- Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
364
- Promise.resolve().then(() => {
365
- if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
366
- return {
367
- sendAudio: false,
368
- sendVideo: false,
369
- };
370
- }
371
-
372
- return navigator.mediaDevices.enumerateDevices().then((devices) => {
373
- const supported = {
374
- audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
375
- video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
376
- };
377
-
378
- return {
379
- sendAudio: supported.audio && sendAudio,
380
- sendVideo: supported.video && sendVideo,
381
- };
382
- });
383
- });
384
-
385
- /**
386
- * proxy to browser navigator.mediaDevices.enumerateDevices()
387
- * @returns {Promise}
388
- */
389
- Media.getDevices = () => {
390
- if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
391
- return navigator.mediaDevices.enumerateDevices();
392
- }
393
-
394
- return Promise.reject(new MediaError('enumerateDevices not supported.'));
395
- };
396
-
397
377
  /**
398
378
  *
399
379
  * Toggle a specific stream
@@ -1,41 +1,64 @@
1
1
  import {ConnectionState, Event} from '@webex/internal-media-core';
2
2
 
3
+ import {
4
+ LocalCameraTrack,
5
+ LocalMicrophoneTrack,
6
+ LocalDisplayTrack,
7
+ LocalSystemAudioTrack,
8
+ } from '@webex/media-helpers';
9
+
3
10
  import {MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';
4
11
  import LoggerProxy from '../common/logs/logger-proxy';
5
12
 
13
+ export type MediaDirection = {
14
+ sendAudio: boolean;
15
+ sendVideo: boolean;
16
+ sendShare: boolean;
17
+ receiveAudio: boolean;
18
+ receiveVideo: boolean;
19
+ receiveShare: boolean;
20
+ };
21
+
6
22
  /**
7
23
  * @class MediaProperties
8
24
  */
9
25
  export default class MediaProperties {
10
- audioTrack: any;
11
- localQualityLevel: any;
12
- mediaDirection: any;
26
+ audioTrack?: LocalMicrophoneTrack;
27
+ mediaDirection: MediaDirection;
13
28
  mediaSettings: any;
14
29
  webrtcMediaConnection: any;
15
30
  remoteAudioTrack: any;
16
31
  remoteQualityLevel: any;
17
32
  remoteShare: any;
18
33
  remoteVideoTrack: any;
19
- shareTrack: any;
34
+ shareVideoTrack?: LocalDisplayTrack;
35
+ shareAudioTrack?: LocalSystemAudioTrack;
20
36
  videoDeviceId: any;
21
- videoTrack: any;
37
+ videoTrack?: LocalCameraTrack;
22
38
  namespace = MEETINGS;
23
39
 
24
40
  /**
25
41
  * @param {Object} [options] -- to auto construct
26
42
  * @returns {MediaProperties}
27
43
  */
28
- constructor(options: any = {}) {
44
+ constructor() {
29
45
  this.webrtcMediaConnection = null;
30
- this.mediaDirection = options.mediaDirection;
31
- this.videoTrack = options.videoTrack;
32
- this.audioTrack = options.audioTrack;
33
- this.shareTrack = options.shareTrack;
34
- this.remoteShare = options.remoteShare;
35
- this.remoteAudioTrack = options.remoteAudioTrack;
36
- this.remoteVideoTrack = options.remoteVideoTrack;
37
- this.localQualityLevel = options.localQualityLevel || QUALITY_LEVELS['720p'];
38
- this.remoteQualityLevel = options.remoteQualityLevel || QUALITY_LEVELS.HIGH;
46
+ this.mediaDirection = {
47
+ receiveAudio: false,
48
+ receiveVideo: false,
49
+ receiveShare: false,
50
+ sendAudio: false,
51
+ sendVideo: false,
52
+ sendShare: false,
53
+ };
54
+ this.videoTrack = null;
55
+ this.audioTrack = null;
56
+ this.shareVideoTrack = null;
57
+ this.shareAudioTrack = null;
58
+ this.remoteShare = undefined;
59
+ this.remoteAudioTrack = undefined;
60
+ this.remoteVideoTrack = undefined;
61
+ this.remoteQualityLevel = QUALITY_LEVELS.HIGH;
39
62
  this.mediaSettings = {};
40
63
  this.videoDeviceId = null;
41
64
  }
@@ -60,20 +83,20 @@ export default class MediaProperties {
60
83
  this.webrtcMediaConnection = mediaPeerConnection;
61
84
  }
62
85
 
63
- setLocalVideoTrack(videoTrack) {
86
+ setLocalVideoTrack(videoTrack?: LocalCameraTrack) {
64
87
  this.videoTrack = videoTrack;
65
88
  }
66
89
 
67
- setLocalAudioTrack(audioTrack) {
90
+ setLocalAudioTrack(audioTrack?: LocalMicrophoneTrack) {
68
91
  this.audioTrack = audioTrack;
69
92
  }
70
93
 
71
- setLocalQualityLevel(localQualityLevel) {
72
- this.localQualityLevel = localQualityLevel;
94
+ setLocalShareVideoTrack(shareVideoTrack?: LocalDisplayTrack) {
95
+ this.shareVideoTrack = shareVideoTrack;
73
96
  }
74
97
 
75
- setLocalShareTrack(shareTrack) {
76
- this.shareTrack = shareTrack;
98
+ setLocalShareAudioTrack(shareAudioTrack?: LocalSystemAudioTrack) {
99
+ this.shareAudioTrack = shareAudioTrack;
77
100
  }
78
101
 
79
102
  setRemoteQualityLevel(remoteQualityLevel) {
@@ -115,31 +138,6 @@ export default class MediaProperties {
115
138
  this.webrtcMediaConnection = null;
116
139
  }
117
140
 
118
- unsetLocalVideoTrack() {
119
- this.videoTrack = null;
120
- }
121
-
122
- unsetLocalShareTrack() {
123
- this.shareTrack = null;
124
- }
125
-
126
- unsetLocalAudioTrack() {
127
- this.audioTrack = null;
128
- }
129
-
130
- /**
131
- * Removes remote stream from class instance
132
- * @deprecated after v1.89.3
133
- * @returns {void}
134
- */
135
- unsetRemoteStream() {
136
- LoggerProxy.logger.warn(
137
- 'Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
138
- );
139
- // unsets audio and video only
140
- this.unsetRemoteMedia();
141
- }
142
-
143
141
  /**
144
142
  * Removes both remote audio and video from class instance
145
143
  * @returns {void}
@@ -153,24 +151,6 @@ export default class MediaProperties {
153
151
  this.remoteShare = null;
154
152
  }
155
153
 
156
- unsetLocalVideoTracks() {
157
- this.unsetLocalVideoTrack();
158
- this.unsetLocalShareTrack();
159
- }
160
-
161
- /**
162
- * Removes remote stream and remote share from class instance
163
- * @deprecated after v1.89.3
164
- * @returns {void}
165
- */
166
- unsetRemoteStreams() {
167
- LoggerProxy.logger.warn(
168
- 'Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
169
- );
170
- this.unsetRemoteStream();
171
- this.unsetRemoteShare();
172
- }
173
-
174
154
  /**
175
155
  * Unsets all remote tracks
176
156
  * @returns {void}
@@ -180,31 +160,12 @@ export default class MediaProperties {
180
160
  this.unsetRemoteShare();
181
161
  }
182
162
 
183
- unsetShareStreams() {
184
- this.unsetLocalShareTrack();
185
- this.unsetRemoteShare();
186
- }
187
-
188
163
  /**
189
- * Removes both local and remote video stream from class instance
190
- * @deprecated after v1.89.3
191
- * @returns {void}
164
+ * Returns if we have at least one local share track or not.
165
+ * @returns {Boolean}
192
166
  */
193
- unsetMediaStreams() {
194
- LoggerProxy.logger.warn(
195
- 'Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)'
196
- );
197
- this.unsetLocalVideoTrack();
198
- this.unsetRemoteStream();
199
- }
200
-
201
- /**
202
- * Removes both local and remote video stream from class instance
203
- * @returns {void}
204
- */
205
- unsetMediaTracks() {
206
- this.unsetLocalVideoTrack();
207
- this.unsetRemoteMedia();
167
+ hasLocalShareTrack() {
168
+ return !!(this.shareAudioTrack || this.shareVideoTrack);
208
169
  }
209
170
 
210
171
  /**