@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.2
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.
- package/dist/common/errors/webex-errors.js +5 -29
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/constants.js +15 -74
- package/dist/constants.js.map +1 -1
- package/dist/media/index.js +68 -213
- package/dist/media/index.js.map +1 -1
- package/dist/media/internal-media-core-wrapper.js +22 -0
- package/dist/media/internal-media-core-wrapper.js.map +1 -0
- package/dist/media/properties.js +20 -25
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +0 -27
- package/dist/media/util.js.map +1 -1
- package/dist/meeting/index.js +694 -432
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +1 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +3 -44
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +64 -5
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +24 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/members/index.js +68 -0
- package/dist/members/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +132 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/multistreamMedia.js +116 -0
- package/dist/multistream/multistreamMedia.js.map +1 -0
- package/dist/multistream/receiveSlot.js +209 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.js +195 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.js +284 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.js +243 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.js +1113 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/reconnection-manager/index.js +109 -130
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +57 -240
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +2 -114
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +11 -5
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +2 -0
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +39 -36
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/package.json +20 -19
- package/src/common/errors/webex-errors.js +0 -18
- package/src/constants.ts +139 -180
- package/src/media/index.js +60 -194
- package/src/media/internal-media-core-wrapper.ts +9 -0
- package/src/media/properties.js +19 -25
- package/src/media/util.js +0 -22
- package/src/meeting/index.js +565 -320
- package/src/meeting/request.js +1 -0
- package/src/meeting/util.js +3 -46
- package/src/meetings/index.js +30 -1
- package/src/meetings/util.js +23 -2
- package/src/members/index.js +48 -0
- package/src/multistream/mediaRequestManager.ts +164 -0
- package/src/multistream/multistreamMedia.ts +92 -0
- package/src/multistream/receiveSlot.ts +141 -0
- package/src/multistream/receiveSlotManager.ts +142 -0
- package/src/multistream/remoteMedia.ts +219 -0
- package/src/multistream/remoteMediaGroup.ts +224 -0
- package/src/multistream/remoteMediaManager.ts +911 -0
- package/src/reconnection-manager/index.js +40 -53
- package/src/roap/index.js +47 -207
- package/src/roap/request.js +1 -72
- package/src/roap/turnDiscovery.ts +12 -6
- package/src/statsAnalyzer/global.js +2 -0
- package/src/statsAnalyzer/index.js +32 -46
- package/test/integration/spec/journey.js +1 -1
- package/test/unit/spec/media/index.ts +223 -0
- package/test/unit/spec/media/properties.ts +73 -82
- package/test/unit/spec/meeting/effectsState.js +1 -3
- package/test/unit/spec/meeting/index.js +420 -228
- package/test/unit/spec/meeting/muteState.js +7 -0
- package/test/unit/spec/meeting/utils.js +61 -2
- package/test/unit/spec/meetings/index.js +0 -4
- package/test/unit/spec/members/index.js +164 -2
- package/test/unit/spec/multistream/mediaRequestManager.ts +511 -0
- package/test/unit/spec/multistream/receiveSlot.ts +104 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +173 -0
- package/test/unit/spec/multistream/remoteMedia.ts +217 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1251 -0
- package/test/unit/spec/roap/index.ts +63 -35
- package/test/unit/spec/stats-analyzer/index.js +19 -22
- package/dist/peer-connection-manager/index.js +0 -794
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/roap/collection.js +0 -73
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -337
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.js +0 -164
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.js +0 -102
- package/dist/roap/util.js.map +0 -1
- package/src/peer-connection-manager/index.js +0 -723
- package/src/roap/collection.js +0 -63
- package/src/roap/handler.js +0 -252
- package/src/roap/state.js +0 -149
- package/src/roap/util.js +0 -93
- package/test/unit/spec/peerconnection-manager/index.js +0 -188
- package/test/unit/spec/peerconnection-manager/utils.js +0 -48
- package/test/unit/spec/roap/util.js +0 -30
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import {assert} from '@webex/test-helper-chai';
|
|
2
2
|
import sinon from 'sinon';
|
|
3
3
|
import TurnDiscovery from '@webex/plugin-meetings/src/roap/turnDiscovery';
|
|
4
|
-
import {ROAP} from '@webex/plugin-meetings/src/constants';
|
|
5
4
|
|
|
6
5
|
import RoapRequest from '@webex/plugin-meetings/src/roap/request';
|
|
7
|
-
import RoapHandler from '@webex/plugin-meetings/src/roap/handler';
|
|
8
6
|
import Roap from '@webex/plugin-meetings/src/roap/';
|
|
9
7
|
|
|
10
8
|
describe('Roap', () => {
|
|
@@ -13,7 +11,9 @@ describe('Roap', () => {
|
|
|
13
11
|
const RESULT = {something: 'some value'};
|
|
14
12
|
const meeting = {id: 'some meeting id'};
|
|
15
13
|
|
|
16
|
-
const doTurnDiscoveryStub = sinon
|
|
14
|
+
const doTurnDiscoveryStub = sinon
|
|
15
|
+
.stub(TurnDiscovery.prototype, 'doTurnDiscovery')
|
|
16
|
+
.resolves(RESULT);
|
|
17
17
|
|
|
18
18
|
const roap = new Roap({}, {parent: 'fake'});
|
|
19
19
|
|
|
@@ -37,22 +37,22 @@ describe('Roap', () => {
|
|
|
37
37
|
|
|
38
38
|
describe('sendRoapMediaRequest', () => {
|
|
39
39
|
let sendRoapStub;
|
|
40
|
-
let
|
|
41
|
-
|
|
42
|
-
const meeting = {
|
|
43
|
-
id: 'some meeting id',
|
|
44
|
-
correlationId: 'correlation id',
|
|
45
|
-
selfUrl: 'self url',
|
|
46
|
-
mediaId: 'media id',
|
|
47
|
-
isAudioMuted: () => true,
|
|
48
|
-
isVideoMuted: () => false,
|
|
49
|
-
setRoapSeq: sinon.stub(),
|
|
50
|
-
config: {experimental: {enableTurnDiscovery: false}},
|
|
51
|
-
};
|
|
40
|
+
let meeting;
|
|
52
41
|
|
|
53
42
|
beforeEach(() => {
|
|
43
|
+
meeting = {
|
|
44
|
+
id: 'some meeting id',
|
|
45
|
+
correlationId: 'correlation id',
|
|
46
|
+
selfUrl: 'self url',
|
|
47
|
+
mediaId: 'media id',
|
|
48
|
+
isMultistream: false,
|
|
49
|
+
isAudioMuted: () => true,
|
|
50
|
+
isVideoMuted: () => false,
|
|
51
|
+
setRoapSeq: sinon.stub(),
|
|
52
|
+
config: {experimental: {enableTurnDiscovery: false}},
|
|
53
|
+
};
|
|
54
|
+
|
|
54
55
|
sendRoapStub = sinon.stub(RoapRequest.prototype, 'sendRoap').resolves({});
|
|
55
|
-
roapHandlerSubmitStub = sinon.stub(RoapHandler.prototype, 'submit');
|
|
56
56
|
meeting.setRoapSeq.resetHistory();
|
|
57
57
|
});
|
|
58
58
|
|
|
@@ -66,13 +66,21 @@ describe('Roap', () => {
|
|
|
66
66
|
{reconnect: false, enableTurnDiscovery: true, expectEmptyMediaId: false},
|
|
67
67
|
{reconnect: false, enableTurnDiscovery: false, expectEmptyMediaId: false},
|
|
68
68
|
].forEach(({reconnect, enableTurnDiscovery, expectEmptyMediaId}) =>
|
|
69
|
-
it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
|
|
69
|
+
it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
|
|
70
|
+
reconnect ? '' : 'not '
|
|
71
|
+
}reconnecting and TURN discovery is ${
|
|
72
|
+
enableTurnDiscovery ? 'enabled' : 'disabled'
|
|
73
|
+
}`, async () => {
|
|
70
74
|
meeting.config.experimental.enableTurnDiscovery = enableTurnDiscovery;
|
|
71
75
|
|
|
72
76
|
const roap = new Roap({}, {parent: 'fake'});
|
|
73
77
|
|
|
74
78
|
await roap.sendRoapMediaRequest({
|
|
75
|
-
meeting,
|
|
79
|
+
meeting,
|
|
80
|
+
sdp: 'sdp',
|
|
81
|
+
reconnect,
|
|
82
|
+
seq: 2,
|
|
83
|
+
tieBreaker: 4294967294,
|
|
76
84
|
});
|
|
77
85
|
|
|
78
86
|
const expectedRoapMessage = {
|
|
@@ -80,7 +88,7 @@ describe('Roap', () => {
|
|
|
80
88
|
sdps: ['sdp'],
|
|
81
89
|
version: '2',
|
|
82
90
|
seq: 2,
|
|
83
|
-
tieBreaker: 4294967294
|
|
91
|
+
tieBreaker: 4294967294,
|
|
84
92
|
};
|
|
85
93
|
|
|
86
94
|
assert.calledOnce(sendRoapStub);
|
|
@@ -91,23 +99,43 @@ describe('Roap', () => {
|
|
|
91
99
|
mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
|
|
92
100
|
audioMuted: meeting.isAudioMuted(),
|
|
93
101
|
videoMuted: meeting.isVideoMuted(),
|
|
94
|
-
meetingId: meeting.id
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
assert.calledTwice(roapHandlerSubmitStub);
|
|
98
|
-
assert.calledWith(roapHandlerSubmitStub, {
|
|
99
|
-
type: ROAP.SEND_ROAP_MSG,
|
|
100
|
-
msg: expectedRoapMessage,
|
|
101
|
-
correlationId: meeting.correlationId
|
|
102
|
-
});
|
|
103
|
-
assert.calledWith(roapHandlerSubmitStub, {
|
|
104
|
-
type: ROAP.SEND_ROAP_MSG_SUCCESS,
|
|
105
|
-
seq: 2,
|
|
106
|
-
correlationId: meeting.correlationId
|
|
102
|
+
meetingId: meeting.id,
|
|
103
|
+
preferTranscoding: true,
|
|
107
104
|
});
|
|
105
|
+
})
|
|
106
|
+
);
|
|
107
|
+
it('sends roap request with preferTranscoding=false for multistream meetings', async () => {
|
|
108
|
+
const roap = new Roap({}, {parent: 'fake'});
|
|
108
109
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
meeting.isMultistream = true;
|
|
111
|
+
|
|
112
|
+
await roap.sendRoapMediaRequest({
|
|
113
|
+
meeting,
|
|
114
|
+
sdp: 'sdp',
|
|
115
|
+
reconnect: false,
|
|
116
|
+
seq: 10,
|
|
117
|
+
tieBreaker: 1,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const expectedRoapMessage = {
|
|
121
|
+
messageType: 'OFFER',
|
|
122
|
+
sdps: ['sdp'],
|
|
123
|
+
version: '2',
|
|
124
|
+
seq: 10,
|
|
125
|
+
tieBreaker: 1,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
assert.calledOnce(sendRoapStub);
|
|
129
|
+
assert.calledWith(sendRoapStub, {
|
|
130
|
+
roapMessage: expectedRoapMessage,
|
|
131
|
+
correlationId: meeting.correlationId,
|
|
132
|
+
locusSelfUrl: meeting.selfUrl,
|
|
133
|
+
mediaId: meeting.mediaId,
|
|
134
|
+
audioMuted: meeting.isAudioMuted(),
|
|
135
|
+
videoMuted: meeting.isVideoMuted(),
|
|
136
|
+
meetingId: meeting.id,
|
|
137
|
+
preferTranscoding: false,
|
|
138
|
+
});
|
|
139
|
+
});
|
|
112
140
|
});
|
|
113
141
|
});
|
|
@@ -2,6 +2,7 @@ import 'jsdom-global/register';
|
|
|
2
2
|
import chai from 'chai';
|
|
3
3
|
import chaiAsPromised from 'chai-as-promised';
|
|
4
4
|
import sinon from 'sinon';
|
|
5
|
+
import {MediaConnection as MC} from '@webex/internal-media-core';
|
|
5
6
|
|
|
6
7
|
import {StatsAnalyzer, EVENTS} from '../../../../src/statsAnalyzer';
|
|
7
8
|
import NetworkQualityMonitor from '../../../../src/networkQualityMonitor';
|
|
@@ -130,30 +131,26 @@ describe('plugin-meetings', () => {
|
|
|
130
131
|
};
|
|
131
132
|
|
|
132
133
|
pc = {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
},
|
|
141
|
-
videoTransceiver: {
|
|
142
|
-
sender: {
|
|
143
|
-
getStats: sinon.stub().resolves([fakeStats.video.sender])
|
|
144
|
-
},
|
|
145
|
-
receiver: {
|
|
146
|
-
getStats: sinon.stub().resolves([fakeStats.video.receiver])
|
|
134
|
+
getConnectionState: sinon.stub().returns(MC.ConnectionState.Connected),
|
|
135
|
+
getTransceiverStats: sinon.stub().resolves({
|
|
136
|
+
audio: {
|
|
137
|
+
sender: [fakeStats.audio.sender],
|
|
138
|
+
receiver: [fakeStats.audio.receiver],
|
|
139
|
+
currentDirection: 'sendrecv',
|
|
140
|
+
localTrackLabel: 'fake mic',
|
|
147
141
|
},
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
142
|
+
video: {
|
|
143
|
+
sender: [fakeStats.video.sender],
|
|
144
|
+
receiver: [fakeStats.video.receiver],
|
|
145
|
+
currentDirection: 'sendrecv',
|
|
146
|
+
localTrackLabel: 'fake camera',
|
|
152
147
|
},
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
148
|
+
screenShareVideo: {
|
|
149
|
+
sender: [],
|
|
150
|
+
receiver: [],
|
|
151
|
+
currentDirection: 'sendrecv'
|
|
152
|
+
}
|
|
153
|
+
})
|
|
157
154
|
};
|
|
158
155
|
|
|
159
156
|
networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
|