Selaa lähdekoodia

feat(video-quality):control sender resolution based on user pref

j8
Jaya Allamsetty 5 vuotta sitten
vanhempi
commit
b5676c3729

+ 2
- 2
package-lock.json Näytä tiedosto

@@ -10884,8 +10884,8 @@
10884 10884
       }
10885 10885
     },
10886 10886
     "lib-jitsi-meet": {
10887
-      "version": "github:jitsi/lib-jitsi-meet#f97c37d0140a0f12644ae29f4dd93757b8b8610f",
10888
-      "from": "github:jitsi/lib-jitsi-meet#f97c37d0140a0f12644ae29f4dd93757b8b8610f",
10887
+      "version": "github:jitsi/lib-jitsi-meet#47b292e332e6c6e13de74f17540a0e6a6a80e165",
10888
+      "from": "github:jitsi/lib-jitsi-meet#47b292e332e6c6e13de74f17540a0e6a6a80e165",
10889 10889
       "requires": {
10890 10890
         "@jitsi/sdp-interop": "1.0.2",
10891 10891
         "@jitsi/sdp-simulcast": "0.3.0",

+ 1
- 1
package.json Näytä tiedosto

@@ -56,7 +56,7 @@
56 56
     "js-utils": "github:jitsi/js-utils#df68966e3c65b5c57fcd2670da1326a2c77518d1",
57 57
     "jsrsasign": "8.0.12",
58 58
     "jwt-decode": "2.2.0",
59
-    "lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#f97c37d0140a0f12644ae29f4dd93757b8b8610f",
59
+    "lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#47b292e332e6c6e13de74f17540a0e6a6a80e165",
60 60
     "libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
61 61
     "lodash": "4.17.13",
62 62
     "moment": "2.19.4",

+ 4
- 5
react/features/base/conference/actionTypes.js Näytä tiedosto

@@ -212,15 +212,14 @@ export const SET_PENDING_SUBJECT_CHANGE = 'SET_PENDING_SUBJECT_CHANGE';
212 212
 
213 213
 /**
214 214
  * The type of (redux) action which sets the preferred maximum video height that
215
- * should be received from remote participants.
215
+ * should be sent to and received from remote participants.
216 216
  *
217 217
  * {
218
- *     type: SET_PREFERRED_RECEIVER_VIDEO_QUALITY,
219
- *     preferredReceiverVideoQuality: number
218
+ *     type: SET_PREFERRED_VIDEO_QUALITY,
219
+ *     preferredVideoQuality: number
220 220
  * }
221 221
  */
222
-export const SET_PREFERRED_RECEIVER_VIDEO_QUALITY
223
-    = 'SET_PREFERRED_RECEIVER_VIDEO_QUALITY';
222
+export const SET_PREFERRED_VIDEO_QUALITY = 'SET_PREFERRED_VIDEO_QUALITY';
224 223
 
225 224
 /**
226 225
  * The type of (redux) action which sets the name of the room of the

+ 9
- 10
react/features/base/conference/actions.js Näytä tiedosto

@@ -48,7 +48,7 @@ import {
48 48
     SET_MAX_RECEIVER_VIDEO_QUALITY,
49 49
     SET_PASSWORD,
50 50
     SET_PASSWORD_FAILED,
51
-    SET_PREFERRED_RECEIVER_VIDEO_QUALITY,
51
+    SET_PREFERRED_VIDEO_QUALITY,
52 52
     SET_ROOM,
53 53
     SET_PENDING_SUBJECT_CHANGE,
54 54
     SET_START_MUTED_POLICY
@@ -699,21 +699,20 @@ export function setPassword(
699 699
 }
700 700
 
701 701
 /**
702
- * Sets the max frame height the user prefers to receive from remote participant
703
- * videos.
702
+ * Sets the max frame height the user prefers to send and receive from the
703
+ * remote participants.
704 704
  *
705
- * @param {number} preferredReceiverVideoQuality - The max video resolution to
705
+ * @param {number} preferredVideoQuality - The max video resolution to send and
706 706
  * receive.
707 707
  * @returns {{
708
- *     type: SET_PREFERRED_RECEIVER_VIDEO_QUALITY,
709
- *     preferredReceiverVideoQuality: number
708
+ *     type: SET_PREFERRED_VIDEO_QUALITY,
709
+ *     preferredVideoQuality: number
710 710
  * }}
711 711
  */
712
-export function setPreferredReceiverVideoQuality(
713
-        preferredReceiverVideoQuality: number) {
712
+export function setPreferredVideoQuality(preferredVideoQuality: number) {
714 713
     return {
715
-        type: SET_PREFERRED_RECEIVER_VIDEO_QUALITY,
716
-        preferredReceiverVideoQuality
714
+        type: SET_PREFERRED_VIDEO_QUALITY,
715
+        preferredVideoQuality
717 716
     };
718 717
 }
719 718
 

+ 26
- 5
react/features/base/conference/middleware.js Näytä tiedosto

@@ -114,14 +114,17 @@ StateListenerRegistry.register(
114 114
         const {
115 115
             conference,
116 116
             maxReceiverVideoQuality,
117
-            preferredReceiverVideoQuality
117
+            preferredVideoQuality
118 118
         } = currentState;
119 119
         const changedPreferredVideoQuality
120
-            = preferredReceiverVideoQuality !== previousState.preferredReceiverVideoQuality;
120
+            = preferredVideoQuality !== previousState.preferredVideoQuality;
121 121
         const changedMaxVideoQuality = maxReceiverVideoQuality !== previousState.maxReceiverVideoQuality;
122 122
 
123 123
         if (changedPreferredVideoQuality || changedMaxVideoQuality) {
124
-            _setReceiverVideoConstraint(conference, preferredReceiverVideoQuality, maxReceiverVideoQuality);
124
+            _setReceiverVideoConstraint(conference, preferredVideoQuality, maxReceiverVideoQuality);
125
+        }
126
+        if (changedPreferredVideoQuality) {
127
+            _setSenderVideoConstraint(conference, preferredVideoQuality);
125 128
         }
126 129
     });
127 130
 
@@ -433,6 +436,24 @@ function _setReceiverVideoConstraint(conference, preferred, max) {
433 436
     }
434 437
 }
435 438
 
439
+/**
440
+ * Helper function for updating the preferred sender video constraint, based
441
+ * on the user preference.
442
+ *
443
+ * @param {JitsiConference} conference - The JitsiConference instance for the
444
+ * current call.
445
+ * @param {number} preferred - The user preferred max frame height.
446
+ * @returns {void}
447
+ */
448
+function _setSenderVideoConstraint(conference, preferred) {
449
+    if (conference) {
450
+        conference.setSenderVideoConstraint(preferred)
451
+            .catch(err => {
452
+                logger.error(`Changing sender resolution to ${preferred} failed - ${err} `);
453
+            });
454
+    }
455
+}
456
+
436 457
 /**
437 458
  * Notifies the feature base/conference that the action
438 459
  * {@code SET_ROOM} is being dispatched within a specific
@@ -502,12 +523,12 @@ function _syncReceiveVideoQuality({ getState }, next, action) {
502 523
     const {
503 524
         conference,
504 525
         maxReceiverVideoQuality,
505
-        preferredReceiverVideoQuality
526
+        preferredVideoQuality
506 527
     } = getState()['features/base/conference'];
507 528
 
508 529
     _setReceiverVideoConstraint(
509 530
         conference,
510
-        preferredReceiverVideoQuality,
531
+        preferredVideoQuality,
511 532
         maxReceiverVideoQuality);
512 533
 
513 534
     return next(action);

+ 5
- 5
react/features/base/conference/reducer.js Näytä tiedosto

@@ -21,7 +21,7 @@ import {
21 21
     SET_MAX_RECEIVER_VIDEO_QUALITY,
22 22
     SET_PASSWORD,
23 23
     SET_PENDING_SUBJECT_CHANGE,
24
-    SET_PREFERRED_RECEIVER_VIDEO_QUALITY,
24
+    SET_PREFERRED_VIDEO_QUALITY,
25 25
     SET_ROOM,
26 26
     SET_SIP_GATEWAY_ENABLED,
27 27
     SET_START_MUTED_POLICY
@@ -38,7 +38,7 @@ const DEFAULT_STATE = {
38 38
     maxReceiverVideoQuality: VIDEO_QUALITY_LEVELS.HIGH,
39 39
     password: undefined,
40 40
     passwordRequired: undefined,
41
-    preferredReceiverVideoQuality: VIDEO_QUALITY_LEVELS.HIGH
41
+    preferredVideoQuality: VIDEO_QUALITY_LEVELS.HIGH
42 42
 };
43 43
 
44 44
 /**
@@ -101,11 +101,11 @@ ReducerRegistry.register(
101 101
         case SET_PENDING_SUBJECT_CHANGE:
102 102
             return set(state, 'pendingSubjectChange', action.subject);
103 103
 
104
-        case SET_PREFERRED_RECEIVER_VIDEO_QUALITY:
104
+        case SET_PREFERRED_VIDEO_QUALITY:
105 105
             return set(
106 106
                 state,
107
-                'preferredReceiverVideoQuality',
108
-                action.preferredReceiverVideoQuality);
107
+                'preferredVideoQuality',
108
+                action.preferredVideoQuality);
109 109
 
110 110
         case SET_ROOM:
111 111
             return _setRoom(state, action);

+ 2
- 2
react/features/conference/middleware.js Näytä tiedosto

@@ -7,7 +7,7 @@ import {
7 7
     VIDEO_QUALITY_LEVELS,
8 8
     conferenceLeft,
9 9
     getCurrentConference,
10
-    setPreferredReceiverVideoQuality
10
+    setPreferredVideoQuality
11 11
 } from '../base/conference';
12 12
 import { hideDialog, isDialogOpen } from '../base/dialog';
13 13
 import { setActiveModalId } from '../base/modal';
@@ -32,7 +32,7 @@ MiddlewareRegistry.register(store => next => action => {
32 32
         dispatch(setFilmstripEnabled(!reducedUI));
33 33
 
34 34
         dispatch(
35
-            setPreferredReceiverVideoQuality(
35
+            setPreferredVideoQuality(
36 36
                 reducedUI
37 37
                     ? VIDEO_QUALITY_LEVELS.LOW
38 38
                     : VIDEO_QUALITY_LEVELS.HIGH));

+ 7
- 8
react/features/video-quality/components/OverflowMenuVideoQualityItem.web.js Näytä tiedosto

@@ -38,9 +38,9 @@ type Props = {
38 38
 
39 39
     /**
40 40
      * The currently configured maximum quality resolution to be received from
41
-     * remote participants.
41
+     * and sent to remote participants.
42 42
      */
43
-    _receiverVideoQuality: number,
43
+    _videoQuality: number,
44 44
 
45 45
     /**
46 46
      * Callback to invoke when {@link OverflowMenuVideoQualityItem} is clicked.
@@ -68,10 +68,10 @@ class OverflowMenuVideoQualityItem extends Component<Props> {
68 68
      * @returns {ReactElement}
69 69
      */
70 70
     render() {
71
-        const { _audioOnly, _receiverVideoQuality } = this.props;
72
-        const icon = _audioOnly || !_receiverVideoQuality
71
+        const { _audioOnly, _videoQuality } = this.props;
72
+        const icon = _audioOnly || !_videoQuality
73 73
             ? IconVideoQualityAudioOnly
74
-            : VIDEO_QUALITY_TO_ICON[_receiverVideoQuality];
74
+            : VIDEO_QUALITY_TO_ICON[_videoQuality];
75 75
 
76 76
         return (
77 77
             <li
@@ -98,14 +98,13 @@ class OverflowMenuVideoQualityItem extends Component<Props> {
98 98
  * @private
99 99
  * @returns {{
100 100
  *     _audioOnly: boolean,
101
- *     _receiverVideoQuality: number
101
+ *     _videoQuality: number
102 102
  * }}
103 103
  */
104 104
 function _mapStateToProps(state) {
105 105
     return {
106 106
         _audioOnly: state['features/base/audio-only'].enabled,
107
-        _receiverVideoQuality:
108
-            state['features/base/conference'].preferredReceiverVideoQuality
107
+        _videoQuality: state['features/base/conference'].preferredVideoQuality
109 108
     };
110 109
 }
111 110
 

+ 12
- 12
react/features/video-quality/components/VideoQualitySlider.web.js Näytä tiedosto

@@ -6,7 +6,7 @@ import type { Dispatch } from 'redux';
6 6
 
7 7
 import { createToolbarEvent, sendAnalytics } from '../../analytics';
8 8
 import { setAudioOnly } from '../../base/audio-only';
9
-import { VIDEO_QUALITY_LEVELS, setPreferredReceiverVideoQuality } from '../../base/conference';
9
+import { VIDEO_QUALITY_LEVELS, setPreferredVideoQuality } from '../../base/conference';
10 10
 import { translate } from '../../base/i18n';
11 11
 import JitsiMeetJS from '../../base/lib-jitsi-meet';
12 12
 import { connect } from '../../base/redux';
@@ -51,10 +51,10 @@ type Props = {
51 51
     _p2p: Boolean,
52 52
 
53 53
     /**
54
-     * The currently configured maximum quality resolution to be received
55
-     * from remote participants.
54
+     * The currently configured maximum quality resolution to be sent and
55
+     * received from the remote participants.
56 56
      */
57
-    _receiverVideoQuality: Number,
57
+    _sendrecvVideoQuality: Number,
58 58
 
59 59
     /**
60 60
      * Whether or not displaying video is supported in the current
@@ -326,7 +326,7 @@ class VideoQualitySlider extends Component<Props> {
326 326
      * @returns {void}
327 327
      */
328 328
     _mapCurrentQualityToSliderValue() {
329
-        const { _audioOnly, _receiverVideoQuality } = this.props;
329
+        const { _audioOnly, _sendrecvVideoQuality } = this.props;
330 330
         const { _sliderOptions } = this;
331 331
 
332 332
         if (_audioOnly) {
@@ -337,7 +337,7 @@ class VideoQualitySlider extends Component<Props> {
337 337
         }
338 338
 
339 339
         const matchingOption = _sliderOptions.find(
340
-            ({ videoQuality }) => videoQuality === _receiverVideoQuality);
340
+            ({ videoQuality }) => videoQuality === _sendrecvVideoQuality);
341 341
 
342 342
         return _sliderOptions.indexOf(matchingOption);
343 343
     }
@@ -352,7 +352,7 @@ class VideoQualitySlider extends Component<Props> {
352 352
      * @returns {void}
353 353
      */
354 354
     _onSliderChange(event) {
355
-        const { _audioOnly, _receiverVideoQuality } = this.props;
355
+        const { _audioOnly, _sendrecvVideoQuality } = this.props;
356 356
         const {
357 357
             audioOnly,
358 358
             onSelect,
@@ -362,7 +362,7 @@ class VideoQualitySlider extends Component<Props> {
362 362
         // Take no action if the newly chosen option does not change audio only
363 363
         // or video quality state.
364 364
         if ((_audioOnly && audioOnly)
365
-            || (!_audioOnly && videoQuality === _receiverVideoQuality)) {
365
+            || (!_audioOnly && videoQuality === _sendrecvVideoQuality)) {
366 366
             return;
367 367
         }
368 368
 
@@ -379,7 +379,7 @@ class VideoQualitySlider extends Component<Props> {
379 379
      * @returns {void}
380 380
      */
381 381
     _setPreferredVideoQuality(qualityLevel) {
382
-        this.props.dispatch(setPreferredReceiverVideoQuality(qualityLevel));
382
+        this.props.dispatch(setPreferredVideoQuality(qualityLevel));
383 383
 
384 384
         if (this.props._audioOnly) {
385 385
             this.props.dispatch(setAudioOnly(false));
@@ -396,17 +396,17 @@ class VideoQualitySlider extends Component<Props> {
396 396
  * @returns {{
397 397
  *     _audioOnly: boolean,
398 398
  *     _p2p: boolean,
399
- *     _receiverVideoQuality: boolean
399
+ *     _sendrecvVideoQuality: number
400 400
  * }}
401 401
  */
402 402
 function _mapStateToProps(state) {
403 403
     const { enabled: audioOnly } = state['features/base/audio-only'];
404
-    const { p2p, preferredReceiverVideoQuality } = state['features/base/conference'];
404
+    const { p2p, preferredVideoQuality } = state['features/base/conference'];
405 405
 
406 406
     return {
407 407
         _audioOnly: audioOnly,
408 408
         _p2p: p2p,
409
-        _receiverVideoQuality: preferredReceiverVideoQuality,
409
+        _sendrecvVideoQuality: preferredVideoQuality,
410 410
         _videoSupported: JitsiMeetJS.mediaDevices.supportsVideo()
411 411
     };
412 412
 }

Loading…
Peruuta
Tallenna