Browse Source

fix(quality-control) Fix receiver constraints for default case.

When the application doesn't set receiver constraints, generate default constraints in the source-name mode.
Cleanup code related to the endpoint based video constraint handling for p2p connection.
dev1
Jaya Allamsetty 2 years ago
parent
commit
2028cce309

+ 35
- 139
modules/qualitycontrol/ReceiveVideoController.js View File

@@ -5,8 +5,7 @@ import * as JitsiConferenceEvents from '../../JitsiConferenceEvents';
5 5
 import { MediaType } from '../../service/RTC/MediaType';
6 6
 
7 7
 const logger = getLogger(__filename);
8
-const MAX_HEIGHT_ONSTAGE = 2160;
9
-const MAX_HEIGHT_THUMBNAIL = 180;
8
+const MAX_HEIGHT = 2160;
10 9
 const LASTN_UNLIMITED = -1;
11 10
 
12 11
 /**
@@ -16,75 +15,35 @@ const LASTN_UNLIMITED = -1;
16 15
 class ReceiverVideoConstraints {
17 16
     /**
18 17
      * Creates a new instance.
18
+     *
19
+     * @param {number} lastN - Number of videos to be requested from the bridge.
19 20
      */
20
-    constructor() {
21
-        // Default constraints used for endpoints that are not explicitly included in constraints.
22
-        // These constraints are used for endpoints that are thumbnails in the stage view.
23
-        this._defaultConstraints = { 'maxHeight': MAX_HEIGHT_THUMBNAIL };
24
-
21
+    constructor(lastN) {
25 22
         // The number of videos requested from the bridge.
26
-        this._lastN = LASTN_UNLIMITED;
27
-
28
-        // The number representing the maximum video height the local client should receive from the bridge.
29
-        this._maxFrameHeight = MAX_HEIGHT_ONSTAGE;
23
+        this._lastN = lastN ?? LASTN_UNLIMITED;
30 24
 
31
-        // The endpoint IDs of the participants that are currently selected.
32
-        this._selectedEndpoints = [];
25
+        // The number representing the maximum video height the local client should receive from the bridge/peer.
26
+        this._maxFrameHeight = MAX_HEIGHT;
33 27
 
34 28
         this._receiverVideoConstraints = {
35 29
             constraints: {},
36
-            defaultConstraints: this.defaultConstraints,
37
-            lastN: this._lastN,
38
-            onStageEndpoints: [],
39
-            selectedEndpoints: this._selectedEndpoints
30
+            defaultConstraints: { 'maxHeight': this._maxFrameHeight },
31
+            lastN: this._lastN
40 32
         };
41 33
     }
42 34
 
43 35
     /**
44
-     * Returns the receiver video constraints that need to be sent on the bridge channel.
36
+     * Returns the receiver video constraints that need to be sent on the bridge channel or to the remote peer.
45 37
      */
46 38
     get constraints() {
47 39
         this._receiverVideoConstraints.lastN = this._lastN;
48
-
49
-        if (!this._selectedEndpoints.length) {
50
-            return this._receiverVideoConstraints;
51
-        }
52
-
53
-        // The client is assumed to be in TileView if it has selected more than one endpoint, otherwise it is
54
-        // assumed to be in StageView.
55
-        this._receiverVideoConstraints.constraints = {};
56
-        if (this._selectedEndpoints.length > 1) {
57
-            /**
58
-             * Tile view.
59
-             * Only the default constraints are specified here along with lastN (if it is set).
60
-             * {
61
-             *  'colibriClass': 'ReceiverVideoConstraints',
62
-             *  'defaultConstraints': { 'maxHeight': 360 }
63
-             * }
64
-             */
65
-            this._receiverVideoConstraints.defaultConstraints = { 'maxHeight': this._maxFrameHeight };
66
-            this._receiverVideoConstraints.onStageEndpoints = [];
67
-            this._receiverVideoConstraints.selectedEndpoints = [];
40
+        if (Object.keys(this._receiverVideoConstraints.constraints)?.length) {
41
+            /* eslint-disable no-unused-vars */
42
+            for (const [ key, value ] of Object.entries(this._receiverVideoConstraints.constraints)) {
43
+                value.maxHeight = this._maxFrameHeight;
44
+            }
68 45
         } else {
69
-            /**
70
-             * Stage view.
71
-             * The participant on stage is specified in onStageEndpoints and a higher maxHeight is specified
72
-             * for that endpoint while a default maxHeight of 180 is applied to all the other endpoints.
73
-             * {
74
-             *  'colibriClass': 'ReceiverVideoConstraints',
75
-             *  'onStageEndpoints': ['A'],
76
-             *  'defaultConstraints': { 'maxHeight':  180 },
77
-             *  'constraints': {
78
-             *      'A': { 'maxHeight': 720 }
79
-             *   }
80
-             * }
81
-             */
82
-            this._receiverVideoConstraints.constraints[this._selectedEndpoints[0]] = {
83
-                'maxHeight': this._maxFrameHeight
84
-            };
85
-            this._receiverVideoConstraints.defaultConstraints = this._defaultConstraints;
86
-            this._receiverVideoConstraints.onStageEndpoints = this._selectedEndpoints;
87
-            this._receiverVideoConstraints.selectedEndpoints = [];
46
+            this._receiverVideoConstraints.defaultConstraints = { 'maxHeight': this._maxFrameHeight };
88 47
         }
89 48
 
90 49
         return this._receiverVideoConstraints;
@@ -141,17 +100,6 @@ class ReceiverVideoConstraints {
141 100
 
142 101
         return changed;
143 102
     }
144
-
145
-    /**
146
-     * Updates the list of selected endpoints.
147
-     *
148
-     * @param {Array<string>} ids
149
-     * @returns {void}
150
-     */
151
-    updateSelectedEndpoints(ids) {
152
-        logger.debug(`Updating selected endpoints: ${JSON.stringify(ids)}`);
153
-        this._selectedEndpoints = ids;
154
-    }
155 103
 }
156 104
 
157 105
 /**
@@ -170,37 +118,23 @@ export default class ReceiveVideoController {
170 118
     constructor(conference, rtc) {
171 119
         this._conference = conference;
172 120
         this._rtc = rtc;
173
-
174 121
         const { config } = conference.options;
175 122
 
176 123
         // The number of videos requested from the bridge, -1 represents unlimited or all available videos.
177 124
         this._lastN = config?.startLastN ?? (config?.channelLastN || LASTN_UNLIMITED);
178 125
 
179 126
         // The number representing the maximum video height the local client should receive from the bridge.
180
-        this._maxFrameHeight = MAX_HEIGHT_ONSTAGE;
127
+        this._maxFrameHeight = MAX_HEIGHT;
181 128
 
182 129
         /**
183
-         * The map that holds the max frame height requested for each remote source when source-name signaling is
184
-         * enabled.
130
+         * The map that holds the max frame height requested per remote source for p2p connection.
185 131
          *
186 132
          * @type Map<string, number>
187 133
          */
188 134
         this._sourceReceiverConstraints = new Map();
189 135
 
190
-        // Enable new receiver constraints by default unless it is explicitly disabled through config.js.
191
-        const useNewReceiverConstraints = config?.useNewBandwidthAllocationStrategy ?? true;
192
-
193
-        if (useNewReceiverConstraints) {
194
-            this._receiverVideoConstraints = new ReceiverVideoConstraints();
195
-            const lastNUpdated = this._receiverVideoConstraints.updateLastN(this._lastN);
196
-
197
-            lastNUpdated && this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints);
198
-        } else {
199
-            this._rtc.setLastN(this._lastN);
200
-        }
201
-
202
-        // The endpoint IDs of the participants that are currently selected.
203
-        this._selectedEndpoints = [];
136
+        // The default receiver video constraints.
137
+        this._receiverVideoConstraints = new ReceiverVideoConstraints(this._lastN);
204 138
 
205 139
         this._conference.on(
206 140
             JitsiConferenceEvents._MEDIA_SESSION_STARTED,
@@ -210,15 +144,17 @@ export default class ReceiveVideoController {
210 144
     /**
211 145
      * Returns a map of all the remote source names and the corresponding max frame heights.
212 146
      *
213
-     * @param {number} maxFrameHeight
147
+     * @param {JingleSessionPC} mediaSession - the media session.
148
+     * @param {number} maxFrameHeight - the height to be requested for remote sources.
214 149
      * @returns
215 150
      */
216 151
     _getDefaultSourceReceiverConstraints(mediaSession, maxFrameHeight) {
152
+        const height = maxFrameHeight ?? MAX_HEIGHT;
217 153
         const remoteVideoTracks = mediaSession.peerconnection?.getRemoteTracks(null, MediaType.VIDEO) || [];
218 154
         const receiverConstraints = new Map();
219 155
 
220 156
         for (const track of remoteVideoTracks) {
221
-            receiverConstraints.set(track.getSourceName(), maxFrameHeight);
157
+            receiverConstraints.set(track.getSourceName(), height);
222 158
         }
223 159
 
224 160
         return receiverConstraints;
@@ -233,10 +169,9 @@ export default class ReceiveVideoController {
233 169
      * @private
234 170
      */
235 171
     _onMediaSessionStarted(mediaSession) {
236
-        if (mediaSession.isP2P || !this._receiverVideoConstraints) {
237
-            mediaSession.setReceiverVideoConstraint(this._maxFrameHeight, this._sourceReceiverConstraints);
172
+        if (mediaSession.isP2P) {
173
+            mediaSession.setReceiverVideoConstraint(this._getDefaultSourceReceiverConstraints(mediaSession));
238 174
         } else {
239
-            this._receiverVideoConstraints.updateReceiveResolution(this._maxFrameHeight);
240 175
             this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints);
241 176
         }
242 177
     }
@@ -250,34 +185,6 @@ export default class ReceiveVideoController {
250 185
         return this._lastN;
251 186
     }
252 187
 
253
-    /**
254
-     * Elects the participants with the given ids to be the selected participants in order to always receive video
255
-     * for this participant (even when last n is enabled).
256
-     *
257
-     * @param {Array<string>} ids - The user ids.
258
-     * @returns {void}
259
-     */
260
-    selectEndpoints(ids) {
261
-        this._selectedEndpoints = ids;
262
-
263
-        if (this._receiverVideoConstraints) {
264
-            // Filter out the local endpointId from the list of selected endpoints.
265
-            const remoteEndpointIds = ids.filter(id => id !== this._conference.myUserId());
266
-            const oldConstraints = JSON.parse(JSON.stringify(this._receiverVideoConstraints.constraints));
267
-
268
-            remoteEndpointIds.length && this._receiverVideoConstraints.updateSelectedEndpoints(remoteEndpointIds);
269
-            const newConstraints = this._receiverVideoConstraints.constraints;
270
-
271
-            // Send bridge message only when the constraints change.
272
-            if (!isEqual(newConstraints, oldConstraints)) {
273
-                this._rtc.setReceiverVideoConstraints(newConstraints);
274
-            }
275
-
276
-            return;
277
-        }
278
-        this._rtc.selectEndpoints(ids);
279
-    }
280
-
281 188
     /**
282 189
      * Selects a new value for "lastN". The requested amount of videos are going to be delivered after the value is
283 190
      * in effect. Set to -1 for unlimited or all available videos.
@@ -288,16 +195,9 @@ export default class ReceiveVideoController {
288 195
     setLastN(value) {
289 196
         if (this._lastN !== value) {
290 197
             this._lastN = value;
291
-
292
-            if (this._receiverVideoConstraints) {
293
-                const lastNUpdated = this._receiverVideoConstraints.updateLastN(value);
294
-
295
-                // Send out the message on the bridge channel if lastN was updated.
296
-                lastNUpdated && this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints);
297
-
298
-                return;
198
+            if (this._receiverVideoConstraints.updateLastN(value)) {
199
+                this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints);
299 200
             }
300
-            this._rtc.setLastN(value);
301 201
         }
302 202
     }
303 203
 
@@ -311,15 +211,10 @@ export default class ReceiveVideoController {
311 211
         this._maxFrameHeight = maxFrameHeight;
312 212
 
313 213
         for (const session of this._conference.getMediaSessions()) {
314
-            if (session.isP2P || !this._receiverVideoConstraints) {
315
-                session.setReceiverVideoConstraint(
316
-                    maxFrameHeight,
317
-                    this._getDefaultSourceReceiverConstraints(this._maxFrameHeight));
318
-            } else {
319
-                const resolutionUpdated = this._receiverVideoConstraints.updateReceiveResolution(maxFrameHeight);
320
-
321
-                resolutionUpdated
322
-                    && this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints);
214
+            if (session.isP2P) {
215
+                session.setReceiverVideoConstraint(this._getDefaultSourceReceiverConstraints(session, maxFrameHeight));
216
+            } else if (this._receiverVideoConstraints.updateReceiveResolution(maxFrameHeight)) {
217
+                this._rtc.setReceiverVideoConstraints(this._receiverVideoConstraints.constraints);
323 218
             }
324 219
         }
325 220
     }
@@ -344,7 +239,8 @@ export default class ReceiveVideoController {
344 239
 
345 240
         if (constraintsChanged) {
346 241
             this._lastN = constraints.lastN ?? this._lastN;
347
-            this._selectedEndpoints = constraints.selectedEndpoints ?? this._selectedEndpoints;
242
+
243
+            // Send the contraints on the bridge channel.
348 244
             this._rtc.setReceiverVideoConstraints(constraints);
349 245
 
350 246
             const p2pSession = this._conference.getMediaSessions().find(session => session.isP2P);
@@ -363,7 +259,7 @@ export default class ReceiveVideoController {
363 259
             this._sourceReceiverConstraints = new Map(mappedConstraints);
364 260
 
365 261
             // Send the receiver constraints to the peer through a "content-modify" message.
366
-            p2pSession.setReceiverVideoConstraint(null, this._sourceReceiverConstraints);
262
+            p2pSession.setReceiverVideoConstraint(this._sourceReceiverConstraints);
367 263
         }
368 264
     }
369 265
 }

+ 6
- 49
modules/xmpp/JingleSessionPC.js View File

@@ -135,18 +135,6 @@ export default class JingleSessionPC extends JingleSession {
135 135
         return null;
136 136
     }
137 137
 
138
-    /**
139
-     * Parses the video max frame height value out of the 'content-modify' IQ.
140
-     *
141
-     * @param {jQuery} jingleContents - A jQuery selector pointing to the '>jingle' element.
142
-     * @returns {Number|null}
143
-     */
144
-    static parseMaxFrameHeight(jingleContents) {
145
-        const maxFrameHeightSel = jingleContents.find('>content[name="video"]>max-frame-height');
146
-
147
-        return maxFrameHeightSel.length ? Number(maxFrameHeightSel.text()) : null;
148
-    }
149
-
150 138
     /**
151 139
      * Parses the source-name and max frame height value of the 'content-modify' IQ when source-name signaling
152 140
      * is enabled.
@@ -255,15 +243,7 @@ export default class JingleSessionPC extends JingleSession {
255 243
         this._gatheringStartedTimestamp = null;
256 244
 
257 245
         /**
258
-         * Local preference for the receive video max frame height.
259
-         *
260
-         * @type {Number|undefined}
261
-         */
262
-        this.localRecvMaxFrameHeight = undefined;
263
-
264
-        /**
265
-         * Receiver constraints (max height) set by the application per remote source. Will be used for p2p connection
266
-         * in lieu of localRecvMaxFrameHeight when source-name signaling is enabled.
246
+         * Receiver constraints (max height) set by the application per remote source. Will be used for p2p connection.
267 247
          *
268 248
          * @type {Map<string, number>}
269 249
          */
@@ -1237,9 +1217,7 @@ export default class JingleSessionPC extends JingleSession {
1237 1217
                         // up our SDP translation chain (simulcast, video mute, RTX etc.)
1238 1218
                         // #2 Sends the max frame height if it was set, before the session-initiate/accept
1239 1219
                         if (this.isP2P
1240
-                            && (!this._localVideoActive
1241
-                                || this.localRecvMaxFrameHeight
1242
-                                || this._sourceReceiverConstraints)) {
1220
+                            && (!this._localVideoActive || this._sourceReceiverConstraints)) {
1243 1221
                             this.sendContentModify();
1244 1222
                         }
1245 1223
                     }
@@ -1453,10 +1431,8 @@ export default class JingleSessionPC extends JingleSession {
1453 1431
      * @private
1454 1432
      */
1455 1433
     sendContentModify() {
1456
-        const maxFrameHeight = this.localRecvMaxFrameHeight;
1457 1434
         const senders = this._localVideoActive ? 'both' : 'none';
1458
-
1459
-        let sessionModify
1435
+        const sessionModify
1460 1436
             = $iq({
1461 1437
                 to: this.remoteJid,
1462 1438
                 type: 'set'
@@ -1472,14 +1448,6 @@ export default class JingleSessionPC extends JingleSession {
1472 1448
                     senders
1473 1449
                 });
1474 1450
 
1475
-        if (typeof maxFrameHeight !== 'undefined') {
1476
-            sessionModify = sessionModify
1477
-                .c('max-frame-height', { xmlns: 'http://jitsi.org/jitmeet/video' })
1478
-                .t(maxFrameHeight);
1479
-            logger.info(`${this} sending content-modify, video senders: ${senders},`
1480
-                + ` max frame height: ${maxFrameHeight}`);
1481
-        }
1482
-
1483 1451
         if (typeof this._sourceReceiverConstraints !== 'undefined') {
1484 1452
             this._sourceReceiverConstraints.forEach((maxHeight, sourceName) => {
1485 1453
                 sessionModify
@@ -1505,15 +1473,12 @@ export default class JingleSessionPC extends JingleSession {
1505 1473
 
1506 1474
     /**
1507 1475
      * Adjust the preference for max video frame height that the local party is willing to receive. Signals
1508
-     * the remote party.
1476
+     * the remote p2p peer.
1509 1477
      *
1510
-     * @param {Number} maxFrameHeight - the new value to set.
1511 1478
      * @param {Map<string, number>} sourceReceiverConstraints - The receiver constraints per source.
1512 1479
      */
1513
-    setReceiverVideoConstraint(maxFrameHeight, sourceReceiverConstraints) {
1514
-        logger.info(`${this} setReceiverVideoConstraint - max frame height: ${maxFrameHeight}`
1515
-            + ` sourceReceiverConstraints: ${sourceReceiverConstraints}`);
1516
-
1480
+    setReceiverVideoConstraint(sourceReceiverConstraints) {
1481
+        logger.info(`${this} setReceiverVideoConstraint - constraints: ${JSON.stringify(sourceReceiverConstraints)}`);
1517 1482
         this._sourceReceiverConstraints = sourceReceiverConstraints;
1518 1483
 
1519 1484
         if (this.isP2P) {
@@ -2735,16 +2700,8 @@ export default class JingleSessionPC extends JingleSession {
2735 2700
      */
2736 2701
     modifyContents(jingleContents) {
2737 2702
         const newVideoSenders = JingleSessionPC.parseVideoSenders(jingleContents);
2738
-        const newMaxFrameHeight = JingleSessionPC.parseMaxFrameHeight(jingleContents);
2739 2703
         const sourceMaxFrameHeights = JingleSessionPC.parseSourceMaxFrameHeight(jingleContents);
2740 2704
 
2741
-        // frame height is optional in our content-modify protocol
2742
-        if (newMaxFrameHeight) {
2743
-            logger.info(`${this} received remote max frame height: ${newMaxFrameHeight}`);
2744
-            this.remoteRecvMaxFrameHeight = newMaxFrameHeight;
2745
-            this.eventEmitter.emit(MediaSessionEvents.REMOTE_VIDEO_CONSTRAINTS_CHANGED, this);
2746
-        }
2747
-
2748 2705
         if (sourceMaxFrameHeights) {
2749 2706
             this.remoteSourceMaxFrameHeights = sourceMaxFrameHeights;
2750 2707
             this.eventEmitter.emit(MediaSessionEvents.REMOTE_SOURCE_CONSTRAINTS_CHANGED, this, sourceMaxFrameHeights);

+ 1
- 1
modules/xmpp/JingleSessionPC.spec.js View File

@@ -75,7 +75,7 @@ describe('JingleSessionPC', () => {
75 75
             sourceConstraints.set('8d519815-v0', 180);
76 76
             sourceConstraints.set('8d519815-v1', 2160);
77 77
 
78
-            jingleSession.setReceiverVideoConstraint(null, sourceConstraints);
78
+            jingleSession.setReceiverVideoConstraint(sourceConstraints);
79 79
 
80 80
             expect(jingleSession.getState()).toBe(JingleSessionState.PENDING);
81 81
 

+ 0
- 2
modules/xmpp/MediaSessionEvents.spec.ts View File

@@ -5,13 +5,11 @@ import { default as exported } from "./MediaSessionEvents";
5 5
 describe( "/modules/xmpp/MediaSessionEvents members", () => {
6 6
     const {
7 7
         REMOTE_SOURCE_CONSTRAINTS_CHANGED,
8
-        REMOTE_VIDEO_CONSTRAINTS_CHANGED,
9 8
         ...others
10 9
     } = exported;
11 10
 
12 11
     it( "known members", () => {
13 12
         expect( REMOTE_SOURCE_CONSTRAINTS_CHANGED ).toBe( 'media_session.REMOTE_SOURCE_CONSTRAINTS_CHANGED' );
14
-        expect( REMOTE_VIDEO_CONSTRAINTS_CHANGED ).toBe( 'media_session.REMOTE_VIDEO_CONSTRAINTS_CHANGED' );
15 13
     } );
16 14
 
17 15
     it( "unknown members", () => {

+ 1
- 6
modules/xmpp/MediaSessionEvents.ts View File

@@ -2,12 +2,7 @@ enum MediaSessionEvents {
2 2
     /**
3 3
      * Event triggered when the remote party signals video max frame heights for its local sources.
4 4
      */
5
-    REMOTE_SOURCE_CONSTRAINTS_CHANGED = 'media_session.REMOTE_SOURCE_CONSTRAINTS_CHANGED',
6
-
7
-    /**
8
-     * Event triggered when the remote party signals it's receive video max frame height.
9
-     */
10
-    REMOTE_VIDEO_CONSTRAINTS_CHANGED = 'media_session.REMOTE_VIDEO_CONSTRAINTS_CHANGED'
5
+    REMOTE_SOURCE_CONSTRAINTS_CHANGED = 'media_session.REMOTE_SOURCE_CONSTRAINTS_CHANGED'
11 6
 };
12 7
 
13 8
 export default MediaSessionEvents;

+ 1
- 3
modules/xmpp/strophe.jingle.js View File

@@ -232,9 +232,7 @@ export default class JingleConnectionPlugin extends ConnectionPlugin {
232 232
             break;
233 233
         }
234 234
         case 'content-modify': {
235
-            const height = $(iq).find('jingle>content[name="video"]>max-frame-height');
236
-
237
-            logger.debug(`Received ${action} from ${fromJid} with a max-frame-height=${height?.text()}`);
235
+            logger.debug(`Received ${action} from ${fromJid}`);
238 236
             sess.modifyContents($(iq).find('>jingle'));
239 237
             break;
240 238
         }

+ 0
- 3
types/hand-crafted/modules/qualitycontrol/ReceiveVideoController.d.ts View File

@@ -6,14 +6,11 @@ export class ReceiverVideoConstraints {
6 6
   updateLastN: ( value: number ) => boolean;
7 7
   updateReceiveResolution: ( maxFrameHeight: number ) => boolean;
8 8
   updateReceiverVideoConstraints: ( videoConstraints: ReceiverVideoConstraints ) => boolean; // TODO:
9
-  updateSelectedEndpoints: ( ids: unknown ) => void; // TODO:
10 9
 }
11 10
 
12 11
 export class ReceiveVideoController {
13 12
   constructor( conference: JitsiConference, rtc: RTC );
14 13
   getLastN: () => number;
15
-  selectEndpoints: ( ids: unknown ) => unknown; // TODO:
16 14
   setLastN: ( value: number ) => void;
17
-  setPreferredReceiveMaxFrameHeight: ( maxFrameHeight: number ) => void;
18 15
   setReceiverConstraints: ( constraints: ReceiverVideoConstraints ) => void;
19 16
 }

+ 0
- 1
types/hand-crafted/modules/xmpp/JingleSessionPC.d.ts View File

@@ -6,7 +6,6 @@ import JitsiRemoteTrack from '../RTC/JitsiRemoteTrack';
6 6
 
7 7
 export default class JingleSessionPC extends JingleSession {
8 8
   static parseVideoSenders: ( jingleContents: JQuery ) => string | null;
9
-  static parseMaxFrameHeight: ( jingleContents: JQuery ) => number | null;
10 9
   constructor( sid: string, localJid: string, remoteJid: string, connection: XmppConnection, mediaConstraints: unknown, iceConfig: unknown, isP2P: boolean, isInitiator: boolean ); // TODO:
11 10
   doInitialize: ( options: {} ) => void;
12 11
   getRemoteRecvMaxFrameHeight: () => number | undefined;

+ 1
- 1
types/hand-crafted/modules/xmpp/MediaSessionEvents.d.ts View File

@@ -1,3 +1,3 @@
1 1
 export enum MediaSessionEvents {
2
-  REMOTE_VIDEO_CONSTRAINTS_CHANGED = 'media_session.REMOTE_VIDEO_CONSTRAINTS_CHANGED'
2
+  REMOTE_SOURCE_CONSTRAINTS_CHANGED = 'media_session.REMOTE_SOURCE_CONSTRAINTS_CHANGED'
3 3
 }

Loading…
Cancel
Save