Compare commits

...

4 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé
61220f3a63 conference: fix not applying max recv constraints
They also need to be applied when changing conferences.
2020-07-08 14:23:22 +02:00
Saúl Ibarra Corretgé
fa6877906d rn: set default resolution to 360p (experiment) 2020-07-08 14:23:22 +02:00
Saúl Ibarra Corretgé
5bda0877ab rn,flags: add ability to override resolution using a flag
Also, use the configured resolution to set it as the max received frame size.
2020-07-08 14:23:22 +02:00
Saúl Ibarra Corretgé
d4e5fd9e2a deps: react-native-webrtc@1.84.0 2020-07-08 14:20:04 +02:00
12 changed files with 69 additions and 16 deletions

View File

@@ -147,6 +147,7 @@ public class MainActivity extends JitsiMeetActivity {
.setWelcomePageEnabled(true)
.setServerURL(buildURL(defaultURL))
.setFeatureFlag("call-integration.enabled", false)
.setFeatureFlag("resolution", 360)
.setFeatureFlag("server-url-change.enabled", !configurationByRestrictions)
.build();
JitsiMeet.setDefaultConferenceOptions(defaultOptions);

View File

@@ -293,7 +293,7 @@ PODS:
- React
- react-native-netinfo (4.1.5):
- React
- react-native-webrtc (1.75.3):
- react-native-webrtc (1.84.0):
- React
- react-native-webview (7.4.1):
- React
@@ -569,7 +569,7 @@ SPEC CHECKSUMS:
react-native-calendar-events: 1442fad71a00388f933cfa25512588fec300fcf8
react-native-keep-awake: eba3137546b10003361b37c761f6c429b59814ae
react-native-netinfo: 8d8db463bcc5db66a8ac5c48a7d86beb3b92f61a
react-native-webrtc: 86d841823e66d68cc1f86712db1c2956056bf0c2
react-native-webrtc: 9268ae9a2bc9730796b0968d012327e92c392adf
react-native-webview: 4dbc1d2a4a6b9c5e9e723c62651917aa2b5e579e
React-RCTActionSheet: b72ddbfbe15b44ce691d128e4b582f4bb9abb540
React-RCTAnimation: cfaefba5024499d336b76ab850e6bd33b232b5e3

View File

@@ -36,6 +36,7 @@
jitsiMeet.universalLinkDomains = @[@"meet.jit.si", @"alpha.jitsi.net", @"beta.meet.jit.si"];
jitsiMeet.defaultConferenceOptions = [JitsiMeetConferenceOptions fromBuilder:^(JitsiMeetConferenceOptionsBuilder *builder) {
[builder setFeatureFlag:@"resolution" withValue:@(360)];
builder.serverURL = [NSURL URLWithString:@"https://meet.jit.si"];
builder.welcomePageEnabled = YES;

12
package-lock.json generated
View File

@@ -15062,9 +15062,9 @@
"integrity": "sha512-iqdJ1KpZbR4XGahgVmaeibB7kDhyMT7wrylINgJaYBY38IAiI0LF32VX1umO4pko6n21YF5I/kSeNQ+OXGqqow=="
},
"react-native-webrtc": {
"version": "1.75.3",
"resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-1.75.3.tgz",
"integrity": "sha512-WIQu7jpH4osb4IMdjkpr62UYwt9kHIU4vWvvTHMxSqkGZwMGpTyFW/E+Y0T7If1azAvhq3GBuQjI3npxIXGbSQ==",
"version": "1.84.0",
"resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-1.84.0.tgz",
"integrity": "sha512-xPOFbrcehuBzLnFy3keCM2HyMsyCVDQjQNAn8SIHKH/PA8Q7kZ4spuytc2E1hBTr7zH/vQ2Px+DWqu7on12jag==",
"requires": {
"base64-js": "^1.1.2",
"event-target-shim": "^1.0.5",
@@ -15073,9 +15073,9 @@
},
"dependencies": {
"uuid": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
}
}
},

View File

@@ -81,7 +81,7 @@
"react-native-svg-transformer": "0.13.0",
"react-native-swipeout": "2.3.6",
"react-native-watch-connectivity": "0.4.3",
"react-native-webrtc": "1.75.3",
"react-native-webrtc": "1.84.0",
"react-native-webview": "7.4.1",
"react-native-youtube-iframe": "1.2.3",
"react-redux": "7.1.0",

View File

@@ -41,6 +41,7 @@ import '../subtitles/middleware';
import '../toolbox/middleware';
import '../transcribing/middleware';
import '../video-layout/middleware';
import '../video-quality/middleware';
import '../videosipgw/middleware';
import './middleware';

View File

@@ -117,14 +117,15 @@ StateListenerRegistry.register(
maxReceiverVideoQuality,
preferredVideoQuality
} = currentState;
const changedConference = conference !== previousState.conference;
const changedPreferredVideoQuality
= preferredVideoQuality !== previousState.preferredVideoQuality;
const changedMaxVideoQuality = maxReceiverVideoQuality !== previousState.maxReceiverVideoQuality;
if (changedPreferredVideoQuality || changedMaxVideoQuality) {
if (changedConference || changedPreferredVideoQuality || changedMaxVideoQuality) {
_setReceiverVideoConstraint(conference, preferredVideoQuality, maxReceiverVideoQuality);
}
if (changedPreferredVideoQuality) {
if (changedConference || changedPreferredVideoQuality) {
_setSenderVideoConstraint(conference, preferredVideoQuality);
}
});
@@ -460,7 +461,10 @@ function _sendTones({ getState }, next, action) {
*/
function _setReceiverVideoConstraint(conference, preferred, max) {
if (conference) {
conference.setReceiverVideoConstraint(Math.min(preferred, max));
const value = Math.min(preferred, max);
conference.setReceiverVideoConstraint(value);
logger.info(`setReceiverVideoConstraint: ${value}`);
}
}

View File

@@ -3,6 +3,7 @@
import { jitsiLocalStorage } from 'js-utils';
import { APP_WILL_MOUNT } from '../app';
import { getFeatureFlag } from '../flags/functions';
import { addKnownDomains } from '../known-domains';
import { MiddlewareRegistry } from '../redux';
import { parseURIString } from '../util';
@@ -107,6 +108,12 @@ function _setConfig({ dispatch, getState }, next, action) {
config.p2p = { enabled: !settings.disableP2P };
}
const resolutionFlag = getFeatureFlag(state, 'resolution');
if (typeof resolutionFlag !== 'undefined') {
config.resolution = resolutionFlag;
}
dispatch({
type: _UPDATE_CONFIG,
config

View File

@@ -81,6 +81,13 @@ export const RAISE_HAND_ENABLED = 'raise-hand.enabled';
*/
export const RECORDING_ENABLED = 'recording.enabled';
/**
* Flag indicating the local and (maximum) remote video resolution. Overrides
* the server configuration.
* Default: (unset).
*/
export const RESOLUTION = 'resolution';
/**
* Flag indicating if server URL change is enabled.
* Default: enabled (true)

View File

@@ -6,7 +6,7 @@ import {
VIDEO_QUALITY_LEVELS,
conferenceLeft,
getCurrentConference,
setPreferredVideoQuality
setMaxReceiverVideoQuality
} from '../base/conference';
import { hideDialog, isDialogOpen } from '../base/dialog';
import { setActiveModalId } from '../base/modal';
@@ -33,7 +33,7 @@ MiddlewareRegistry.register(store => next => action => {
dispatch(setFilmstripEnabled(!reducedUI));
dispatch(
setPreferredVideoQuality(
setMaxReceiverVideoQuality(
reducedUI
? VIDEO_QUALITY_LEVELS.LOW
: VIDEO_QUALITY_LEVELS.HIGH));

View File

@@ -32,8 +32,7 @@ StateListenerRegistry.register(
dispatch(selectParticipant());
if (!displayTileView) {
dispatch(
setMaxReceiverVideoQuality(VIDEO_QUALITY_LEVELS.HIGH));
dispatch(setMaxReceiverVideoQuality(VIDEO_QUALITY_LEVELS.HIGH));
if (_getAutoPinSetting()) {
_updateAutoPinnedParticipant(store);

View File

@@ -0,0 +1,33 @@
// @flow
import { CONFERENCE_JOINED } from '../base/conference/actionTypes';
import { setPreferredVideoQuality } from '../base/conference/actions';
import { MiddlewareRegistry } from '../base/redux';
import logger from './logger';
/**
* Implements the middleware of the feature video-quality.
*
* @param {Store} store - The redux store.
* @returns {Function}
*/
MiddlewareRegistry.register(({ dispatch, getState }) => next => action => {
const result = next(action);
switch (action.type) {
case CONFERENCE_JOINED: {
if (navigator.product === 'ReactNative') {
const { resolution } = getState()['features/base/config'];
if (typeof resolution !== 'undefined') {
dispatch(setPreferredVideoQuality(Number.parseInt(resolution, 10)));
logger.info(`Configured preferred receiver video frame height to: ${resolution}`);
}
}
break;
}
}
return result;
});