Adding frame rate option to videos. Make resolution and frame rate of screen sharing configurable.
parent
b3ad0a44c2
commit
d1ffe6cd43
|
|
@ -27,20 +27,33 @@ var config =
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If defaultResolution is set, it will override user settings when joining:
|
* Resolutions:
|
||||||
|
*
|
||||||
* low ~ 320x240
|
* low ~ 320x240
|
||||||
* medium ~ 640x480
|
* medium ~ 640x480
|
||||||
* high ~ 1280x720
|
* high ~ 1280x720
|
||||||
* veryhigh ~ 1920x1080
|
* veryhigh ~ 1920x1080
|
||||||
* ultra ~ 3840x2560
|
* ultra ~ 3840x2560
|
||||||
|
*
|
||||||
**/
|
**/
|
||||||
defaultResolution : 'medium',
|
|
||||||
|
/**
|
||||||
|
* Frame rates:
|
||||||
|
*
|
||||||
|
* 1, 5, 10, 15, 20, 25, 30
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
|
defaultResolution : 'medium',
|
||||||
|
defaultFrameRate : 15,
|
||||||
|
defaultScreenResolution : 'veryhigh',
|
||||||
|
defaultScreenSharingFrameRate : 5,
|
||||||
// Enable or disable simulcast for webcam video
|
// Enable or disable simulcast for webcam video
|
||||||
simulcast : true,
|
simulcast : true,
|
||||||
// Enable or disable simulcast for screen sharing video
|
// Enable or disable simulcast for screen sharing video
|
||||||
simulcastSharing : false,
|
simulcastSharing : false,
|
||||||
// Simulcast encoding layers and levels
|
// Simulcast encoding layers and levels
|
||||||
simulcastEncodings :
|
simulcastEncodings :
|
||||||
[
|
[
|
||||||
{ scaleResolutionDownBy: 4 },
|
{ scaleResolutionDownBy: 4 },
|
||||||
{ scaleResolutionDownBy: 2 },
|
{ scaleResolutionDownBy: 2 },
|
||||||
|
|
|
||||||
|
|
@ -1192,17 +1192,19 @@ export default class RoomClient
|
||||||
sampleSize
|
sampleSize
|
||||||
} = store.getState().settings;
|
} = store.getState().settings;
|
||||||
|
|
||||||
if (restart || !this._micProducer)
|
if (restart)
|
||||||
{
|
{
|
||||||
this.disconnectLocalHark();
|
this.disconnectLocalHark();
|
||||||
|
|
||||||
|
store.dispatch(settingsActions.setSelectedAudioDevice(deviceId));
|
||||||
|
|
||||||
if (this._micProducer)
|
if (this._micProducer)
|
||||||
await this.disableMic();
|
await this.disableMic();
|
||||||
|
|
||||||
const stream = await navigator.mediaDevices.getUserMedia(
|
const stream = await navigator.mediaDevices.getUserMedia(
|
||||||
{
|
{
|
||||||
audio : {
|
audio : {
|
||||||
deviceId : { ideal: device.deviceId },
|
deviceId : { ideal: deviceId },
|
||||||
sampleRate,
|
sampleRate,
|
||||||
channelCount,
|
channelCount,
|
||||||
volume,
|
volume,
|
||||||
|
|
@ -1264,7 +1266,7 @@ export default class RoomClient
|
||||||
|
|
||||||
this.connectLocalHark(track);
|
this.connectLocalHark(track);
|
||||||
}
|
}
|
||||||
else
|
else if (this._micProducer)
|
||||||
{
|
{
|
||||||
({ track } = this._micProducer);
|
({ track } = this._micProducer);
|
||||||
|
|
||||||
|
|
@ -1318,13 +1320,19 @@ export default class RoomClient
|
||||||
store.dispatch(meActions.setAudioInProgress(false));
|
store.dispatch(meActions.setAudioInProgress(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateWebcam({ restart = false, newDeviceId = null, newResolution = null } = {})
|
async updateWebcam({
|
||||||
|
restart = false,
|
||||||
|
newDeviceId = null,
|
||||||
|
newResolution = null,
|
||||||
|
newFrameRate = null
|
||||||
|
} = {})
|
||||||
{
|
{
|
||||||
logger.debug(
|
logger.debug(
|
||||||
'updateWebcam() [restart:"%s", newDeviceId:"%s", newResolution:"%s"]',
|
'updateWebcam() [restart:"%s", newDeviceId:"%s", newResolution:"%s", newFrameRate:"%s"]',
|
||||||
restart,
|
restart,
|
||||||
newDeviceId,
|
newDeviceId,
|
||||||
newResolution
|
newResolution,
|
||||||
|
newFrameRate
|
||||||
);
|
);
|
||||||
|
|
||||||
let track;
|
let track;
|
||||||
|
|
@ -1343,6 +1351,9 @@ export default class RoomClient
|
||||||
if (newResolution)
|
if (newResolution)
|
||||||
store.dispatch(settingsActions.setVideoResolution(newResolution));
|
store.dispatch(settingsActions.setVideoResolution(newResolution));
|
||||||
|
|
||||||
|
if (newFrameRate)
|
||||||
|
store.dispatch(settingsActions.setVideoFrameRate(newFrameRate));
|
||||||
|
|
||||||
store.dispatch(meActions.setWebcamInProgress(true));
|
store.dispatch(meActions.setWebcamInProgress(true));
|
||||||
|
|
||||||
const deviceId = await this._getWebcamDeviceId();
|
const deviceId = await this._getWebcamDeviceId();
|
||||||
|
|
@ -1351,10 +1362,15 @@ export default class RoomClient
|
||||||
if (!device)
|
if (!device)
|
||||||
throw new Error('no webcam devices');
|
throw new Error('no webcam devices');
|
||||||
|
|
||||||
const { resolution } = store.getState().settings;
|
const {
|
||||||
|
resolution,
|
||||||
|
frameRate
|
||||||
|
} = store.getState().settings;
|
||||||
|
|
||||||
if (restart || !this._webcamProducer)
|
if (restart)
|
||||||
{
|
{
|
||||||
|
store.dispatch(settingsActions.setSelectedWebcamDevice(deviceId));
|
||||||
|
|
||||||
if (this._webcamProducer)
|
if (this._webcamProducer)
|
||||||
await this.disableWebcam();
|
await this.disableWebcam();
|
||||||
|
|
||||||
|
|
@ -1362,8 +1378,9 @@ export default class RoomClient
|
||||||
{
|
{
|
||||||
video :
|
video :
|
||||||
{
|
{
|
||||||
deviceId : { ideal: device.deviceId },
|
deviceId : { ideal: deviceId },
|
||||||
...VIDEO_CONSTRAINS[resolution]
|
...VIDEO_CONSTRAINS[resolution],
|
||||||
|
frameRate
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -1441,13 +1458,14 @@ export default class RoomClient
|
||||||
this.disableWebcam();
|
this.disableWebcam();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else if (this._webcamProducer)
|
||||||
{
|
{
|
||||||
({ track } = this._webcamProducer);
|
({ track } = this._webcamProducer);
|
||||||
|
|
||||||
await track.applyConstraints(
|
await track.applyConstraints(
|
||||||
{
|
{
|
||||||
...VIDEO_CONSTRAINS[resolution]
|
...VIDEO_CONSTRAINS[resolution],
|
||||||
|
frameRate
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1458,13 +1476,12 @@ export default class RoomClient
|
||||||
|
|
||||||
await track.applyConstraints(
|
await track.applyConstraints(
|
||||||
{
|
{
|
||||||
...VIDEO_CONSTRAINS[resolution]
|
...VIDEO_CONSTRAINS[resolution],
|
||||||
|
frameRate
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await this._updateWebcams();
|
|
||||||
}
|
}
|
||||||
catch (error)
|
catch (error)
|
||||||
{
|
{
|
||||||
|
|
@ -3559,24 +3576,16 @@ export default class RoomClient
|
||||||
store.dispatch(meActions.setAudioInProgress(false));
|
store.dispatch(meActions.setAudioInProgress(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
async enableScreenSharing()
|
async updateScreenSharing({
|
||||||
|
restart = false,
|
||||||
|
newResolution = null,
|
||||||
|
newFrameRate = null
|
||||||
|
} = {})
|
||||||
{
|
{
|
||||||
logger.debug('enableScreenSharing()');
|
logger.debug('updateScreenSharing() [restart:"%s"]', restart);
|
||||||
|
|
||||||
if (this._screenSharingProducer)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!this._mediasoupDevice.canProduce('video'))
|
|
||||||
{
|
|
||||||
logger.error('enableScreenSharing() | cannot produce video');
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let track;
|
let track;
|
||||||
|
|
||||||
store.dispatch(meActions.setScreenShareInProgress(true));
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
const available = this._screenSharing.isScreenShareAvailable();
|
const available = this._screenSharing.isScreenShareAvailable();
|
||||||
|
|
@ -3584,100 +3593,126 @@ export default class RoomClient
|
||||||
if (!available)
|
if (!available)
|
||||||
throw new Error('screen sharing not available');
|
throw new Error('screen sharing not available');
|
||||||
|
|
||||||
const stream = await this._screenSharing.start({
|
if (!this._mediasoupDevice.canProduce('video'))
|
||||||
width : 1920,
|
throw new Error('cannot produce video');
|
||||||
height : 1080,
|
|
||||||
frameRate : 5
|
|
||||||
});
|
|
||||||
|
|
||||||
([ track ] = stream.getVideoTracks());
|
if (newResolution)
|
||||||
|
store.dispatch(settingsActions.setScreenSharingResolution(newResolution));
|
||||||
|
|
||||||
if (this._useSharingSimulcast)
|
if (newFrameRate)
|
||||||
|
store.dispatch(settingsActions.setScreenSharingFrameRate(newFrameRate));
|
||||||
|
|
||||||
|
store.dispatch(meActions.setScreenShareInProgress(true));
|
||||||
|
|
||||||
|
const {
|
||||||
|
screenSharingResolution,
|
||||||
|
screenSharingFrameRate
|
||||||
|
} = store.getState().settings;
|
||||||
|
|
||||||
|
if (restart)
|
||||||
{
|
{
|
||||||
// If VP9 is the only available video codec then use SVC.
|
const stream = await this._screenSharing.start({
|
||||||
const firstVideoCodec = this._mediasoupDevice
|
...VIDEO_CONSTRAINS[screenSharingResolution],
|
||||||
.rtpCapabilities
|
frameRate : screenSharingFrameRate
|
||||||
.codecs
|
});
|
||||||
.find((c) => c.kind === 'video');
|
|
||||||
|
|
||||||
let encodings;
|
([ track ] = stream.getVideoTracks());
|
||||||
|
|
||||||
if (firstVideoCodec.mimeType.toLowerCase() === 'video/vp9')
|
if (this._useSharingSimulcast)
|
||||||
{
|
{
|
||||||
encodings = VIDEO_SVC_ENCODINGS;
|
// If VP9 is the only available video codec then use SVC.
|
||||||
}
|
const firstVideoCodec = this._mediasoupDevice
|
||||||
else if ('simulcastEncodings' in window.config)
|
.rtpCapabilities
|
||||||
{
|
.codecs
|
||||||
encodings = window.config.simulcastEncodings
|
.find((c) => c.kind === 'video');
|
||||||
.map((encoding) => ({ ...encoding, dtx: true }));
|
|
||||||
|
let encodings;
|
||||||
|
|
||||||
|
if (firstVideoCodec.mimeType.toLowerCase() === 'video/vp9')
|
||||||
|
{
|
||||||
|
encodings = VIDEO_SVC_ENCODINGS;
|
||||||
|
}
|
||||||
|
else if ('simulcastEncodings' in window.config)
|
||||||
|
{
|
||||||
|
encodings = window.config.simulcastEncodings
|
||||||
|
.map((encoding) => ({ ...encoding, dtx: true }));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
encodings = VIDEO_SIMULCAST_ENCODINGS
|
||||||
|
.map((encoding) => ({ ...encoding, dtx: true }));
|
||||||
|
}
|
||||||
|
|
||||||
|
this._screenSharingProducer = await this._sendTransport.produce(
|
||||||
|
{
|
||||||
|
track,
|
||||||
|
encodings,
|
||||||
|
codecOptions :
|
||||||
|
{
|
||||||
|
videoGoogleStartBitrate : 1000
|
||||||
|
},
|
||||||
|
appData :
|
||||||
|
{
|
||||||
|
source : 'screen'
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
encodings = VIDEO_SIMULCAST_ENCODINGS
|
this._screenSharingProducer = await this._sendTransport.produce({
|
||||||
.map((encoding) => ({ ...encoding, dtx: true }));
|
|
||||||
}
|
|
||||||
|
|
||||||
this._screenSharingProducer = await this._sendTransport.produce(
|
|
||||||
{
|
|
||||||
track,
|
track,
|
||||||
encodings,
|
|
||||||
codecOptions :
|
|
||||||
{
|
|
||||||
videoGoogleStartBitrate : 1000
|
|
||||||
},
|
|
||||||
appData :
|
appData :
|
||||||
{
|
{
|
||||||
source : 'screen'
|
source : 'screen'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
store.dispatch(producerActions.addProducer(
|
||||||
this._screenSharingProducer = await this._sendTransport.produce({
|
|
||||||
track,
|
|
||||||
appData :
|
|
||||||
{
|
{
|
||||||
source : 'screen'
|
id : this._screenSharingProducer.id,
|
||||||
}
|
deviceLabel : 'screen',
|
||||||
});
|
source : 'screen',
|
||||||
}
|
paused : this._screenSharingProducer.paused,
|
||||||
|
track : this._screenSharingProducer.track,
|
||||||
store.dispatch(producerActions.addProducer(
|
rtpParameters : this._screenSharingProducer.rtpParameters,
|
||||||
{
|
codec : this._screenSharingProducer.rtpParameters.codecs[0].mimeType.split('/')[1]
|
||||||
id : this._screenSharingProducer.id,
|
|
||||||
deviceLabel : 'screen',
|
|
||||||
source : 'screen',
|
|
||||||
paused : this._screenSharingProducer.paused,
|
|
||||||
track : this._screenSharingProducer.track,
|
|
||||||
rtpParameters : this._screenSharingProducer.rtpParameters,
|
|
||||||
codec : this._screenSharingProducer.rtpParameters.codecs[0].mimeType.split('/')[1]
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._screenSharingProducer.on('transportclose', () =>
|
|
||||||
{
|
|
||||||
this._screenSharingProducer = null;
|
|
||||||
});
|
|
||||||
|
|
||||||
this._screenSharingProducer.on('trackended', () =>
|
|
||||||
{
|
|
||||||
store.dispatch(requestActions.notify(
|
|
||||||
{
|
|
||||||
type : 'error',
|
|
||||||
text : intl.formatMessage({
|
|
||||||
id : 'devices.screenSharingDisconnected',
|
|
||||||
defaultMessage : 'Screen sharing disconnected'
|
|
||||||
})
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this.disableScreenSharing()
|
this._screenSharingProducer.on('transportclose', () =>
|
||||||
.catch(() => {});
|
{
|
||||||
});
|
this._screenSharingProducer = null;
|
||||||
|
});
|
||||||
|
|
||||||
logger.debug('enableScreenSharing() succeeded');
|
this._screenSharingProducer.on('trackended', () =>
|
||||||
|
{
|
||||||
|
store.dispatch(requestActions.notify(
|
||||||
|
{
|
||||||
|
type : 'error',
|
||||||
|
text : intl.formatMessage({
|
||||||
|
id : 'devices.screenSharingDisconnected',
|
||||||
|
defaultMessage : 'Screen sharing disconnected'
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
this.disableScreenSharing();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (this._screenSharingProducer)
|
||||||
|
{
|
||||||
|
({ track } = this._screenSharingProducer);
|
||||||
|
|
||||||
|
await track.applyConstraints(
|
||||||
|
{
|
||||||
|
...VIDEO_CONSTRAINS[screenSharingResolution],
|
||||||
|
frameRate : screenSharingFrameRate
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (error)
|
catch (error)
|
||||||
{
|
{
|
||||||
logger.error('enableScreenSharing() [error:"%o"]', error);
|
logger.error('updateScreenSharing() [error:"%o"]', error);
|
||||||
|
|
||||||
store.dispatch(requestActions.notify(
|
store.dispatch(requestActions.notify(
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,24 @@ export const setVideoResolution = (resolution) =>
|
||||||
payload : { resolution }
|
payload : { resolution }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setVideoFrameRate = (frameRate) =>
|
||||||
|
({
|
||||||
|
type : 'SET_VIDEO_FRAME_RATE',
|
||||||
|
payload : { frameRate }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const setScreenSharingResolution = (screenSharingResolution) =>
|
||||||
|
({
|
||||||
|
type : 'SET_SCREEN_SHARING_RESOLUTION',
|
||||||
|
payload : { screenSharingResolution }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const setScreenSharingFrameRate = (screenSharingFrameRate) =>
|
||||||
|
({
|
||||||
|
type : 'SET_SCREEN_SHARING_FRAME_RATE',
|
||||||
|
payload : { screenSharingFrameRate }
|
||||||
|
});
|
||||||
|
|
||||||
export const setDisplayName = (displayName) =>
|
export const setDisplayName = (displayName) =>
|
||||||
({
|
({
|
||||||
type : 'SET_DISPLAY_NAME',
|
type : 'SET_DISPLAY_NAME',
|
||||||
|
|
|
||||||
|
|
@ -599,7 +599,7 @@ const Me = (props) =>
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
{
|
{
|
||||||
if (screenState === 'off')
|
if (screenState === 'off')
|
||||||
roomClient.enableScreenSharing();
|
roomClient.updateScreenSharing({ restart: true });
|
||||||
else if (screenState === 'on')
|
else if (screenState === 'on')
|
||||||
roomClient.disableScreenSharing();
|
roomClient.disableScreenSharing();
|
||||||
}}
|
}}
|
||||||
|
|
@ -631,7 +631,7 @@ const Me = (props) =>
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
{
|
{
|
||||||
if (screenState === 'off')
|
if (screenState === 'off')
|
||||||
roomClient.enableScreenSharing();
|
roomClient.updateScreenSharing({ restart: true });
|
||||||
else if (screenState === 'on')
|
else if (screenState === 'on')
|
||||||
roomClient.disableScreenSharing();
|
roomClient.disableScreenSharing();
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -243,7 +243,7 @@ const ButtonControlBar = (props) =>
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
{
|
{
|
||||||
if (screenState === 'off')
|
if (screenState === 'off')
|
||||||
roomClient.enableScreenSharing();
|
roomClient.updateScreenSharing({ restart: true });
|
||||||
else if (screenState === 'on')
|
else if (screenState === 'on')
|
||||||
roomClient.disableScreenSharing();
|
roomClient.disableScreenSharing();
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
|
|
@ -233,6 +233,90 @@ const MediaSettings = ({
|
||||||
/>
|
/>
|
||||||
</FormHelperText>
|
</FormHelperText>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
<FormControl className={classes.formControl}>
|
||||||
|
<Select
|
||||||
|
value={settings.frameRate || ''}
|
||||||
|
onChange={(event) =>
|
||||||
|
{
|
||||||
|
if (event.target.value)
|
||||||
|
roomClient.updateWebcam({ newFrameRate: event.target.value });
|
||||||
|
}}
|
||||||
|
name='Frame rate'
|
||||||
|
autoWidth
|
||||||
|
className={classes.selectEmpty}
|
||||||
|
>
|
||||||
|
{ [ 1, 5, 10, 15, 20, 25, 30 ].map((frameRate) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<MenuItem key={frameRate} value={frameRate}>
|
||||||
|
{frameRate}
|
||||||
|
</MenuItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
<FormHelperText>
|
||||||
|
<FormattedMessage
|
||||||
|
id='settings.frameRate'
|
||||||
|
defaultMessage='Select your video frame rate'
|
||||||
|
/>
|
||||||
|
</FormHelperText>
|
||||||
|
</FormControl>
|
||||||
|
<FormControl className={classes.formControl}>
|
||||||
|
<Select
|
||||||
|
value={settings.screenSharingResolution || ''}
|
||||||
|
onChange={(event) =>
|
||||||
|
{
|
||||||
|
if (event.target.value)
|
||||||
|
roomClient.updateScreenSharing({ newResolution: event.target.value });
|
||||||
|
}}
|
||||||
|
name='Screen sharing resolution'
|
||||||
|
autoWidth
|
||||||
|
className={classes.selectEmpty}
|
||||||
|
>
|
||||||
|
{resolutions.map((resolution, index) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<MenuItem key={index} value={resolution.value}>
|
||||||
|
{resolution.label}
|
||||||
|
</MenuItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
<FormHelperText>
|
||||||
|
<FormattedMessage
|
||||||
|
id='settings.screenSharingResolution'
|
||||||
|
defaultMessage='Select your screen sharing resolution'
|
||||||
|
/>
|
||||||
|
</FormHelperText>
|
||||||
|
</FormControl>
|
||||||
|
<FormControl className={classes.formControl}>
|
||||||
|
<Select
|
||||||
|
value={settings.screenSharingFrameRate || ''}
|
||||||
|
onChange={(event) =>
|
||||||
|
{
|
||||||
|
if (event.target.value)
|
||||||
|
roomClient.updateScreenSharing({ newFrameRate: event.target.value });
|
||||||
|
}}
|
||||||
|
name='Frame rate'
|
||||||
|
autoWidth
|
||||||
|
className={classes.selectEmpty}
|
||||||
|
>
|
||||||
|
{ [ 1, 5, 10, 15, 20, 25, 30 ].map((screenSharingFrameRate) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<MenuItem key={screenSharingFrameRate} value={screenSharingFrameRate}>
|
||||||
|
{screenSharingFrameRate}
|
||||||
|
</MenuItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
<FormHelperText>
|
||||||
|
<FormattedMessage
|
||||||
|
id='settings.screenSharingFrameRate'
|
||||||
|
defaultMessage='Select your screen sharing frame rate'
|
||||||
|
/>
|
||||||
|
</FormHelperText>
|
||||||
|
</FormControl>
|
||||||
</form>
|
</form>
|
||||||
<form className={classes.setting} autoComplete='off'>
|
<form className={classes.setting} autoComplete='off'>
|
||||||
<FormControl className={classes.formControl}>
|
<FormControl className={classes.formControl}>
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,30 @@
|
||||||
const initialState =
|
const initialState =
|
||||||
{
|
{
|
||||||
displayName : 'Guest',
|
displayName : 'Guest',
|
||||||
selectedWebcam : null,
|
selectedWebcam : null,
|
||||||
selectedAudioDevice : null,
|
selectedAudioDevice : null,
|
||||||
advancedMode : false,
|
advancedMode : false,
|
||||||
sampleRate : 48000,
|
sampleRate : 48000,
|
||||||
channelCount : 1,
|
channelCount : 1,
|
||||||
volume : 1.0,
|
volume : 1.0,
|
||||||
autoGainControl : false,
|
autoGainControl : false,
|
||||||
echoCancellation : true,
|
echoCancellation : true,
|
||||||
noiseSuppression : true,
|
noiseSuppression : true,
|
||||||
voiceActivatedUnmute : false,
|
voiceActivatedUnmute : false,
|
||||||
noiseThreshold : -50,
|
noiseThreshold : -50,
|
||||||
sampleSize : 16,
|
sampleSize : 16,
|
||||||
// low, medium, high, veryhigh, ultra
|
// low, medium, high, veryhigh, ultra
|
||||||
resolution : window.config.defaultResolution || 'medium',
|
resolution : window.config.defaultResolution || 'medium',
|
||||||
lastN : 4,
|
frameRate : window.config.defaultFrameRate || 15,
|
||||||
permanentTopBar : true,
|
screenSharingResolution : window.config.defaultScreenResolution || 'veryhigh',
|
||||||
hiddenControls : false,
|
screenSharingFrameRate : window.config.defaultScreenSharingFrameRate || 5,
|
||||||
showNotifications : true,
|
lastN : 4,
|
||||||
notificationSounds : true,
|
permanentTopBar : true,
|
||||||
buttonControlBar : window.config.buttonControlBar || false,
|
hiddenControls : false,
|
||||||
drawerOverlayed : window.config.drawerOverlayed || true,
|
showNotifications : true,
|
||||||
|
notificationSounds : true,
|
||||||
|
buttonControlBar : window.config.buttonControlBar || false,
|
||||||
|
drawerOverlayed : window.config.drawerOverlayed || true,
|
||||||
...window.config.defaultAudio
|
...window.config.defaultAudio
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -184,6 +187,27 @@ const settings = (state = initialState, action) =>
|
||||||
return { ...state, resolution };
|
return { ...state, resolution };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'SET_VIDEO_FRAME_RATE':
|
||||||
|
{
|
||||||
|
const { frameRate } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, frameRate };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_SCREEN_SHARING_RESOLUTION':
|
||||||
|
{
|
||||||
|
const { screenSharingResolution } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, screenSharingResolution };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_SCREEN_SHARING_FRAME_RATE':
|
||||||
|
{
|
||||||
|
const { screenSharingFrameRate } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, screenSharingFrameRate };
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "选择音频输出设备",
|
"settings.selectAudioOutput": "选择音频输出设备",
|
||||||
"settings.cantSelectAudioOutput": "无法选择音频输出设备",
|
"settings.cantSelectAudioOutput": "无法选择音频输出设备",
|
||||||
"settings.resolution": "选择视频分辨率",
|
"settings.resolution": "选择视频分辨率",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "房间布局",
|
"settings.layout": "房间布局",
|
||||||
"settings.selectRoomLayout": "选择房间布局",
|
"settings.selectRoomLayout": "选择房间布局",
|
||||||
"settings.advancedMode": "高级模式",
|
"settings.advancedMode": "高级模式",
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,9 @@
|
||||||
"settings.selectAudioOutput": "Vyberte audio output zařízení",
|
"settings.selectAudioOutput": "Vyberte audio output zařízení",
|
||||||
"settings.cantSelectAudioOutput": "Není možno vybrat audio output zařízení",
|
"settings.cantSelectAudioOutput": "Není možno vybrat audio output zařízení",
|
||||||
"settings.resolution": "Vyberte rozlišení vašeho videa",
|
"settings.resolution": "Vyberte rozlišení vašeho videa",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Rozvržení místnosti",
|
"settings.layout": "Rozvržení místnosti",
|
||||||
"settings.selectRoomLayout": "Vyberte rozvržení místnosti",
|
"settings.selectRoomLayout": "Vyberte rozvržení místnosti",
|
||||||
"settings.advancedMode": "Pokočilý mód",
|
"settings.advancedMode": "Pokočilý mód",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Wähle ein Audioausgabegerät",
|
"settings.selectAudioOutput": "Wähle ein Audioausgabegerät",
|
||||||
"settings.cantSelectAudioOutput": "Kann Audioausgabegerät nicht aktivieren",
|
"settings.cantSelectAudioOutput": "Kann Audioausgabegerät nicht aktivieren",
|
||||||
"settings.resolution": "Wähle eine Auflösung",
|
"settings.resolution": "Wähle eine Auflösung",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Raumlayout",
|
"settings.layout": "Raumlayout",
|
||||||
"settings.selectRoomLayout": "Wähle ein Raumlayout",
|
"settings.selectRoomLayout": "Wähle ein Raumlayout",
|
||||||
"settings.advancedMode": "Erweiterter Modus",
|
"settings.advancedMode": "Erweiterter Modus",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Vælg lydudgangsenhed",
|
"settings.selectAudioOutput": "Vælg lydudgangsenhed",
|
||||||
"settings.cantSelectAudioOutput": "Kan ikke vælge lydoutputenhed",
|
"settings.cantSelectAudioOutput": "Kan ikke vælge lydoutputenhed",
|
||||||
"settings.resolution": "Vælg din videoopløsning",
|
"settings.resolution": "Vælg din videoopløsning",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Møde visning",
|
"settings.layout": "Møde visning",
|
||||||
"settings.selectRoomLayout": "Vælg møde visning",
|
"settings.selectRoomLayout": "Vælg møde visning",
|
||||||
"settings.advancedMode": "Avanceret tilstand",
|
"settings.advancedMode": "Avanceret tilstand",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Επιλέξτε συσκευή εξόδου ήχου",
|
"settings.selectAudioOutput": "Επιλέξτε συσκευή εξόδου ήχου",
|
||||||
"settings.cantSelectAudioOutput": "Δεν είναι δυνατή η επιλογή συσκευής εξόδου ήχου",
|
"settings.cantSelectAudioOutput": "Δεν είναι δυνατή η επιλογή συσκευής εξόδου ήχου",
|
||||||
"settings.resolution": "Επιλέξτε την ανάλυση του video",
|
"settings.resolution": "Επιλέξτε την ανάλυση του video",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Περιβάλλον δωματίου",
|
"settings.layout": "Περιβάλλον δωματίου",
|
||||||
"settings.selectRoomLayout": "Επιλογή περιβάλλοντος δωματίου",
|
"settings.selectRoomLayout": "Επιλογή περιβάλλοντος δωματίου",
|
||||||
"settings.advancedMode": "Προηγμένη λειτουργία",
|
"settings.advancedMode": "Προηγμένη λειτουργία",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Select audio output device",
|
"settings.selectAudioOutput": "Select audio output device",
|
||||||
"settings.cantSelectAudioOutput": "Unable to select audio output device",
|
"settings.cantSelectAudioOutput": "Unable to select audio output device",
|
||||||
"settings.resolution": "Select your video resolution",
|
"settings.resolution": "Select your video resolution",
|
||||||
|
"settings.frameRate": "Select your video frame rate",
|
||||||
|
"settings.screenSharingResolution": "Select your screen sharing resolution",
|
||||||
|
"settings.screenSharingFrameRate": "Select your screen sharing frame rate",
|
||||||
"settings.layout": "Room layout",
|
"settings.layout": "Room layout",
|
||||||
"settings.selectRoomLayout": "Select room layout",
|
"settings.selectRoomLayout": "Select room layout",
|
||||||
"settings.advancedMode": "Advanced mode",
|
"settings.advancedMode": "Advanced mode",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Seleccionar dispositivo de salida de audio",
|
"settings.selectAudioOutput": "Seleccionar dispositivo de salida de audio",
|
||||||
"settings.cantSelectAudioOutput": "No se puede seleccionar el dispositivo de salida de audio",
|
"settings.cantSelectAudioOutput": "No se puede seleccionar el dispositivo de salida de audio",
|
||||||
"settings.resolution": "Seleccione su resolución de imagen",
|
"settings.resolution": "Seleccione su resolución de imagen",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Disposición de la sala",
|
"settings.layout": "Disposición de la sala",
|
||||||
"settings.selectRoomLayout": "Seleccione la disposición de la sala",
|
"settings.selectRoomLayout": "Seleccione la disposición de la sala",
|
||||||
"settings.advancedMode": "Modo avanzado",
|
"settings.advancedMode": "Modo avanzado",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Sélectionnez le périphérique de sortie audio",
|
"settings.selectAudioOutput": "Sélectionnez le périphérique de sortie audio",
|
||||||
"settings.cantSelectAudioOutput": "Impossible de sélectionner le périphérique de sortie audio",
|
"settings.cantSelectAudioOutput": "Impossible de sélectionner le périphérique de sortie audio",
|
||||||
"settings.resolution": "Sélectionnez votre résolution",
|
"settings.resolution": "Sélectionnez votre résolution",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Mode d'affichage de la salle",
|
"settings.layout": "Mode d'affichage de la salle",
|
||||||
"settings.selectRoomLayout": "Sélectionnez la présentation de la salle",
|
"settings.selectRoomLayout": "Sélectionnez la présentation de la salle",
|
||||||
"settings.advancedMode": "Mode avancé",
|
"settings.advancedMode": "Mode avancé",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Odaberite izlazni uređaj za zvuk",
|
"settings.selectAudioOutput": "Odaberite izlazni uređaj za zvuk",
|
||||||
"settings.cantSelectAudioOutput": "Nije moguće odabrati izlazni uređaj za zvuk",
|
"settings.cantSelectAudioOutput": "Nije moguće odabrati izlazni uređaj za zvuk",
|
||||||
"settings.resolution": "Odaberi video rezoluciju",
|
"settings.resolution": "Odaberi video rezoluciju",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Način prikaza",
|
"settings.layout": "Način prikaza",
|
||||||
"settings.selectRoomLayout": "Odaberi način prikaza",
|
"settings.selectRoomLayout": "Odaberi način prikaza",
|
||||||
"settings.advancedMode": "Napredne mogućnosti",
|
"settings.advancedMode": "Napredne mogućnosti",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Válassz kimenti hangeszközt",
|
"settings.selectAudioOutput": "Válassz kimenti hangeszközt",
|
||||||
"settings.cantSelectAudioOutput": "Nem sikerült a kimeneti hangeszközt kiválasztani",
|
"settings.cantSelectAudioOutput": "Nem sikerült a kimeneti hangeszközt kiválasztani",
|
||||||
"settings.resolution": "Válaszd ki a videoeszközöd felbontását",
|
"settings.resolution": "Válaszd ki a videoeszközöd felbontását",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "A konferencia képkiosztása",
|
"settings.layout": "A konferencia képkiosztása",
|
||||||
"settings.selectRoomLayout": "Válaszd ki a konferencia képkiosztását",
|
"settings.selectRoomLayout": "Válaszd ki a konferencia képkiosztását",
|
||||||
"settings.advancedMode": "Részletes információk",
|
"settings.advancedMode": "Részletes információk",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Seleziona il dispositivo di uscita audio",
|
"settings.selectAudioOutput": "Seleziona il dispositivo di uscita audio",
|
||||||
"settings.cantSelectAudioOutput": "Impossibile selezionare il dispositivo di uscita audio",
|
"settings.cantSelectAudioOutput": "Impossibile selezionare il dispositivo di uscita audio",
|
||||||
"settings.resolution": "Seleziona risoluzione",
|
"settings.resolution": "Seleziona risoluzione",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Aspetto stanza",
|
"settings.layout": "Aspetto stanza",
|
||||||
"settings.selectRoomLayout": "Seleziona aspetto stanza",
|
"settings.selectRoomLayout": "Seleziona aspetto stanza",
|
||||||
"settings.advancedMode": "Modalità avanzata",
|
"settings.advancedMode": "Modalità avanzata",
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,9 @@
|
||||||
"settings.selectAudio": "Izvēlieties skaņas ierīci",
|
"settings.selectAudio": "Izvēlieties skaņas ierīci",
|
||||||
"settings.cantSelectAudio": "Nav iespējams lietot šo skaņas (audio) ierīci",
|
"settings.cantSelectAudio": "Nav iespējams lietot šo skaņas (audio) ierīci",
|
||||||
"settings.resolution": "Iestatiet jūsu video izšķirtspēju",
|
"settings.resolution": "Iestatiet jūsu video izšķirtspēju",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Sapulces telpas izkārtojums",
|
"settings.layout": "Sapulces telpas izkārtojums",
|
||||||
"settings.selectRoomLayout": "Iestatiet sapulces telpas izkārtojumu",
|
"settings.selectRoomLayout": "Iestatiet sapulces telpas izkārtojumu",
|
||||||
"settings.advancedMode": "Advancētais režīms",
|
"settings.advancedMode": "Advancētais režīms",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Velg lydutgangsenhet",
|
"settings.selectAudioOutput": "Velg lydutgangsenhet",
|
||||||
"settings.cantSelectAudioOutput": "Kan ikke velge lydutgangsenhet",
|
"settings.cantSelectAudioOutput": "Kan ikke velge lydutgangsenhet",
|
||||||
"settings.resolution": "Velg oppløsning",
|
"settings.resolution": "Velg oppløsning",
|
||||||
|
"settings.frameRate": "Velg bildefrekvens",
|
||||||
|
"settings.screenSharingResolution": "Velg skjermdelingsoppløsning",
|
||||||
|
"settings.screenSharingFrameRate": "Velg skjermdelingsbildefrekvens",
|
||||||
"settings.layout": "Møtelayout",
|
"settings.layout": "Møtelayout",
|
||||||
"settings.selectRoomLayout": "Velg møtelayout",
|
"settings.selectRoomLayout": "Velg møtelayout",
|
||||||
"settings.advancedMode": "Avansert modus",
|
"settings.advancedMode": "Avansert modus",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Wybierz urządzenie wyjściowe audio",
|
"settings.selectAudioOutput": "Wybierz urządzenie wyjściowe audio",
|
||||||
"settings.cantSelectAudioOutput": "Nie można wybrać urządzenia wyjściowego audio",
|
"settings.cantSelectAudioOutput": "Nie można wybrać urządzenia wyjściowego audio",
|
||||||
"settings.resolution": "Wybór rozdzielczości wideo",
|
"settings.resolution": "Wybór rozdzielczości wideo",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Układ konferencji",
|
"settings.layout": "Układ konferencji",
|
||||||
"settings.selectRoomLayout": "Ustawienia układu konferencji",
|
"settings.selectRoomLayout": "Ustawienia układu konferencji",
|
||||||
"settings.advancedMode": "Tryb zaawansowany",
|
"settings.advancedMode": "Tryb zaawansowany",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Selecionar dispositivo de saída de áudio",
|
"settings.selectAudioOutput": "Selecionar dispositivo de saída de áudio",
|
||||||
"settings.cantSelectAudioOutput": "Não foi possível selecionar o dispositivo de saída de áudio",
|
"settings.cantSelectAudioOutput": "Não foi possível selecionar o dispositivo de saída de áudio",
|
||||||
"settings.resolution": "Selecione a sua resolução de vídeo",
|
"settings.resolution": "Selecione a sua resolução de vídeo",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Disposição da sala",
|
"settings.layout": "Disposição da sala",
|
||||||
"settings.selectRoomLayout": "Seleccione a disposição da sala",
|
"settings.selectRoomLayout": "Seleccione a disposição da sala",
|
||||||
"settings.advancedMode": "Modo avançado",
|
"settings.advancedMode": "Modo avançado",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Selectați dispozitivul de ieșire audio",
|
"settings.selectAudioOutput": "Selectați dispozitivul de ieșire audio",
|
||||||
"settings.cantSelectAudioOutput": "Imposibil de selectat dispozitivul de ieșire audio",
|
"settings.cantSelectAudioOutput": "Imposibil de selectat dispozitivul de ieșire audio",
|
||||||
"settings.resolution": "Selectează rezoluția video",
|
"settings.resolution": "Selectează rezoluția video",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Aspectul camerei video",
|
"settings.layout": "Aspectul camerei video",
|
||||||
"settings.selectRoomLayout": "Selectează spectul camerei video",
|
"settings.selectRoomLayout": "Selectează spectul camerei video",
|
||||||
"settings.advancedMode": "Mod avansat",
|
"settings.advancedMode": "Mod avansat",
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,9 @@
|
||||||
"settings.selectAudio": "Ses aygıtını seç",
|
"settings.selectAudio": "Ses aygıtını seç",
|
||||||
"settings.cantSelectAudio": "Ses aygıtı seçilemiyor",
|
"settings.cantSelectAudio": "Ses aygıtı seçilemiyor",
|
||||||
"settings.resolution": "Video çözünürlüğü ayarla",
|
"settings.resolution": "Video çözünürlüğü ayarla",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Oda düzeni",
|
"settings.layout": "Oda düzeni",
|
||||||
"settings.selectRoomLayout": "Oda düzeni seç",
|
"settings.selectRoomLayout": "Oda düzeni seç",
|
||||||
"settings.advancedMode": "Detaylı mod",
|
"settings.advancedMode": "Detaylı mod",
|
||||||
|
|
|
||||||
|
|
@ -131,6 +131,9 @@
|
||||||
"settings.selectAudioOutput": "選擇音訊輸出設備",
|
"settings.selectAudioOutput": "選擇音訊輸出設備",
|
||||||
"settings.cantSelectAudioOutput": "無法選擇音訊輸出設備",
|
"settings.cantSelectAudioOutput": "無法選擇音訊輸出設備",
|
||||||
"settings.resolution": "選擇視訊解析度",
|
"settings.resolution": "選擇視訊解析度",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "房間佈局",
|
"settings.layout": "房間佈局",
|
||||||
"settings.selectRoomLayout": "選擇房間佈局",
|
"settings.selectRoomLayout": "選擇房間佈局",
|
||||||
"settings.advancedMode": "進階模式",
|
"settings.advancedMode": "進階模式",
|
||||||
|
|
|
||||||
|
|
@ -132,6 +132,9 @@
|
||||||
"settings.selectAudioOutput": "Виберіть пристрій аудіовиходу",
|
"settings.selectAudioOutput": "Виберіть пристрій аудіовиходу",
|
||||||
"settings.cantSelectAudioOutput": "Неможливо вибрати аудіо вихідний пристрій",
|
"settings.cantSelectAudioOutput": "Неможливо вибрати аудіо вихідний пристрій",
|
||||||
"settings.resolution": "Виберіть роздільну здатність відео",
|
"settings.resolution": "Виберіть роздільну здатність відео",
|
||||||
|
"settings.frameRate": null,
|
||||||
|
"settings.screenSharingResolution": null,
|
||||||
|
"settings.screenSharingFrameRate": null,
|
||||||
"settings.layout": "Розміщення кімнати",
|
"settings.layout": "Розміщення кімнати",
|
||||||
"settings.selectRoomLayout": "Вибір розташування кімнати",
|
"settings.selectRoomLayout": "Вибір розташування кімнати",
|
||||||
"settings.advancedMode": "Розширений режим",
|
"settings.advancedMode": "Розширений режим",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue