Merge branch 'develop' into feat-network-indicator
commit
a6df51bd27
|
|
@ -44,34 +44,47 @@ var config =
|
||||||
},
|
},
|
||||||
defaultAudio :
|
defaultAudio :
|
||||||
{
|
{
|
||||||
sampleRate : 48000,
|
sampleRate : 48000,
|
||||||
channelCount : 1,
|
channelCount : 1,
|
||||||
volume : 1.0,
|
volume : 1.0,
|
||||||
autoGainControl : true,
|
autoGainControl : true,
|
||||||
echoCancellation : true,
|
echoCancellation : true,
|
||||||
noiseSuppression : true,
|
noiseSuppression : true,
|
||||||
sampleSize : 16
|
voiceActivityMute : false,
|
||||||
|
sampleSize : 16
|
||||||
},
|
},
|
||||||
background : 'images/background.jpg',
|
|
||||||
defaultLayout : 'democratic', // democratic, filmstrip
|
/**
|
||||||
|
* Set the auto mute / Push To Talk threshold
|
||||||
|
* default value is 4
|
||||||
|
*
|
||||||
|
* Set it to 0 to disable auto mute functionality,
|
||||||
|
* but use it with caution
|
||||||
|
* full mesh audio strongly decrease room capacity!
|
||||||
|
*/
|
||||||
|
autoMuteThreshold : 4,
|
||||||
|
background : 'images/background.jpg',
|
||||||
|
defaultLayout : 'democratic', // democratic, filmstrip
|
||||||
// If true, will show media control buttons in separate
|
// If true, will show media control buttons in separate
|
||||||
// control bar, not in the ME container.
|
// control bar, not in the ME container.
|
||||||
buttonControlBar : false,
|
buttonControlBar : false,
|
||||||
// If false, will push videos away to make room for side
|
// If false, will push videos away to make room for side
|
||||||
// drawer. If true, will overlay side drawer over videos
|
// drawer. If true, will overlay side drawer over videos
|
||||||
drawerOverlayed : true,
|
drawerOverlayed : true,
|
||||||
|
// Position of notifications
|
||||||
|
notificationPosition : 'right',
|
||||||
// Timeout for autohiding topbar and button control bar
|
// Timeout for autohiding topbar and button control bar
|
||||||
hideTimeout : 3000,
|
hideTimeout : 3000,
|
||||||
lastN : 4,
|
lastN : 4,
|
||||||
mobileLastN : 1,
|
mobileLastN : 1,
|
||||||
// Highest number of speakers user can select
|
// Highest number of speakers user can select
|
||||||
maxLastN : 5,
|
maxLastN : 5,
|
||||||
// If truthy, users can NOT change number of speakers visible
|
// If truthy, users can NOT change number of speakers visible
|
||||||
lockLastN : false,
|
lockLastN : false,
|
||||||
// Add file and uncomment for adding logo to appbar
|
// Add file and uncomment for adding logo to appbar
|
||||||
// logo : 'images/logo.svg',
|
// logo : 'images/logo.svg',
|
||||||
title : 'Multiparty meeting',
|
title : 'Multiparty meeting',
|
||||||
theme :
|
theme :
|
||||||
{
|
{
|
||||||
palette :
|
palette :
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -306,6 +306,22 @@ export default class RoomClient
|
||||||
|
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
|
case String.fromCharCode(37):
|
||||||
|
{
|
||||||
|
const newPeerId = this._spotlights.getPrevAsSelected(
|
||||||
|
store.getState().room.selectedPeerId);
|
||||||
|
|
||||||
|
if (newPeerId) this.setSelectedPeer(newPeerId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case String.fromCharCode(39):
|
||||||
|
{
|
||||||
|
const newPeerId = this._spotlights.getNextAsSelected(
|
||||||
|
store.getState().room.selectedPeerId);
|
||||||
|
|
||||||
|
if (newPeerId) this.setSelectedPeer(newPeerId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'A': // Activate advanced mode
|
case 'A': // Activate advanced mode
|
||||||
{
|
{
|
||||||
store.dispatch(settingsActions.toggleAdvancedMode());
|
store.dispatch(settingsActions.toggleAdvancedMode());
|
||||||
|
|
@ -1025,37 +1041,50 @@ export default class RoomClient
|
||||||
if (!this._harkStream.getAudioTracks()[0])
|
if (!this._harkStream.getAudioTracks()[0])
|
||||||
throw new Error('getMicStream():something went wrong with hark');
|
throw new Error('getMicStream():something went wrong with hark');
|
||||||
|
|
||||||
this._hark = hark(this._harkStream, { play: false });
|
this._hark = hark(this._harkStream,
|
||||||
|
{
|
||||||
|
play : false,
|
||||||
|
interval : 5,
|
||||||
|
threshold : store.getState().settings.noiseThreshold,
|
||||||
|
history : 30
|
||||||
|
});
|
||||||
|
this._hark.lastVolume = -100;
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
this._hark.on('volume_change', (volume) =>
|
||||||
this._hark.on('volume_change', (dBs, threshold) =>
|
|
||||||
{
|
{
|
||||||
// The exact formula to convert from dBs (-100..0) to linear (0..1) is:
|
|
||||||
// Math.pow(10, dBs / 20)
|
|
||||||
// However it does not produce a visually useful output, so let exagerate
|
|
||||||
// it a bit. Also, let convert it from 0..1 to 0..10 and avoid value 1 to
|
|
||||||
// minimize component renderings.
|
|
||||||
let volume = Math.round(Math.pow(10, dBs / 85) * 10);
|
|
||||||
|
|
||||||
if (volume === 1)
|
|
||||||
volume = 0;
|
|
||||||
|
|
||||||
volume = Math.round(volume);
|
volume = Math.round(volume);
|
||||||
|
if (this._micProducer && volume !== Math.round(this._hark.lastVolume))
|
||||||
if (this._micProducer && volume !== this._micProducer.volume)
|
|
||||||
{
|
{
|
||||||
this._micProducer.volume = volume;
|
if (volume < this._hark.lastVolume * 1.02)
|
||||||
|
{
|
||||||
|
volume = this._hark.lastVolume * 1.02;
|
||||||
|
}
|
||||||
|
this._hark.lastVolume = volume;
|
||||||
store.dispatch(peerVolumeActions.setPeerVolume(this._peerId, volume));
|
store.dispatch(peerVolumeActions.setPeerVolume(this._peerId, volume));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this._hark.on('speaking', function()
|
this._hark.on('speaking', () =>
|
||||||
{
|
{
|
||||||
store.dispatch(meActions.setIsSpeaking(true));
|
store.dispatch(meActions.setIsSpeaking(true));
|
||||||
|
if ((store.getState().settings.voiceActivatedUnmute ||
|
||||||
|
store.getState().me.isAutoMuted) &&
|
||||||
|
this._micProducer &&
|
||||||
|
this._micProducer.paused)
|
||||||
|
{
|
||||||
|
this._micProducer.resume();
|
||||||
|
}
|
||||||
|
store.dispatch(meActions.setAutoMuted(false)); // sanity action
|
||||||
});
|
});
|
||||||
this._hark.on('stopped_speaking', function()
|
this._hark.on('stopped_speaking', () =>
|
||||||
{
|
{
|
||||||
store.dispatch(meActions.setIsSpeaking(false));
|
store.dispatch(meActions.setIsSpeaking(false));
|
||||||
|
if (store.getState().settings.voiceActivatedUnmute &&
|
||||||
|
this._micProducer &&
|
||||||
|
!this._micProducer.paused)
|
||||||
|
{
|
||||||
|
this._micProducer.pause();
|
||||||
|
store.dispatch(meActions.setAutoMuted(true));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1470,6 +1499,26 @@ export default class RoomClient
|
||||||
peerActions.setStopPeerVideoInProgress(peerId, false));
|
peerActions.setStopPeerVideoInProgress(peerId, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async stopPeerScreenSharing(peerId)
|
||||||
|
{
|
||||||
|
logger.debug('stopPeerScreenSharing() [peerId:"%s"]', peerId);
|
||||||
|
|
||||||
|
store.dispatch(
|
||||||
|
peerActions.setStopPeerScreenSharingInProgress(peerId, true));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await this.sendRequest('moderator:stopScreenSharing', { peerId });
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
logger.error('stopPeerScreenSharing() failed: %o', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
store.dispatch(
|
||||||
|
peerActions.setStopPeerScreenSharingInProgress(peerId, false));
|
||||||
|
}
|
||||||
|
|
||||||
async muteAllPeers()
|
async muteAllPeers()
|
||||||
{
|
{
|
||||||
logger.debug('muteAllPeers()');
|
logger.debug('muteAllPeers()');
|
||||||
|
|
@ -1510,6 +1559,26 @@ export default class RoomClient
|
||||||
roomActions.setStopAllVideoInProgress(false));
|
roomActions.setStopAllVideoInProgress(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async stopAllPeerScreenSharing()
|
||||||
|
{
|
||||||
|
logger.debug('stopAllPeerScreenSharing()');
|
||||||
|
|
||||||
|
store.dispatch(
|
||||||
|
roomActions.setStopAllScreenSharingInProgress(true));
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await this.sendRequest('moderator:stopAllScreenSharing');
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
logger.error('stopAllPeerScreenSharing() failed: %o', error);
|
||||||
|
}
|
||||||
|
|
||||||
|
store.dispatch(
|
||||||
|
roomActions.setStopAllScreenSharingInProgress(false));
|
||||||
|
}
|
||||||
|
|
||||||
async closeMeeting()
|
async closeMeeting()
|
||||||
{
|
{
|
||||||
logger.debug('closeMeeting()');
|
logger.debug('closeMeeting()');
|
||||||
|
|
@ -1944,23 +2013,12 @@ export default class RoomClient
|
||||||
producerPaused
|
producerPaused
|
||||||
} = request.data;
|
} = request.data;
|
||||||
|
|
||||||
let codecOptions;
|
|
||||||
|
|
||||||
if (kind === 'audio')
|
|
||||||
{
|
|
||||||
codecOptions =
|
|
||||||
{
|
|
||||||
opusStereo : 1
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const consumer = await this._recvTransport.consume(
|
const consumer = await this._recvTransport.consume(
|
||||||
{
|
{
|
||||||
id,
|
id,
|
||||||
producerId,
|
producerId,
|
||||||
kind,
|
kind,
|
||||||
rtpParameters,
|
rtpParameters,
|
||||||
codecOptions,
|
|
||||||
appData : { ...appData, peerId } // Trick.
|
appData : { ...appData, peerId } // Trick.
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -2013,19 +2071,8 @@ export default class RoomClient
|
||||||
|
|
||||||
consumer.hark = hark(stream, { play: false });
|
consumer.hark = hark(stream, { play: false });
|
||||||
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
consumer.hark.on('volume_change', (volume) =>
|
||||||
consumer.hark.on('volume_change', (dBs, threshold) =>
|
|
||||||
{
|
{
|
||||||
// The exact formula to convert from dBs (-100..0) to linear (0..1) is:
|
|
||||||
// Math.pow(10, dBs / 20)
|
|
||||||
// However it does not produce a visually useful output, so let exaggerate
|
|
||||||
// it a bit. Also, let convert it from 0..1 to 0..10 and avoid value 1 to
|
|
||||||
// minimize component renderings.
|
|
||||||
let volume = Math.round(Math.pow(10, dBs / 85) * 10);
|
|
||||||
|
|
||||||
if (volume === 1)
|
|
||||||
volume = 0;
|
|
||||||
|
|
||||||
volume = Math.round(volume);
|
volume = Math.round(volume);
|
||||||
|
|
||||||
if (consumer && volume !== consumer.volume)
|
if (consumer && volume !== consumer.volume)
|
||||||
|
|
@ -2631,7 +2678,6 @@ export default class RoomClient
|
||||||
case 'moderator:stopVideo':
|
case 'moderator:stopVideo':
|
||||||
{
|
{
|
||||||
this.disableWebcam();
|
this.disableWebcam();
|
||||||
this.disableScreenSharing();
|
|
||||||
|
|
||||||
store.dispatch(requestActions.notify(
|
store.dispatch(requestActions.notify(
|
||||||
{
|
{
|
||||||
|
|
@ -2644,6 +2690,21 @@ export default class RoomClient
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'moderator:stopScreenSharing':
|
||||||
|
{
|
||||||
|
this.disableScreenSharing();
|
||||||
|
|
||||||
|
store.dispatch(requestActions.notify(
|
||||||
|
{
|
||||||
|
text : intl.formatMessage({
|
||||||
|
id : 'moderator.muteScreenSharingModerator',
|
||||||
|
defaultMessage : 'Moderator stopped your screen sharing'
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'moderator:kick':
|
case 'moderator:kick':
|
||||||
{
|
{
|
||||||
// Need some feedback
|
// Need some feedback
|
||||||
|
|
@ -2999,7 +3060,9 @@ export default class RoomClient
|
||||||
if (!this._muted)
|
if (!this._muted)
|
||||||
{
|
{
|
||||||
await this.enableMic();
|
await this.enableMic();
|
||||||
if (peers.length > 4)
|
const { autoMuteThreshold } = store.getState().settings;
|
||||||
|
|
||||||
|
if (autoMuteThreshold && peers.length > autoMuteThreshold)
|
||||||
this.muteMic();
|
this.muteMic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3645,6 +3708,8 @@ export default class RoomClient
|
||||||
|
|
||||||
this._screenSharingProducer = null;
|
this._screenSharingProducer = null;
|
||||||
|
|
||||||
|
this._screenSharing.stop();
|
||||||
|
|
||||||
store.dispatch(meActions.setScreenShareInProgress(false));
|
store.dispatch(meActions.setScreenShareInProgress(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3853,6 +3918,14 @@ export default class RoomClient
|
||||||
store.dispatch(meActions.setWebcamInProgress(false));
|
store.dispatch(meActions.setWebcamInProgress(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _setNoiseThreshold(threshold)
|
||||||
|
{
|
||||||
|
logger.debug('_setNoiseThreshold:%s', threshold);
|
||||||
|
this._hark.setThreshold(threshold);
|
||||||
|
store.dispatch(
|
||||||
|
settingsActions.setNoiseThreshold(threshold));
|
||||||
|
}
|
||||||
|
|
||||||
async _updateAudioDevices()
|
async _updateAudioDevices()
|
||||||
{
|
{
|
||||||
logger.debug('_updateAudioDevices()');
|
logger.debug('_updateAudioDevices()');
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ export default class Spotlights extends EventEmitter
|
||||||
this._signalingSocket = signalingSocket;
|
this._signalingSocket = signalingSocket;
|
||||||
this._maxSpotlights = maxSpotlights;
|
this._maxSpotlights = maxSpotlights;
|
||||||
this._peerList = [];
|
this._peerList = [];
|
||||||
|
this._unmutablePeerList = [];
|
||||||
this._selectedSpotlights = [];
|
this._selectedSpotlights = [];
|
||||||
this._currentSpotlights = [];
|
this._currentSpotlights = [];
|
||||||
this._started = false;
|
this._started = false;
|
||||||
|
|
@ -45,6 +46,74 @@ export default class Spotlights extends EventEmitter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getNextAsSelected(peerId)
|
||||||
|
{
|
||||||
|
let newSelectedPeer = null;
|
||||||
|
|
||||||
|
if (peerId == null && this._unmutablePeerList.length > 0)
|
||||||
|
{
|
||||||
|
peerId = this._unmutablePeerList[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (peerId != null && this._currentSpotlights.length < this._unmutablePeerList.length)
|
||||||
|
{
|
||||||
|
const oldIndex = this._unmutablePeerList.indexOf(peerId);
|
||||||
|
|
||||||
|
let index = oldIndex;
|
||||||
|
|
||||||
|
index++;
|
||||||
|
for (let i = 0; i < this._unmutablePeerList.length; i++)
|
||||||
|
{
|
||||||
|
if (index >= this._unmutablePeerList.length)
|
||||||
|
{
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
newSelectedPeer = this._unmutablePeerList[index];
|
||||||
|
if (!this._currentSpotlights.includes(newSelectedPeer))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newSelectedPeer;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPrevAsSelected(peerId)
|
||||||
|
{
|
||||||
|
let newSelectedPeer = null;
|
||||||
|
|
||||||
|
if (peerId == null && this._unmutablePeerList.length > 0)
|
||||||
|
{
|
||||||
|
peerId = this._unmutablePeerList[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (peerId != null && this._currentSpotlights.length < this._unmutablePeerList.length)
|
||||||
|
{
|
||||||
|
const oldIndex = this._unmutablePeerList.indexOf(peerId);
|
||||||
|
|
||||||
|
let index = oldIndex;
|
||||||
|
|
||||||
|
index--;
|
||||||
|
for (let i = 0; i < this._unmutablePeerList.length; i++)
|
||||||
|
{
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
index = this._unmutablePeerList.length - 1;
|
||||||
|
}
|
||||||
|
newSelectedPeer = this._unmutablePeerList[index];
|
||||||
|
if (!this._currentSpotlights.includes(newSelectedPeer))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newSelectedPeer;
|
||||||
|
}
|
||||||
|
|
||||||
setPeerSpotlight(peerId)
|
setPeerSpotlight(peerId)
|
||||||
{
|
{
|
||||||
logger.debug('setPeerSpotlight() [peerId:"%s"]', peerId);
|
logger.debug('setPeerSpotlight() [peerId:"%s"]', peerId);
|
||||||
|
|
@ -114,6 +183,7 @@ export default class Spotlights extends EventEmitter
|
||||||
logger.debug('_handlePeer() | adding peer [peerId: "%s"]', id);
|
logger.debug('_handlePeer() | adding peer [peerId: "%s"]', id);
|
||||||
|
|
||||||
this._peerList.push(id);
|
this._peerList.push(id);
|
||||||
|
this._unmutablePeerList.push(id);
|
||||||
|
|
||||||
if (this._started)
|
if (this._started)
|
||||||
this._spotlightsUpdated();
|
this._spotlightsUpdated();
|
||||||
|
|
@ -126,6 +196,7 @@ export default class Spotlights extends EventEmitter
|
||||||
'room "peerClosed" event [peerId:%o]', id);
|
'room "peerClosed" event [peerId:%o]', id);
|
||||||
|
|
||||||
this._peerList = this._peerList.filter((peer) => peer !== id);
|
this._peerList = this._peerList.filter((peer) => peer !== id);
|
||||||
|
this._unmutablePeerList = this._unmutablePeerList.filter((peer) => peer !== id);
|
||||||
|
|
||||||
this._selectedSpotlights = this._selectedSpotlights.filter((peer) => peer !== id);
|
this._selectedSpotlights = this._selectedSpotlights.filter((peer) => peer !== id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,3 +110,9 @@ export const setIsSpeaking = (flag) =>
|
||||||
type : 'SET_IS_SPEAKING',
|
type : 'SET_IS_SPEAKING',
|
||||||
payload : { flag }
|
payload : { flag }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setAutoMuted = (flag) =>
|
||||||
|
({
|
||||||
|
type : 'SET_AUTO_MUTED',
|
||||||
|
payload : { flag }
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -86,3 +86,9 @@ export const setStopPeerVideoInProgress = (peerId, flag) =>
|
||||||
type : 'STOP_PEER_VIDEO_IN_PROGRESS',
|
type : 'STOP_PEER_VIDEO_IN_PROGRESS',
|
||||||
payload : { peerId, flag }
|
payload : { peerId, flag }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setStopPeerScreenSharingInProgress = (peerId, flag) =>
|
||||||
|
({
|
||||||
|
type : 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS',
|
||||||
|
payload : { peerId, flag }
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -164,6 +164,12 @@ export const setStopAllVideoInProgress = (flag) =>
|
||||||
payload : { flag }
|
payload : { flag }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setStopAllScreenSharingInProgress = (flag) =>
|
||||||
|
({
|
||||||
|
type : 'STOP_ALL_SCREEN_SHARING_IN_PROGRESS',
|
||||||
|
payload : { flag }
|
||||||
|
});
|
||||||
|
|
||||||
export const setCloseMeetingInProgress = (flag) =>
|
export const setCloseMeetingInProgress = (flag) =>
|
||||||
({
|
({
|
||||||
type : 'CLOSE_MEETING_IN_PROGRESS',
|
type : 'CLOSE_MEETING_IN_PROGRESS',
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,18 @@ export const setNoiseSuppression = (noiseSuppression) =>
|
||||||
payload : { noiseSuppression }
|
payload : { noiseSuppression }
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setVoiceActivatedUnmute = (voiceActivatedUnmute) =>
|
||||||
|
({
|
||||||
|
type: 'SET_VOICE_ACTIVATED_UNMUTE',
|
||||||
|
payload: { voiceActivatedUnmute }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const setNoiseThreshold = (noiseThreshold) =>
|
||||||
|
({
|
||||||
|
type: 'SET_NOISE_THRESHOLD',
|
||||||
|
payload: { noiseThreshold }
|
||||||
|
});
|
||||||
|
|
||||||
export const setDefaultAudio = (audio) =>
|
export const setDefaultAudio = (audio) =>
|
||||||
({
|
({
|
||||||
type : 'SET_DEFAULT_AUDIO',
|
type : 'SET_DEFAULT_AUDIO',
|
||||||
|
|
|
||||||
|
|
@ -137,14 +137,15 @@ const styles = (theme) =>
|
||||||
transform : 'translate(-50%, 0%)',
|
transform : 'translate(-50%, 0%)',
|
||||||
color : 'rgba(255, 255, 255, 0.7)',
|
color : 'rgba(255, 255, 255, 0.7)',
|
||||||
fontSize : '1.3em',
|
fontSize : '1.3em',
|
||||||
backgroundColor : 'rgba(255, 0, 0, 0.9)',
|
backgroundColor : 'rgba(245, 0, 87, 0.70)',
|
||||||
margin : '4px',
|
margin : '4px',
|
||||||
padding : theme.spacing(2),
|
padding : theme.spacing(2),
|
||||||
zIndex : 31,
|
zIndex : 1200,
|
||||||
borderRadius : '20px',
|
borderRadius : '20px',
|
||||||
textAlign : 'center',
|
textAlign : 'center',
|
||||||
opacity : 0,
|
opacity : 0,
|
||||||
transition : 'opacity 1s ease',
|
transition : 'opacity 1s ease',
|
||||||
|
pointerEvents : 'none',
|
||||||
'&.enabled' :
|
'&.enabled' :
|
||||||
{
|
{
|
||||||
transition : 'opacity 0.1s',
|
transition : 'opacity 0.1s',
|
||||||
|
|
@ -176,7 +177,9 @@ const Me = (props) =>
|
||||||
extraVideoProducers,
|
extraVideoProducers,
|
||||||
canShareScreen,
|
canShareScreen,
|
||||||
classes,
|
classes,
|
||||||
transports
|
transports,
|
||||||
|
noiseVolume,
|
||||||
|
classes
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const videoVisible = (
|
const videoVisible = (
|
||||||
|
|
@ -285,6 +288,25 @@ const Me = (props) =>
|
||||||
defaultMessage : 'Start screen sharing'
|
defaultMessage : 'Start screen sharing'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
const [
|
||||||
|
screenShareTooltipOpen,
|
||||||
|
screenShareTooltipSetOpen
|
||||||
|
] = React.useState(false);
|
||||||
|
|
||||||
|
const screenShareTooltipHandleClose = () =>
|
||||||
|
{
|
||||||
|
screenShareTooltipSetOpen(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
const screenShareTooltipHandleOpen = () =>
|
||||||
|
{
|
||||||
|
screenShareTooltipSetOpen(true);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (screenState === 'off' && me.screenShareInProgress && screenShareTooltipOpen)
|
||||||
|
{
|
||||||
|
screenShareTooltipHandleClose();
|
||||||
|
}
|
||||||
|
|
||||||
const spacingStyle =
|
const spacingStyle =
|
||||||
{
|
{
|
||||||
|
|
@ -346,7 +368,7 @@ const Me = (props) =>
|
||||||
style={spacingStyle}
|
style={spacingStyle}
|
||||||
>
|
>
|
||||||
|
|
||||||
{ me.browser.platform !== 'mobile' &&
|
{ me.browser.platform !== 'mobile' && smallContainer &&
|
||||||
<div className={classnames(
|
<div className={classnames(
|
||||||
classes.ptt,
|
classes.ptt,
|
||||||
(micState === 'muted' && me.isSpeaking) ? 'enabled' : null
|
(micState === 'muted' && me.isSpeaking) ? 'enabled' : null
|
||||||
|
|
@ -355,10 +377,22 @@ const Me = (props) =>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='me.mutedPTT'
|
id='me.mutedPTT'
|
||||||
defaultMessage='You are muted, hold down SPACE-BAR to talk'
|
defaultMessage='You are muted, hold down SPACE-BAR to talk'
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<div className={classes.viewContainer} style={style}>
|
<div className={classes.viewContainer} style={style}>
|
||||||
|
{ me.browser.platform !== 'mobile' && !smallContainer &&
|
||||||
|
<div className={classnames(
|
||||||
|
classes.ptt,
|
||||||
|
(micState === 'muted' && me.isSpeaking) ? 'enabled' : null
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
id='me.mutedPTT'
|
||||||
|
defaultMessage='You are muted, hold down SPACE-BAR to talk'
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
<p className={
|
<p className={
|
||||||
classnames(
|
classnames(
|
||||||
classes.meTag,
|
classes.meTag,
|
||||||
|
|
@ -409,7 +443,12 @@ const Me = (props) =>
|
||||||
})}
|
})}
|
||||||
className={classes.smallContainer}
|
className={classes.smallContainer}
|
||||||
disabled={!me.canSendMic || me.audioInProgress}
|
disabled={!me.canSendMic || me.audioInProgress}
|
||||||
color={micState === 'on' ? 'primary' : 'secondary'}
|
color={
|
||||||
|
micState === 'on' ?
|
||||||
|
settings.voiceActivatedUnmute && !me.isAutoMuted ?
|
||||||
|
'primary'
|
||||||
|
: 'default'
|
||||||
|
: 'secondary'}
|
||||||
size='small'
|
size='small'
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
{
|
{
|
||||||
|
|
@ -422,7 +461,10 @@ const Me = (props) =>
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{ micState === 'on' ?
|
{ micState === 'on' ?
|
||||||
<MicIcon />
|
<MicIcon
|
||||||
|
color={me.isAutoMuted ? 'secondary' : 'primary'}
|
||||||
|
style={{ opacity: noiseVolume }}
|
||||||
|
/>
|
||||||
:
|
:
|
||||||
<MicOffIcon />
|
<MicOffIcon />
|
||||||
}
|
}
|
||||||
|
|
@ -437,7 +479,10 @@ const Me = (props) =>
|
||||||
})}
|
})}
|
||||||
className={classes.fab}
|
className={classes.fab}
|
||||||
disabled={!me.canSendMic || me.audioInProgress}
|
disabled={!me.canSendMic || me.audioInProgress}
|
||||||
color={micState === 'on' ? 'default' : 'secondary'}
|
color={micState === 'on' ?
|
||||||
|
settings.voiceActivatedUnmute && !me.isAutoMuted? 'primary'
|
||||||
|
: 'default'
|
||||||
|
: 'secondary'}
|
||||||
size='large'
|
size='large'
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
{
|
{
|
||||||
|
|
@ -450,7 +495,11 @@ const Me = (props) =>
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{ micState === 'on' ?
|
{ micState === 'on' ?
|
||||||
<MicIcon />
|
<MicIcon
|
||||||
|
color={me.isAutoMuted ? 'secondary' : 'primary'}
|
||||||
|
style={me.isAutoMuted ? { opacity: noiseVolume }
|
||||||
|
: { opacity: 1 }}
|
||||||
|
/>
|
||||||
:
|
:
|
||||||
<MicOffIcon />
|
<MicOffIcon />
|
||||||
}
|
}
|
||||||
|
|
@ -512,7 +561,11 @@ const Me = (props) =>
|
||||||
}
|
}
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
{ me.browser.platform !== 'mobile' &&
|
{ me.browser.platform !== 'mobile' &&
|
||||||
<Tooltip title={screenTip} placement='left'>
|
<Tooltip open={screenShareTooltipOpen}
|
||||||
|
onClose={screenShareTooltipHandleClose}
|
||||||
|
onOpen={screenShareTooltipHandleOpen}
|
||||||
|
title={screenTip} placement='left'
|
||||||
|
>
|
||||||
{ smallContainer ?
|
{ smallContainer ?
|
||||||
<div>
|
<div>
|
||||||
<IconButton
|
<IconButton
|
||||||
|
|
@ -834,6 +887,7 @@ Me.propTypes =
|
||||||
style : PropTypes.object,
|
style : PropTypes.object,
|
||||||
smallContainer : PropTypes.bool,
|
smallContainer : PropTypes.bool,
|
||||||
canShareScreen : PropTypes.bool.isRequired,
|
canShareScreen : PropTypes.bool.isRequired,
|
||||||
|
noiseVolume : PropTypes.number,
|
||||||
classes : PropTypes.object.isRequired,
|
classes : PropTypes.object.isRequired,
|
||||||
theme : PropTypes.object.isRequired,
|
theme : PropTypes.object.isRequired,
|
||||||
transports : PropTypes.object.isRequired
|
transports : PropTypes.object.isRequired
|
||||||
|
|
@ -845,13 +899,27 @@ const makeMapStateToProps = () =>
|
||||||
|
|
||||||
const mapStateToProps = (state) =>
|
const mapStateToProps = (state) =>
|
||||||
{
|
{
|
||||||
|
let volume;
|
||||||
|
|
||||||
|
// noiseVolume under threshold
|
||||||
|
if (state.peerVolumes[state.me.id] < state.settings.noiseThreshold)
|
||||||
|
{
|
||||||
|
// noiseVolume mapped to range 0.5 ... 1 (threshold switch)
|
||||||
|
volume = 1 + ((Math.abs(state.peerVolumes[state.me.id] -
|
||||||
|
state.settings.noiseThreshold) / (-120 -
|
||||||
|
state.settings.noiseThreshold)));
|
||||||
|
}
|
||||||
|
// noiseVolume over threshold: no noise but voice
|
||||||
|
else { volume = 0; }
|
||||||
|
|
||||||
return {
|
return {
|
||||||
me : state.me,
|
me : state.me,
|
||||||
...meProducersSelector(state),
|
...meProducersSelector(state),
|
||||||
settings : state.settings,
|
settings : state.settings,
|
||||||
activeSpeaker : state.me.id === state.room.activeSpeakerId,
|
activeSpeaker : state.me.id === state.room.activeSpeakerId,
|
||||||
canShareScreen : hasPermission(state),
|
canShareScreen : hasPermission(state),
|
||||||
transports : state.transports
|
transports : state.transports,
|
||||||
|
noiseVolume : volume
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -868,6 +936,8 @@ export default withRoomContext(connect(
|
||||||
return (
|
return (
|
||||||
prev.room === next.room &&
|
prev.room === next.room &&
|
||||||
prev.me === next.me &&
|
prev.me === next.me &&
|
||||||
|
Math.round(prev.peerVolumes[prev.me.id]) ===
|
||||||
|
Math.round(next.peerVolumes[next.me.id]) &&
|
||||||
prev.peers === next.peers &&
|
prev.peers === next.peers &&
|
||||||
prev.producers === next.producers &&
|
prev.producers === next.producers &&
|
||||||
prev.settings === next.settings,
|
prev.settings === next.settings,
|
||||||
|
|
|
||||||
|
|
@ -94,17 +94,17 @@ const styles = () =>
|
||||||
smallBar :
|
smallBar :
|
||||||
{
|
{
|
||||||
flex : '0 0 auto',
|
flex : '0 0 auto',
|
||||||
margin : '0.3rem',
|
|
||||||
backgroundSize : '75%',
|
backgroundSize : '75%',
|
||||||
backgroundRepeat : 'no-repeat',
|
backgroundRepeat : 'no-repeat',
|
||||||
backgroundColor : 'rgba(0, 0, 0, 1)',
|
backgroundColor : 'rgba(0, 0, 0, 1)',
|
||||||
cursor : 'pointer',
|
cursor : 'pointer',
|
||||||
transitionProperty : 'opacity, background-color',
|
transitionProperty : 'opacity, background-color',
|
||||||
width : 3,
|
width : 3,
|
||||||
borderRadius : 6,
|
borderRadius : 2,
|
||||||
transitionDuration : '0.25s',
|
transitionDuration : '0.25s',
|
||||||
position : 'absolute',
|
position : 'absolute',
|
||||||
bottom : 0,
|
top : '50%',
|
||||||
|
transform : 'translateY(-50%)',
|
||||||
'&.level0' : { height: 0 },
|
'&.level0' : { height: 0 },
|
||||||
'&.level1' : { height: '0.2vh' },
|
'&.level1' : { height: '0.2vh' },
|
||||||
'&.level2' : { height: '0.4vh' },
|
'&.level2' : { height: '0.4vh' },
|
||||||
|
|
@ -149,9 +149,16 @@ const makeMapStateToProps = (initialState, props) =>
|
||||||
{
|
{
|
||||||
const mapStateToProps = (state) =>
|
const mapStateToProps = (state) =>
|
||||||
{
|
{
|
||||||
return {
|
if (state.peerVolumes[props.id]>state.settings.noiseThreshold)
|
||||||
volume : state.peerVolumes[props.id]
|
{
|
||||||
};
|
return {
|
||||||
|
volume : Math.round((state.peerVolumes[props.id]+100) / 10)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return { volume: 0 };
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
return mapStateToProps;
|
return mapStateToProps;
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ const shortcuts=[
|
||||||
{ key: '1', label: 'label.democratic', defaultMessage: 'Democratic View' },
|
{ key: '1', label: 'label.democratic', defaultMessage: 'Democratic View' },
|
||||||
{ key: '2', label: 'label.filmstrip', defaultMessage: 'Filmstrip View' },
|
{ key: '2', label: 'label.filmstrip', defaultMessage: 'Filmstrip View' },
|
||||||
{ key: 'space', label: 'me.mutedPTT', defaultMessage: 'Push SPACE to talk' },
|
{ key: 'space', label: 'me.mutedPTT', defaultMessage: 'Push SPACE to talk' },
|
||||||
{ key: 'a', label: 'label.advanced', defaultMessage: 'Show advanced information' }
|
{ key: 'a', label: 'label.advanced', defaultMessage: 'Show advanced information' },
|
||||||
|
{ key: `${String.fromCharCode(8592)} ${String.fromCharCode(8594)}`, label: 'room.browsePeersSpotlight', defaultMessage: 'Browse participants into Spotlight' }
|
||||||
];
|
];
|
||||||
const styles = (theme) =>
|
const styles = (theme) =>
|
||||||
({
|
({
|
||||||
|
|
|
||||||
|
|
@ -480,6 +480,34 @@ const TopBar = (props) =>
|
||||||
<MoreIcon />
|
<MoreIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</div>
|
</div>
|
||||||
|
{ lobbyPeers.length > 0 &&
|
||||||
|
<Tooltip
|
||||||
|
title={intl.formatMessage({
|
||||||
|
id : 'tooltip.lobby',
|
||||||
|
defaultMessage : 'Show lobby'
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
<span className={classes.disabledButton}>
|
||||||
|
<IconButton
|
||||||
|
aria-label={intl.formatMessage({
|
||||||
|
id : 'tooltip.lobby',
|
||||||
|
defaultMessage : 'Show lobby'
|
||||||
|
})}
|
||||||
|
className={classes.actionButton}
|
||||||
|
color='inherit'
|
||||||
|
disabled={!canPromote}
|
||||||
|
onClick={() => setLockDialogOpen(!room.lockDialogOpen)}
|
||||||
|
>
|
||||||
|
<PulsingBadge
|
||||||
|
color='secondary'
|
||||||
|
badgeContent={lobbyPeers.length}
|
||||||
|
>
|
||||||
|
<SecurityIcon />
|
||||||
|
</PulsingBadge>
|
||||||
|
</IconButton>
|
||||||
|
</span>
|
||||||
|
</Tooltip>
|
||||||
|
}
|
||||||
<div className={classes.divider} />
|
<div className={classes.divider} />
|
||||||
<Button
|
<Button
|
||||||
aria-label={intl.formatMessage({
|
aria-label={intl.formatMessage({
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,22 @@ const ListModerator = (props) =>
|
||||||
/>
|
/>
|
||||||
</Button>
|
</Button>
|
||||||
<div className={classes.divider} />
|
<div className={classes.divider} />
|
||||||
|
<Button
|
||||||
|
aria-label={intl.formatMessage({
|
||||||
|
id : 'room.stopAllScreenSharing',
|
||||||
|
defaultMessage : 'Stop all screen sharing'
|
||||||
|
})}
|
||||||
|
variant='contained'
|
||||||
|
color='secondary'
|
||||||
|
disabled={room.stopAllScreenSharingInProgress}
|
||||||
|
onClick={() => roomClient.stopAllPeerScreenSharing()}
|
||||||
|
>
|
||||||
|
<FormattedMessage
|
||||||
|
id='room.stopAllScreenSharing'
|
||||||
|
defaultMessage='Stop all screen sharing'
|
||||||
|
/>
|
||||||
|
</Button>
|
||||||
|
<div className={classes.divider} />
|
||||||
<Button
|
<Button
|
||||||
aria-label={intl.formatMessage({
|
aria-label={intl.formatMessage({
|
||||||
id : 'room.closeMeeting',
|
id : 'room.closeMeeting',
|
||||||
|
|
|
||||||
|
|
@ -255,8 +255,8 @@ const ListPeer = (props) =>
|
||||||
{ isModerator && micConsumer &&
|
{ isModerator && micConsumer &&
|
||||||
<Tooltip
|
<Tooltip
|
||||||
title={intl.formatMessage({
|
title={intl.formatMessage({
|
||||||
id : 'tooltip.muteParticipant',
|
id : 'tooltip.muteParticipantAudioModerator',
|
||||||
defaultMessage : 'Mute globally participant mic'
|
defaultMessage : 'Mute participant audio globally'
|
||||||
})}
|
})}
|
||||||
placement='bottom'
|
placement='bottom'
|
||||||
>
|
>
|
||||||
|
|
@ -282,8 +282,8 @@ const ListPeer = (props) =>
|
||||||
{ isModerator && webcamConsumer &&
|
{ isModerator && webcamConsumer &&
|
||||||
<Tooltip
|
<Tooltip
|
||||||
title={intl.formatMessage({
|
title={intl.formatMessage({
|
||||||
id : 'tooltip.muteParticipantVideo',
|
id : 'tooltip.muteParticipantVideoModerator',
|
||||||
defaultMessage : 'Mute globally participant video'
|
defaultMessage : 'Mute participant video globally'
|
||||||
})}
|
})}
|
||||||
placement='bottom'
|
placement='bottom'
|
||||||
>
|
>
|
||||||
|
|
@ -306,6 +306,33 @@ const ListPeer = (props) =>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
}
|
}
|
||||||
|
{ isModerator && screenConsumer &&
|
||||||
|
<Tooltip
|
||||||
|
title={intl.formatMessage({
|
||||||
|
id : 'tooltip.muteScreenSharingModerator',
|
||||||
|
defaultMessage : 'Mute participant screen share globally'
|
||||||
|
})}
|
||||||
|
placement='bottom'
|
||||||
|
>
|
||||||
|
<IconButton
|
||||||
|
className={classes.buttons}
|
||||||
|
style={{ color: green[500] }}
|
||||||
|
disabled={!isModerator || peer.stopPeerScreenSharingInProgress}
|
||||||
|
onClick={(e) =>
|
||||||
|
{
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
roomClient.stopPeerScreenSharing(peer.id);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{ !screenConsumer.remotelyPaused ?
|
||||||
|
<ScreenIcon />
|
||||||
|
:
|
||||||
|
<ScreenOffIcon />
|
||||||
|
}
|
||||||
|
</IconButton>
|
||||||
|
</Tooltip>
|
||||||
|
}
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import PropTypes from 'prop-types';
|
||||||
import { withSnackbar } from 'notistack';
|
import { withSnackbar } from 'notistack';
|
||||||
import * as notificationActions from '../../actions/notificationActions';
|
import * as notificationActions from '../../actions/notificationActions';
|
||||||
|
|
||||||
|
const notificationPosition = window.config.notificationPosition || 'right';
|
||||||
|
|
||||||
class Notifications extends Component
|
class Notifications extends Component
|
||||||
{
|
{
|
||||||
displayed = [];
|
displayed = [];
|
||||||
|
|
@ -45,7 +47,7 @@ class Notifications extends Component
|
||||||
autoHideDuration : notification.timeout,
|
autoHideDuration : notification.timeout,
|
||||||
anchorOrigin : {
|
anchorOrigin : {
|
||||||
vertical : 'bottom',
|
vertical : 'bottom',
|
||||||
horizontal : 'left'
|
horizontal : notificationPosition
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -6,31 +6,66 @@ import { withRoomContext } from '../../RoomContext';
|
||||||
import * as settingsActions from '../../actions/settingsActions';
|
import * as settingsActions from '../../actions/settingsActions';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useIntl, FormattedMessage } from 'react-intl';
|
import { useIntl, FormattedMessage } from 'react-intl';
|
||||||
|
import classnames from 'classnames';
|
||||||
import MenuItem from '@material-ui/core/MenuItem';
|
import MenuItem from '@material-ui/core/MenuItem';
|
||||||
import FormHelperText from '@material-ui/core/FormHelperText';
|
import FormHelperText from '@material-ui/core/FormHelperText';
|
||||||
import FormControl from '@material-ui/core/FormControl';
|
import FormControl from '@material-ui/core/FormControl';
|
||||||
import FormControlLabel from '@material-ui/core/FormControlLabel';
|
import FormControlLabel from '@material-ui/core/FormControlLabel';
|
||||||
import Select from '@material-ui/core/Select';
|
import Select from '@material-ui/core/Select';
|
||||||
import Checkbox from '@material-ui/core/Checkbox';
|
import Checkbox from '@material-ui/core/Checkbox';
|
||||||
|
import Slider from '@material-ui/core/Slider';
|
||||||
|
import Typography from '@material-ui/core/Typography';
|
||||||
|
|
||||||
const styles = (theme) =>
|
const NoiseSlider = withStyles(
|
||||||
({
|
{
|
||||||
setting :
|
root :
|
||||||
{
|
{
|
||||||
padding : theme.spacing(2)
|
color : '#3880ff',
|
||||||
|
height : 2,
|
||||||
|
padding : '15px 0'
|
||||||
},
|
},
|
||||||
formControl :
|
track : {
|
||||||
{
|
height : 2
|
||||||
display : 'flex'
|
},
|
||||||
|
rail : {
|
||||||
|
height : 2,
|
||||||
|
opacity : 0.2
|
||||||
|
},
|
||||||
|
mark : {
|
||||||
|
backgroundColor : '#bfbfbf',
|
||||||
|
height : 10,
|
||||||
|
width : 3,
|
||||||
|
marginTop : -3
|
||||||
|
},
|
||||||
|
markActive : {
|
||||||
|
opacity : 1,
|
||||||
|
backgroundColor : 'currentColor'
|
||||||
}
|
}
|
||||||
});
|
})(Slider);
|
||||||
|
|
||||||
|
const styles = (theme) => ({
|
||||||
|
setting :
|
||||||
|
{
|
||||||
|
padding : theme.spacing(2)
|
||||||
|
},
|
||||||
|
margin :
|
||||||
|
{
|
||||||
|
height : theme.spacing(3)
|
||||||
|
},
|
||||||
|
formControl :
|
||||||
|
{
|
||||||
|
display : 'flex'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const MediaSettings = ({
|
const MediaSettings = ({
|
||||||
setEchoCancellation,
|
setEchoCancellation,
|
||||||
setAutoGainControl,
|
setAutoGainControl,
|
||||||
setNoiseSuppression,
|
setNoiseSuppression,
|
||||||
|
setVoiceActivatedUnmute,
|
||||||
roomClient,
|
roomClient,
|
||||||
me,
|
me,
|
||||||
|
volume,
|
||||||
settings,
|
settings,
|
||||||
classes
|
classes
|
||||||
}) =>
|
}) =>
|
||||||
|
|
@ -135,6 +170,34 @@ const MediaSettings = ({
|
||||||
}
|
}
|
||||||
</FormHelperText>
|
</FormHelperText>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
<FormControl className={classes.formControl}>
|
||||||
|
<Select
|
||||||
|
value={settings.resolution || ''}
|
||||||
|
onChange={(event) =>
|
||||||
|
{
|
||||||
|
if (event.target.value)
|
||||||
|
roomClient.changeVideoResolution(event.target.value);
|
||||||
|
}}
|
||||||
|
name='Video resolution'
|
||||||
|
autoWidth
|
||||||
|
className={classes.selectEmpty}
|
||||||
|
>
|
||||||
|
{resolutions.map((resolution, index) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<MenuItem key={index} value={resolution.value}>
|
||||||
|
{resolution.label}
|
||||||
|
</MenuItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
<FormHelperText>
|
||||||
|
<FormattedMessage
|
||||||
|
id='settings.resolution'
|
||||||
|
defaultMessage='Select your video resolution'
|
||||||
|
/>
|
||||||
|
</FormHelperText>
|
||||||
|
</FormControl>
|
||||||
</form>
|
</form>
|
||||||
<form className={classes.setting} autoComplete='off'>
|
<form className={classes.setting} autoComplete='off'>
|
||||||
<FormControl className={classes.formControl}>
|
<FormControl className={classes.formControl}>
|
||||||
|
|
@ -148,7 +211,7 @@ const MediaSettings = ({
|
||||||
displayEmpty
|
displayEmpty
|
||||||
name={intl.formatMessage({
|
name={intl.formatMessage({
|
||||||
id : 'settings.audio',
|
id : 'settings.audio',
|
||||||
defaultMessage : 'Audio device'
|
defaultMessage : 'Audio input device'
|
||||||
})}
|
})}
|
||||||
autoWidth
|
autoWidth
|
||||||
className={classes.selectEmpty}
|
className={classes.selectEmpty}
|
||||||
|
|
@ -165,12 +228,12 @@ const MediaSettings = ({
|
||||||
{ audioDevices.length > 0 ?
|
{ audioDevices.length > 0 ?
|
||||||
intl.formatMessage({
|
intl.formatMessage({
|
||||||
id : 'settings.selectAudio',
|
id : 'settings.selectAudio',
|
||||||
defaultMessage : 'Select audio device'
|
defaultMessage : 'Select audio input device'
|
||||||
})
|
})
|
||||||
:
|
:
|
||||||
intl.formatMessage({
|
intl.formatMessage({
|
||||||
id : 'settings.cantSelectAudio',
|
id : 'settings.cantSelectAudio',
|
||||||
defaultMessage : 'Unable to select audio device'
|
defaultMessage : 'Unable to select audio input device'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
</FormHelperText>
|
</FormHelperText>
|
||||||
|
|
@ -225,34 +288,6 @@ const MediaSettings = ({
|
||||||
</form>
|
</form>
|
||||||
}
|
}
|
||||||
<form className={classes.setting} autoComplete='off'>
|
<form className={classes.setting} autoComplete='off'>
|
||||||
<FormControl className={classes.formControl}>
|
|
||||||
<Select
|
|
||||||
value={settings.resolution || ''}
|
|
||||||
onChange={(event) =>
|
|
||||||
{
|
|
||||||
if (event.target.value)
|
|
||||||
roomClient.changeVideoResolution(event.target.value);
|
|
||||||
}}
|
|
||||||
name='Video resolution'
|
|
||||||
autoWidth
|
|
||||||
className={classes.selectEmpty}
|
|
||||||
>
|
|
||||||
{ resolutions.map((resolution, index) =>
|
|
||||||
{
|
|
||||||
return (
|
|
||||||
<MenuItem key={index} value={resolution.value}>
|
|
||||||
{resolution.label}
|
|
||||||
</MenuItem>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</Select>
|
|
||||||
<FormHelperText>
|
|
||||||
<FormattedMessage
|
|
||||||
id='settings.resolution'
|
|
||||||
defaultMessage='Select your video resolution'
|
|
||||||
/>
|
|
||||||
</FormHelperText>
|
|
||||||
</FormControl>
|
|
||||||
<FormControlLabel
|
<FormControlLabel
|
||||||
className={classes.setting}
|
className={classes.setting}
|
||||||
control={
|
control={
|
||||||
|
|
@ -298,6 +333,43 @@ const MediaSettings = ({
|
||||||
defaultMessage : 'Noise suppression'
|
defaultMessage : 'Noise suppression'
|
||||||
})}
|
})}
|
||||||
/>
|
/>
|
||||||
|
<FormControlLabel
|
||||||
|
className={classes.setting}
|
||||||
|
control={
|
||||||
|
<Checkbox checked={settings.voiceActivatedUnmute} onChange={
|
||||||
|
(event) =>
|
||||||
|
{
|
||||||
|
setVoiceActivatedUnmute(event.target.checked);
|
||||||
|
}}
|
||||||
|
/>}
|
||||||
|
label={intl.formatMessage({
|
||||||
|
id : 'settings.voiceActivatedUnmute',
|
||||||
|
defaultMessage : 'Voice activated unmute'
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
<div className={classes.margin} />
|
||||||
|
<Typography gutterBottom>
|
||||||
|
{
|
||||||
|
intl.formatMessage({
|
||||||
|
id : 'settings.noiseThreshold',
|
||||||
|
defaultMessage : 'Noise threshold:'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</Typography>
|
||||||
|
<NoiseSlider className={classnames(classes.slider, classnames.setting)}
|
||||||
|
key={'noise-threshold-slider'}
|
||||||
|
min={-100}
|
||||||
|
value={settings.noiseThreshold}
|
||||||
|
max={0}
|
||||||
|
valueLabelDisplay={'off'}
|
||||||
|
onChange={
|
||||||
|
(event, value) =>
|
||||||
|
{
|
||||||
|
roomClient._setNoiseThreshold(value);
|
||||||
|
}}
|
||||||
|
marks={[ { value: volume, label: 'level' } ]}
|
||||||
|
/>
|
||||||
|
<div className={classes.margin} />
|
||||||
</form>
|
</form>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
);
|
);
|
||||||
|
|
@ -305,27 +377,31 @@ const MediaSettings = ({
|
||||||
|
|
||||||
MediaSettings.propTypes =
|
MediaSettings.propTypes =
|
||||||
{
|
{
|
||||||
roomClient : PropTypes.any.isRequired,
|
roomClient : PropTypes.any.isRequired,
|
||||||
setEchoCancellation : PropTypes.func.isRequired,
|
setEchoCancellation : PropTypes.func.isRequired,
|
||||||
setAutoGainControl : PropTypes.func.isRequired,
|
setAutoGainControl : PropTypes.func.isRequired,
|
||||||
setNoiseSuppression : PropTypes.func.isRequired,
|
setNoiseSuppression : PropTypes.func.isRequired,
|
||||||
me : appPropTypes.Me.isRequired,
|
setVoiceActivatedUnmute : PropTypes.func.isRequired,
|
||||||
settings : PropTypes.object.isRequired,
|
me : appPropTypes.Me.isRequired,
|
||||||
classes : PropTypes.object.isRequired
|
volume : PropTypes.number,
|
||||||
|
settings : PropTypes.object.isRequired,
|
||||||
|
classes : PropTypes.object.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapStateToProps = (state) =>
|
const mapStateToProps = (state) =>
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
me : state.me,
|
me : state.me,
|
||||||
|
volume : state.peerVolumes[state.me.id],
|
||||||
settings : state.settings
|
settings : state.settings
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const mapDispatchToProps = {
|
const mapDispatchToProps = {
|
||||||
setEchoCancellation : settingsActions.setEchoCancellation,
|
setEchoCancellation : settingsActions.setEchoCancellation,
|
||||||
setAutoGainControl : settingsActions.toggleAutoGainControl,
|
setAutoGainControl : settingsActions.toggleAutoGainControl,
|
||||||
setNoiseSuppression : settingsActions.toggleNoiseSuppression
|
setNoiseSuppression : settingsActions.toggleNoiseSuppression,
|
||||||
|
setVoiceActivatedUnmute : settingsActions.setVoiceActivatedUnmute
|
||||||
};
|
};
|
||||||
|
|
||||||
export default withRoomContext(connect(
|
export default withRoomContext(connect(
|
||||||
|
|
@ -337,7 +413,8 @@ export default withRoomContext(connect(
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
prev.me === next.me &&
|
prev.me === next.me &&
|
||||||
prev.settings === next.settings
|
prev.settings === next.settings &&
|
||||||
|
prev.peerVolumes[prev.me.id] === next[next.me.id]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ const Settings = ({
|
||||||
/>
|
/>
|
||||||
<Tab
|
<Tab
|
||||||
label={intl.formatMessage({
|
label={intl.formatMessage({
|
||||||
id : 'label.appearence',
|
id : 'label.appearance',
|
||||||
defaultMessage : 'Appearence'
|
defaultMessage : 'Appearence'
|
||||||
})}
|
})}
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,8 @@ import messagesFrench from './translations/fr';
|
||||||
import messagesGreek from './translations/el';
|
import messagesGreek from './translations/el';
|
||||||
import messagesRomanian from './translations/ro';
|
import messagesRomanian from './translations/ro';
|
||||||
import messagesPortuguese from './translations/pt';
|
import messagesPortuguese from './translations/pt';
|
||||||
import messagesChinese from './translations/cn';
|
import messagesChineseSimplified from './translations/cn';
|
||||||
|
import messagesChineseTraditional from './translations/tw';
|
||||||
import messagesSpanish from './translations/es';
|
import messagesSpanish from './translations/es';
|
||||||
import messagesCroatian from './translations/hr';
|
import messagesCroatian from './translations/hr';
|
||||||
import messagesCzech from './translations/cs';
|
import messagesCzech from './translations/cs';
|
||||||
|
|
@ -49,26 +50,37 @@ const cache = createIntlCache();
|
||||||
const messages =
|
const messages =
|
||||||
{
|
{
|
||||||
// 'en' : messagesEnglish,
|
// 'en' : messagesEnglish,
|
||||||
'nb' : messagesNorwegian,
|
'nb' : messagesNorwegian,
|
||||||
'de' : messagesGerman,
|
'de' : messagesGerman,
|
||||||
'hu' : messagesHungarian,
|
'hu' : messagesHungarian,
|
||||||
'pl' : messagesPolish,
|
'pl' : messagesPolish,
|
||||||
'dk' : messagesDanish,
|
'dk' : messagesDanish,
|
||||||
'fr' : messagesFrench,
|
'fr' : messagesFrench,
|
||||||
'el' : messagesGreek,
|
'el' : messagesGreek,
|
||||||
'ro' : messagesRomanian,
|
'ro' : messagesRomanian,
|
||||||
'pt' : messagesPortuguese,
|
'pt' : messagesPortuguese,
|
||||||
'zh' : messagesChinese,
|
'zh-hans' : messagesChineseSimplified,
|
||||||
'es' : messagesSpanish,
|
'zh-hant' : messagesChineseTraditional,
|
||||||
'hr' : messagesCroatian,
|
'es' : messagesSpanish,
|
||||||
'cs' : messagesCzech,
|
'hr' : messagesCroatian,
|
||||||
'it' : messagesItalian,
|
'cs' : messagesCzech,
|
||||||
'uk' : messagesUkrainian,
|
'it' : messagesItalian,
|
||||||
'tr' : messagesTurkish,
|
'uk' : messagesUkrainian,
|
||||||
'lv' : messagesLatvian
|
'tr' : messagesTurkish,
|
||||||
|
'lv' : messagesLatvian
|
||||||
};
|
};
|
||||||
|
|
||||||
const locale = navigator.language.split(/[-_]/)[0]; // language without region code
|
const browserLanguage = (navigator.language || navigator.browserLanguage).toLowerCase();
|
||||||
|
|
||||||
|
let locale = browserLanguage.split(/[-_]/)[0]; // language without region code
|
||||||
|
|
||||||
|
if (locale === 'zh')
|
||||||
|
{
|
||||||
|
if (browserLanguage === 'zh-cn')
|
||||||
|
locale = 'zh-hans';
|
||||||
|
else
|
||||||
|
locale = 'zh-hant';
|
||||||
|
}
|
||||||
|
|
||||||
const intl = createIntl({
|
const intl = createIntl({
|
||||||
locale,
|
locale,
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,8 @@ const initialState =
|
||||||
raisedHand : false,
|
raisedHand : false,
|
||||||
raisedHandInProgress : false,
|
raisedHandInProgress : false,
|
||||||
loggedIn : false,
|
loggedIn : false,
|
||||||
isSpeaking : false
|
isSpeaking : false,
|
||||||
|
isAutoMuted : true
|
||||||
};
|
};
|
||||||
|
|
||||||
const me = (state = initialState, action) =>
|
const me = (state = initialState, action) =>
|
||||||
|
|
@ -162,6 +163,13 @@ const me = (state = initialState, action) =>
|
||||||
return { ...state, isSpeaking: flag };
|
return { ...state, isSpeaking: flag };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'SET_AUTO_MUTED':
|
||||||
|
{
|
||||||
|
const { flag } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, isAutoMuted: flag };
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,10 @@ const peerVolumes = (state = initialState, action) =>
|
||||||
|
|
||||||
case 'SET_PEER_VOLUME':
|
case 'SET_PEER_VOLUME':
|
||||||
{
|
{
|
||||||
const { peerId, volume } = action.payload;
|
const { peerId } = action.payload;
|
||||||
|
const dBs = action.payload.volume < -100 ? -100 : action.payload.volume;
|
||||||
|
|
||||||
return { ...state, [peerId]: volume };
|
return { ...state, [peerId]: Math.round(dBs) };
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,11 @@ const peer = (state = initialState, action) =>
|
||||||
stopPeerVideoInProgress : action.payload.flag
|
stopPeerVideoInProgress : action.payload.flag
|
||||||
};
|
};
|
||||||
|
|
||||||
|
case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS':
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
stopPeerScreenSharingInProgress : action.payload.flag
|
||||||
|
};
|
||||||
default:
|
default:
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
@ -118,6 +123,7 @@ const peers = (state = initialState, action) =>
|
||||||
case 'REMOVE_PEER_ROLE':
|
case 'REMOVE_PEER_ROLE':
|
||||||
case 'STOP_PEER_AUDIO_IN_PROGRESS':
|
case 'STOP_PEER_AUDIO_IN_PROGRESS':
|
||||||
case 'STOP_PEER_VIDEO_IN_PROGRESS':
|
case 'STOP_PEER_VIDEO_IN_PROGRESS':
|
||||||
|
case 'STOP_PEER_SCREEN_SHARING_IN_PROGRESS':
|
||||||
{
|
{
|
||||||
const oldPeer = state[action.payload.peerId];
|
const oldPeer = state[action.payload.peerId];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,9 @@ const room = (state = initialState, action) =>
|
||||||
case 'STOP_ALL_VIDEO_IN_PROGRESS':
|
case 'STOP_ALL_VIDEO_IN_PROGRESS':
|
||||||
return { ...state, stopAllVideoInProgress: action.payload.flag };
|
return { ...state, stopAllVideoInProgress: action.payload.flag };
|
||||||
|
|
||||||
|
case 'STOP_ALL_SCREEN_SHARING_IN_PROGRESS':
|
||||||
|
return { ...state, stopAllScreenSharingInProgress: action.payload.flag };
|
||||||
|
|
||||||
case 'CLOSE_MEETING_IN_PROGRESS':
|
case 'CLOSE_MEETING_IN_PROGRESS':
|
||||||
return { ...state, closeMeetingInProgress: action.payload.flag };
|
return { ...state, closeMeetingInProgress: action.payload.flag };
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,28 @@
|
||||||
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 : true,
|
autoGainControl : false,
|
||||||
echoCancellation : true,
|
echoCancellation : true,
|
||||||
noiseSuppression : true,
|
noiseSuppression : true,
|
||||||
sampleSize : 16,
|
voiceActivatedUnmute : false,
|
||||||
|
noiseThreshold : -50,
|
||||||
|
sampleSize : 16,
|
||||||
// low, medium, high, veryhigh, ultra
|
// low, medium, high, veryhigh, ultra
|
||||||
resolution : window.config.defaultResolution || 'medium',
|
resolution : window.config.defaultResolution || 'medium',
|
||||||
lastN : 4,
|
lastN : 4,
|
||||||
permanentTopBar : true,
|
permanentTopBar : true,
|
||||||
hiddenControls : false,
|
hiddenControls : false,
|
||||||
showNotifications : true,
|
showNotifications : true,
|
||||||
notificationSounds : true,
|
notificationSounds : true,
|
||||||
buttonControlBar : window.config.buttonControlBar || false,
|
buttonControlBar : window.config.buttonControlBar || false,
|
||||||
drawerOverlayed : window.config.drawerOverlayed || true,
|
drawerOverlayed : window.config.drawerOverlayed || true,
|
||||||
|
autoMuteThreshold : window.config.autoMuteThreshold || 4,
|
||||||
...window.config.defaultAudio
|
...window.config.defaultAudio
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -98,6 +101,20 @@ const settings = (state = initialState, action) =>
|
||||||
return { ...state, noiseSuppression };
|
return { ...state, noiseSuppression };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'SET_VOICE_ACTIVATED_UNMUTE':
|
||||||
|
{
|
||||||
|
const { voiceActivatedUnmute } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, voiceActivatedUnmute };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_NOISE_THRESHOLD':
|
||||||
|
{
|
||||||
|
const { noiseThreshold } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, noiseThreshold };
|
||||||
|
}
|
||||||
|
|
||||||
case 'SET_DEFAULT_AUDIO':
|
case 'SET_DEFAULT_AUDIO':
|
||||||
{
|
{
|
||||||
const { audio } = action.payload;
|
const { audio } = action.payload;
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +85,10 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"label.roomName": "房间名称",
|
"label.roomName": "房间名称",
|
||||||
"label.chooseRoomButton": "继续",
|
"label.chooseRoomButton": "继续",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "超高 (UHD)",
|
"label.ultra": "超高 (UHD)",
|
||||||
"label.close": "关闭",
|
"label.close": "关闭",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
@ -62,6 +62,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -83,6 +85,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Jméno místnosti",
|
"label.roomName": "Jméno místnosti",
|
||||||
"label.chooseRoomButton": "Pokračovat",
|
"label.chooseRoomButton": "Pokračovat",
|
||||||
|
|
@ -108,7 +113,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Zavřít",
|
"label.close": "Zavřít",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -182,5 +187,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
}
|
"moderator.muteScreenSharing": null
|
||||||
|
}
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
"room.videoPaused": "Video gestoppt",
|
"room.videoPaused": "Video gestoppt",
|
||||||
"room.muteAll": "Alle stummschalten",
|
"room.muteAll": "Alle stummschalten",
|
||||||
"room.stopAllVideo": "Alle Videos stoppen",
|
"room.stopAllVideo": "Alle Videos stoppen",
|
||||||
"room.closeMeeting": "Meeting schließen",
|
"room.closeMeeting": "Meeting beenden",
|
||||||
"room.clearChat": "Liste löschen",
|
"room.clearChat": "Liste löschen",
|
||||||
"room.clearFileSharing": "Liste löschen",
|
"room.clearFileSharing": "Liste löschen",
|
||||||
"room.speechUnsupported": "Dein Browser unterstützt keine Spracherkennung",
|
"room.speechUnsupported": "Dein Browser unterstützt keine Spracherkennung",
|
||||||
|
|
@ -61,10 +61,12 @@
|
||||||
"room.extraVideo": "Video hinzufügen",
|
"room.extraVideo": "Video hinzufügen",
|
||||||
"room.overRoomLimit": "Der Raum ist voll, probiere es später nochmal",
|
"room.overRoomLimit": "Der Raum ist voll, probiere es später nochmal",
|
||||||
"room.help": "Hilfe",
|
"room.help": "Hilfe",
|
||||||
"room.about": "Impressum",
|
"room.about": "Über",
|
||||||
"room.shortcutKeys": "Tastaturkürzel",
|
"room.shortcutKeys": "Tastaturkürzel",
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": "Du bist stummgeschalted, Halte die SPACE-Taste um zu sprechen",
|
"me.mutedPTT": "Du bist stummgeschaltet. Halte die SPACE-Taste um zu sprechen",
|
||||||
|
|
||||||
"roles.gotRole": "Rolle erhalten: {role}",
|
"roles.gotRole": "Rolle erhalten: {role}",
|
||||||
"roles.lostRole": "Rolle entzogen: {role}",
|
"roles.lostRole": "Rolle entzogen: {role}",
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Video stoppen",
|
"tooltip.muteParticipantVideo": "Video stoppen",
|
||||||
"tooltip.raisedHand": "Hand heben",
|
"tooltip.raisedHand": "Hand heben",
|
||||||
"tooltip.muteScreenSharing": "Stoppe Bildschirmfreigabe",
|
"tooltip.muteScreenSharing": "Stoppe Bildschirmfreigabe",
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Name des Raums",
|
"label.roomName": "Name des Raums",
|
||||||
"label.chooseRoomButton": "Weiter",
|
"label.chooseRoomButton": "Weiter",
|
||||||
|
|
@ -103,16 +108,16 @@
|
||||||
"label.democratic": "Demokratisch",
|
"label.democratic": "Demokratisch",
|
||||||
"label.filmstrip": "Filmstreifen",
|
"label.filmstrip": "Filmstreifen",
|
||||||
"label.low": "Niedrig",
|
"label.low": "Niedrig",
|
||||||
"label.medium": "Medium",
|
"label.medium": "Mittel",
|
||||||
"label.high": "Hoch (HD)",
|
"label.high": "Hoch (HD)",
|
||||||
"label.veryHigh": "Sehr hoch (FHD)",
|
"label.veryHigh": "Sehr hoch (FHD)",
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Schließen",
|
"label.close": "Schließen",
|
||||||
"label.media": "Audio / Video",
|
"label.media": "Audio / Video",
|
||||||
"label.appearence": "Erscheinung",
|
"label.appearance": "Ansicht",
|
||||||
"label.advanced": "Erweiter",
|
"label.advanced": "Erweitert",
|
||||||
"label.addVideo": "Video hinzufügen",
|
"label.addVideo": "Video hinzufügen",
|
||||||
"label.promoteAllPeers": "Alle Teinehmer einlassen",
|
"label.promoteAllPeers": "Alle Teilnehmer reinlassen",
|
||||||
"label.moreActions": "Weitere Aktionen",
|
"label.moreActions": "Weitere Aktionen",
|
||||||
|
|
||||||
"settings.settings": "Einstellungen",
|
"settings.settings": "Einstellungen",
|
||||||
|
|
@ -134,7 +139,7 @@
|
||||||
"settings.hiddenControls": "Medienwerkzeugleiste automatisch ausblenden",
|
"settings.hiddenControls": "Medienwerkzeugleiste automatisch ausblenden",
|
||||||
"settings.notificationSounds": "Audiosignal bei Benachrichtigungen",
|
"settings.notificationSounds": "Audiosignal bei Benachrichtigungen",
|
||||||
"settings.showNotifications": "Zeige Benachrichtigungen",
|
"settings.showNotifications": "Zeige Benachrichtigungen",
|
||||||
"settings.buttonControlBar": "Seperate seitliche Medienwerkzeugleiste",
|
"settings.buttonControlBar": "Separate seitliche Medienwerkzeugleiste",
|
||||||
"settings.echoCancellation": "Echounterdrückung",
|
"settings.echoCancellation": "Echounterdrückung",
|
||||||
"settings.autoGainControl": "Automatische Pegelregelung (Audioeingang)",
|
"settings.autoGainControl": "Automatische Pegelregelung (Audioeingang)",
|
||||||
"settings.noiseSuppression": "Rauschunterdrückung",
|
"settings.noiseSuppression": "Rauschunterdrückung",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "Moderator hat Chat gelöscht",
|
"moderator.clearChat": "Moderator hat Chat gelöscht",
|
||||||
"moderator.clearFiles": "Moderator hat geteilte Dateiliste gelöscht",
|
"moderator.clearFiles": "Moderator hat geteilte Dateiliste gelöscht",
|
||||||
"moderator.muteAudio": "Moderator hat dich stummgeschaltet",
|
"moderator.muteAudio": "Moderator hat dich stummgeschaltet",
|
||||||
"moderator.muteVideo": "Moderator hat dein Video gestoppt"
|
"moderator.muteVideo": "Moderator hat dein Video gestoppt",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Værelsesnavn",
|
"label.roomName": "Værelsesnavn",
|
||||||
"label.chooseRoomButton": "Fortsæt",
|
"label.chooseRoomButton": "Fortsæt",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Luk",
|
"label.close": "Luk",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Όνομα δωματίου",
|
"label.roomName": "Όνομα δωματίου",
|
||||||
"label.chooseRoomButton": "Συνέχεια",
|
"label.chooseRoomButton": "Συνέχεια",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Κλείσιμο",
|
"label.close": "Κλείσιμο",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": "Help",
|
"room.help": "Help",
|
||||||
"room.about": "About",
|
"room.about": "About",
|
||||||
"room.shortcutKeys": "Shortcut Keys",
|
"room.shortcutKeys": "Shortcut Keys",
|
||||||
|
"room.browsePeersSpotlight": "Browse participants into Spotlight",
|
||||||
|
"room.stopAllScreenSharing": "Stop all screen sharing",
|
||||||
|
|
||||||
"me.mutedPTT": "You are muted, hold down SPACE-BAR to talk",
|
"me.mutedPTT": "You are muted, hold down SPACE-BAR to talk",
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Mute participant video",
|
"tooltip.muteParticipantVideo": "Mute participant video",
|
||||||
"tooltip.raisedHand": "Raise hand",
|
"tooltip.raisedHand": "Raise hand",
|
||||||
"tooltip.muteScreenSharing": "Mute participant share",
|
"tooltip.muteScreenSharing": "Mute participant share",
|
||||||
|
"tooltip.muteParticipantAudioModerator": "Mute participant audio globally",
|
||||||
|
"tooltip.muteParticipantVideoModerator": "Mute participant video globally",
|
||||||
|
"tooltip.muteScreenSharingModerator": "Mute participant screen share globally",
|
||||||
|
|
||||||
"label.roomName": "Room name",
|
"label.roomName": "Room name",
|
||||||
"label.chooseRoomButton": "Continue",
|
"label.chooseRoomButton": "Continue",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Close",
|
"label.close": "Close",
|
||||||
"label.media": "Media",
|
"label.media": "Media",
|
||||||
"label.appearence": "Appearence",
|
"label.appearance": "Appearence",
|
||||||
"label.advanced": "Advanced",
|
"label.advanced": "Advanced",
|
||||||
"label.addVideo": "Add video",
|
"label.addVideo": "Add video",
|
||||||
"label.promoteAllPeers": "Promote all",
|
"label.promoteAllPeers": "Promote all",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "Moderator cleared the chat",
|
"moderator.clearChat": "Moderator cleared the chat",
|
||||||
"moderator.clearFiles": "Moderator cleared the files",
|
"moderator.clearFiles": "Moderator cleared the files",
|
||||||
"moderator.muteAudio": "Moderator muted your audio",
|
"moderator.muteAudio": "Moderator muted your audio",
|
||||||
"moderator.muteVideo": "Moderator muted your video"
|
"moderator.muteVideo": "Moderator muted your video",
|
||||||
|
"moderator.muteScreenSharing": "Moderator muted your screen sharing"
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Nombre de la sala",
|
"label.roomName": "Nombre de la sala",
|
||||||
"label.chooseRoomButton": "Continuar",
|
"label.chooseRoomButton": "Continuar",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Cerrar",
|
"label.close": "Cerrar",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Nom de la salle",
|
"label.roomName": "Nom de la salle",
|
||||||
"label.chooseRoomButton": "Continuer",
|
"label.chooseRoomButton": "Continuer",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra Haute Définition",
|
"label.ultra": "Ultra Haute Définition",
|
||||||
"label.close": "Fermer",
|
"label.close": "Fermer",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -182,5 +187,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
"room.lobbyEmpty": "Trenutno nema nikoga u predvorju",
|
"room.lobbyEmpty": "Trenutno nema nikoga u predvorju",
|
||||||
"room.hiddenPeers": "{hiddenPeersCount, plural, one {participant} other {participants}}",
|
"room.hiddenPeers": "{hiddenPeersCount, plural, one {participant} other {participants}}",
|
||||||
"room.me": "Ja",
|
"room.me": "Ja",
|
||||||
"room.spotlights": "Sudionici u fokusu",
|
"room.spotlights": "Sudionici u središtu pažnje",
|
||||||
"room.passive": "Pasivni sudionici",
|
"room.passive": "Pasivni sudionici",
|
||||||
"room.videoPaused": "Video pauziran",
|
"room.videoPaused": "Video pauziran",
|
||||||
"room.muteAll": "Utišaj sve",
|
"room.muteAll": "Utišaj sve",
|
||||||
|
|
@ -60,9 +60,11 @@
|
||||||
"room.loweredHand": "{displayName} je spustio ruku",
|
"room.loweredHand": "{displayName} je spustio ruku",
|
||||||
"room.extraVideo": "Dodatni video",
|
"room.extraVideo": "Dodatni video",
|
||||||
"room.overRoomLimit": "Soba je popunjena, pokušajte ponovno kasnije.",
|
"room.overRoomLimit": "Soba je popunjena, pokušajte ponovno kasnije.",
|
||||||
"room.help": null,
|
"room.help": "Pomoć",
|
||||||
"room.about": null,
|
"room.about": "O programu",
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": "Prečaci",
|
||||||
|
"room.browsePeersSpotlight": "Pretražite sudionike u središtu pažnje",
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": "Utišani ste, pritisnite i držite SPACE tipku za razgovor",
|
"me.mutedPTT": "Utišani ste, pritisnite i držite SPACE tipku za razgovor",
|
||||||
|
|
||||||
|
|
@ -81,9 +83,12 @@
|
||||||
"tooltip.participants": "Prikaži sudionike",
|
"tooltip.participants": "Prikaži sudionike",
|
||||||
"tooltip.kickParticipant": "Izbaci sudionika",
|
"tooltip.kickParticipant": "Izbaci sudionika",
|
||||||
"tooltip.muteParticipant": "Utišaj sudionika",
|
"tooltip.muteParticipant": "Utišaj sudionika",
|
||||||
"tooltip.muteParticipantVideo": "Ne primaj video sudionika",
|
"tooltip.muteParticipantVideo": "Ne prikazuj video sudionika",
|
||||||
"tooltip.raisedHand": "Podigni ruku",
|
"tooltip.raisedHand": "Podigni ruku",
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": "Ne prikazuj dijeljenje ekrana sudionika",
|
||||||
|
"tooltip.muteParticipantAudioModerator": "Utišaj sve sudionike",
|
||||||
|
"tooltip.muteParticipantVideoModerator": "Ne prikazuj video svih sudionika",
|
||||||
|
"tooltip.muteScreenSharingModerator": "Ne prikazuj dijeljenje ekrana svih sudionika",
|
||||||
|
|
||||||
"label.roomName": "Naziv sobe",
|
"label.roomName": "Naziv sobe",
|
||||||
"label.chooseRoomButton": "Nastavi",
|
"label.chooseRoomButton": "Nastavi",
|
||||||
|
|
@ -109,11 +114,11 @@
|
||||||
"label.ultra": "Ultra visoka (UHD)",
|
"label.ultra": "Ultra visoka (UHD)",
|
||||||
"label.close": "Zatvori",
|
"label.close": "Zatvori",
|
||||||
"label.media": "Medij",
|
"label.media": "Medij",
|
||||||
"label.appearence": "Prikaz",
|
"label.appearance": "Prikaz",
|
||||||
"label.advanced": "Napredno",
|
"label.advanced": "Napredno",
|
||||||
"label.addVideo": "Dodaj video",
|
"label.addVideo": "Dodaj video",
|
||||||
"label.promoteAllPeers": "Promoviraj sve",
|
"label.promoteAllPeers": "Promoviraj sve",
|
||||||
"label.moreActions": null,
|
"label.moreActions": "Više akcija",
|
||||||
|
|
||||||
"settings.settings": "Postavke",
|
"settings.settings": "Postavke",
|
||||||
"settings.camera": "Kamera",
|
"settings.camera": "Kamera",
|
||||||
|
|
@ -133,12 +138,12 @@
|
||||||
"settings.lastn": "Broj vidljivih videozapisa",
|
"settings.lastn": "Broj vidljivih videozapisa",
|
||||||
"settings.hiddenControls": "Skrivene kontrole medija",
|
"settings.hiddenControls": "Skrivene kontrole medija",
|
||||||
"settings.notificationSounds": "Zvuk obavijesti",
|
"settings.notificationSounds": "Zvuk obavijesti",
|
||||||
"settings.showNotifications": null,
|
"settings.showNotifications": "Prikaži obavijesti",
|
||||||
"settings.buttonControlBar": null,
|
"settings.buttonControlBar": "Razdvoji upravljanje medijima",
|
||||||
"settings.echoCancellation": null,
|
"settings.echoCancellation": "Poništavanje jeke",
|
||||||
"settings.autoGainControl": null,
|
"settings.autoGainControl": "Automatsko upravljanje jačinom zvuka",
|
||||||
"settings.noiseSuppression": null,
|
"settings.noiseSuppression": "Poništavanje šuma",
|
||||||
"settings.drawerOverlayed": null,
|
"settings.drawerOverlayed": "Bočni izbornik iznad sadržaja",
|
||||||
|
|
||||||
"filesharing.saveFileError": "Nije moguće spremiti datoteku",
|
"filesharing.saveFileError": "Nije moguće spremiti datoteku",
|
||||||
"filesharing.startingFileShare": "Pokušaj dijeljenja datoteke",
|
"filesharing.startingFileShare": "Pokušaj dijeljenja datoteke",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "Moderator je izbrisao razgovor",
|
"moderator.clearChat": "Moderator je izbrisao razgovor",
|
||||||
"moderator.clearFiles": "Moderator je izbrisao datoteke",
|
"moderator.clearFiles": "Moderator je izbrisao datoteke",
|
||||||
"moderator.muteAudio": "Moderator je utišao tvoj zvuk",
|
"moderator.muteAudio": "Moderator je utišao tvoj zvuk",
|
||||||
"moderator.muteVideo": "Moderator je zaustavio tvoj video"
|
"moderator.muteVideo": "Moderator je zaustavio tvoj video",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@
|
||||||
"room.spotlights": "Látható résztvevők",
|
"room.spotlights": "Látható résztvevők",
|
||||||
"room.passive": "Passzív résztvevők",
|
"room.passive": "Passzív résztvevők",
|
||||||
"room.videoPaused": "Ez a videóstream szünetel",
|
"room.videoPaused": "Ez a videóstream szünetel",
|
||||||
"room.muteAll": "Mindenki némítása",
|
"room.muteAll": "Összes némítása",
|
||||||
"room.stopAllVideo": "Mindenki video némítása",
|
"room.stopAllVideo": "Összes video némítása",
|
||||||
"room.closeMeeting": "Konferencia lebontása",
|
"room.closeMeeting": "Konferencia lebontása",
|
||||||
"room.clearChat": "Chat történelem kiürítése",
|
"room.clearChat": "Chat történelem kiürítése",
|
||||||
"room.clearFileSharing": "File megosztás kiürítése",
|
"room.clearFileSharing": "File megosztás kiürítése",
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": "Segítség",
|
"room.help": "Segítség",
|
||||||
"room.about": "Névjegy",
|
"room.about": "Névjegy",
|
||||||
"room.shortcutKeys": "Billentyűparancsok",
|
"room.shortcutKeys": "Billentyűparancsok",
|
||||||
|
"room.browsePeersSpotlight": "Résztvevők böngészése",
|
||||||
|
"room.stopAllScreenSharing": "Összes képernyőmegosztás leállítása",
|
||||||
|
|
||||||
"me.mutedPTT": "Némítva vagy, ha beszélnél nyomd le a szóköz billentyűt",
|
"me.mutedPTT": "Némítva vagy, ha beszélnél nyomd le a szóköz billentyűt",
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Résztvevő videóstreamének némítása",
|
"tooltip.muteParticipantVideo": "Résztvevő videóstreamének némítása",
|
||||||
"tooltip.raisedHand": "Jelentkezés",
|
"tooltip.raisedHand": "Jelentkezés",
|
||||||
"tooltip.muteScreenSharing": "Képernyőmegosztás szüneteltetése",
|
"tooltip.muteScreenSharing": "Képernyőmegosztás szüneteltetése",
|
||||||
|
"tooltip.muteParticipantAudioModerator": "Résztvevő hangjának általános némítása",
|
||||||
|
"tooltip.muteParticipantVideoModerator": "Résztvevő videójának általános némítása",
|
||||||
|
"tooltip.muteScreenSharingModerator": "Résztvevő képernyőmegosztásának általános némítása",
|
||||||
|
|
||||||
"label.roomName": "Konferencia",
|
"label.roomName": "Konferencia",
|
||||||
"label.chooseRoomButton": "Tovább",
|
"label.chooseRoomButton": "Tovább",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra magas (UHD)",
|
"label.ultra": "Ultra magas (UHD)",
|
||||||
"label.close": "Bezár",
|
"label.close": "Bezár",
|
||||||
"label.media": "Média",
|
"label.media": "Média",
|
||||||
"label.appearence": "Megjelenés",
|
"label.appearance": "Megjelenés",
|
||||||
"label.advanced": "Részletek",
|
"label.advanced": "Részletek",
|
||||||
"label.addVideo": "Videó hozzáadása",
|
"label.addVideo": "Videó hozzáadása",
|
||||||
"label.promoteAllPeers": "Mindenkit beengedek",
|
"label.promoteAllPeers": "Mindenkit beengedek",
|
||||||
|
|
@ -138,7 +143,7 @@
|
||||||
"settings.echoCancellation": "Visszhangelnyomás",
|
"settings.echoCancellation": "Visszhangelnyomás",
|
||||||
"settings.autoGainControl": "Automatikus hangerő",
|
"settings.autoGainControl": "Automatikus hangerő",
|
||||||
"settings.noiseSuppression": "Zajelnyomás",
|
"settings.noiseSuppression": "Zajelnyomás",
|
||||||
"settings.drawerOverlayed": null,
|
"settings.drawerOverlayed": "Oldalsáv a tartalom felett",
|
||||||
|
|
||||||
"filesharing.saveFileError": "A file-t nem sikerült elmenteni",
|
"filesharing.saveFileError": "A file-t nem sikerült elmenteni",
|
||||||
"filesharing.startingFileShare": "Fájl megosztása",
|
"filesharing.startingFileShare": "Fájl megosztása",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "A moderátor kiürítette a chat történelmet",
|
"moderator.clearChat": "A moderátor kiürítette a chat történelmet",
|
||||||
"moderator.clearFiles": "A moderátor kiürítette a file megosztás történelmet",
|
"moderator.clearFiles": "A moderátor kiürítette a file megosztás történelmet",
|
||||||
"moderator.muteAudio": "A moderátor elnémította a hangod",
|
"moderator.muteAudio": "A moderátor elnémította a hangod",
|
||||||
"moderator.muteVideo": "A moderátor elnémította a videód"
|
"moderator.muteVideo": "A moderátor elnémította a videód",
|
||||||
|
"moderator.muteScreenSharing": "A moderátor leállította képernyőmegosztásod"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,9 @@
|
||||||
"room.help": "Aiuto",
|
"room.help": "Aiuto",
|
||||||
"room.about": "Informazioni su",
|
"room.about": "Informazioni su",
|
||||||
"room.shortcutKeys": "Scorciatoie da tastiera",
|
"room.shortcutKeys": "Scorciatoie da tastiera",
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": "Sei mutato, tieni premuto SPAZIO per parlare",
|
"me.mutedPTT": "Sei mutato, tieni premuto SPAZIO per parlare",
|
||||||
|
|
||||||
"roles.gotRole": "Hai ottenuto il ruolo: {role}",
|
"roles.gotRole": "Hai ottenuto il ruolo: {role}",
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Ferma video partecipante",
|
"tooltip.muteParticipantVideo": "Ferma video partecipante",
|
||||||
"tooltip.raisedHand": "Mano alzata",
|
"tooltip.raisedHand": "Mano alzata",
|
||||||
"tooltip.muteScreenSharing": "Ferma condivisione schermo partecipante",
|
"tooltip.muteScreenSharing": "Ferma condivisione schermo partecipante",
|
||||||
|
"tooltip.muteParticipantAudioModerator": "Sospendi audio globale",
|
||||||
|
"tooltip.muteParticipantVideoModerator": "Sospendi video globale",
|
||||||
|
"tooltip.muteScreenSharingModerator": "Sospendi condivisione schermo globale",
|
||||||
|
|
||||||
"label.roomName": "Nome della stanza",
|
"label.roomName": "Nome della stanza",
|
||||||
"label.chooseRoomButton": "Continua",
|
"label.chooseRoomButton": "Continua",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Chiudi",
|
"label.close": "Chiudi",
|
||||||
"label.media": "Media",
|
"label.media": "Media",
|
||||||
"label.appearence": "Aspetto",
|
"label.appearance": "Aspetto",
|
||||||
"label.advanced": "Avanzate",
|
"label.advanced": "Avanzate",
|
||||||
"label.addVideo": "Aggiungi video",
|
"label.addVideo": "Aggiungi video",
|
||||||
"label.promoteAllPeers": "Promuovi tutti",
|
"label.promoteAllPeers": "Promuovi tutti",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "Il moderatore ha pulito la chat",
|
"moderator.clearChat": "Il moderatore ha pulito la chat",
|
||||||
"moderator.clearFiles": "Il moderatore ha pulito i file",
|
"moderator.clearFiles": "Il moderatore ha pulito i file",
|
||||||
"moderator.muteAudio": "Il moderatore ha mutato il tuo audio",
|
"moderator.muteAudio": "Il moderatore ha mutato il tuo audio",
|
||||||
"moderator.muteVideo": "Il moderatore ha fermato il tuo video"
|
"moderator.muteVideo": "Il moderatore ha fermato il tuo video",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
@ -62,6 +62,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": "Jūs esat noklusināts. Turiet taustiņu SPACE-BAR, lai runātu",
|
"me.mutedPTT": "Jūs esat noklusināts. Turiet taustiņu SPACE-BAR, lai runātu",
|
||||||
|
|
||||||
|
|
@ -83,6 +85,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Atslēgt dalībnieka video",
|
"tooltip.muteParticipantVideo": "Atslēgt dalībnieka video",
|
||||||
"tooltip.raisedHand": "Pacelt roku",
|
"tooltip.raisedHand": "Pacelt roku",
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Sapulces telpas nosaukums (ID)",
|
"label.roomName": "Sapulces telpas nosaukums (ID)",
|
||||||
"label.chooseRoomButton": "Turpināt",
|
"label.chooseRoomButton": "Turpināt",
|
||||||
|
|
@ -107,7 +112,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Aizvērt",
|
"label.close": "Aizvērt",
|
||||||
"label.media": "Mediji",
|
"label.media": "Mediji",
|
||||||
"label.appearence": "Izskats",
|
"label.appearance": "Izskats",
|
||||||
"label.advanced": "Advancēts",
|
"label.advanced": "Advancēts",
|
||||||
"label.addVideo": "Pievienot video",
|
"label.addVideo": "Pievienot video",
|
||||||
"label.moreActions": null,
|
"label.moreActions": null,
|
||||||
|
|
@ -177,5 +182,6 @@
|
||||||
"moderator.clearChat": "Moderators nodzēsa tērziņus",
|
"moderator.clearChat": "Moderators nodzēsa tērziņus",
|
||||||
"moderator.clearFiles": "Moderators notīrīja failus",
|
"moderator.clearFiles": "Moderators notīrīja failus",
|
||||||
"moderator.muteAudio": "Moderators noklusināja jūsu mikrofonu",
|
"moderator.muteAudio": "Moderators noklusināja jūsu mikrofonu",
|
||||||
"moderator.muteVideo": "Moderators atslēdza jūsu kameru"
|
"moderator.muteVideo": "Moderators atslēdza jūsu kameru",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": "Du er dempet, hold nede SPACE for å snakke",
|
"me.mutedPTT": "Du er dempet, hold nede SPACE for å snakke",
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Demp deltakervideo",
|
"tooltip.muteParticipantVideo": "Demp deltakervideo",
|
||||||
"tooltip.raisedHand": "Rekk opp hånden",
|
"tooltip.raisedHand": "Rekk opp hånden",
|
||||||
"tooltip.muteScreenSharing": "Demp deltaker skjermdeling",
|
"tooltip.muteScreenSharing": "Demp deltaker skjermdeling",
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Møtenavn",
|
"label.roomName": "Møtenavn",
|
||||||
"label.chooseRoomButton": "Fortsett",
|
"label.chooseRoomButton": "Fortsett",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Lukk",
|
"label.close": "Lukk",
|
||||||
"label.media": "Media",
|
"label.media": "Media",
|
||||||
"label.appearence": "Utseende",
|
"label.appearance": "Utseende",
|
||||||
"label.advanced": "Avansert",
|
"label.advanced": "Avansert",
|
||||||
"label.addVideo": "Legg til video",
|
"label.addVideo": "Legg til video",
|
||||||
"label.promoteAllPeers": "Slipp inn alle",
|
"label.promoteAllPeers": "Slipp inn alle",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "Moderator tømte chatten",
|
"moderator.clearChat": "Moderator tømte chatten",
|
||||||
"moderator.clearFiles": "Moderator fjernet filer",
|
"moderator.clearFiles": "Moderator fjernet filer",
|
||||||
"moderator.muteAudio": "Moderator mutet lyden din",
|
"moderator.muteAudio": "Moderator mutet lyden din",
|
||||||
"moderator.muteVideo": "Moderator mutet videoen din"
|
"moderator.muteVideo": "Moderator mutet videoen din",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": "Pomoc",
|
"room.help": "Pomoc",
|
||||||
"room.about": "O pogramie",
|
"room.about": "O pogramie",
|
||||||
"room.shortcutKeys": "Skróty klawiaturowe",
|
"room.shortcutKeys": "Skróty klawiaturowe",
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": "Masz wyciszony mikrofon, przytrzymaj spację aby mówić",
|
"me.mutedPTT": "Masz wyciszony mikrofon, przytrzymaj spację aby mówić",
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": "Wyłącz wideo użytkownika",
|
"tooltip.muteParticipantVideo": "Wyłącz wideo użytkownika",
|
||||||
"tooltip.raisedHand": "Podnieś rękę",
|
"tooltip.raisedHand": "Podnieś rękę",
|
||||||
"tooltip.muteScreenSharing": "Anuluj udostępniania pulpitu przez użytkownika",
|
"tooltip.muteScreenSharing": "Anuluj udostępniania pulpitu przez użytkownika",
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Nazwa konferencji",
|
"label.roomName": "Nazwa konferencji",
|
||||||
"label.chooseRoomButton": "Kontynuuj",
|
"label.chooseRoomButton": "Kontynuuj",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Zamknij",
|
"label.close": "Zamknij",
|
||||||
"label.media": "Media",
|
"label.media": "Media",
|
||||||
"label.appearence": "Wygląd",
|
"label.appearance": "Wygląd",
|
||||||
"label.advanced": "Zaawansowane",
|
"label.advanced": "Zaawansowane",
|
||||||
"label.addVideo": "Dodaj wideo",
|
"label.addVideo": "Dodaj wideo",
|
||||||
"label.promoteAllPeers": "Wpuść wszystkich",
|
"label.promoteAllPeers": "Wpuść wszystkich",
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": "Moderator wyczyścił chat",
|
"moderator.clearChat": "Moderator wyczyścił chat",
|
||||||
"moderator.clearFiles": "Moderator wyczyścił pliki",
|
"moderator.clearFiles": "Moderator wyczyścił pliki",
|
||||||
"moderator.muteAudio": "Moderator wyciszył audio",
|
"moderator.muteAudio": "Moderator wyciszył audio",
|
||||||
"moderator.muteVideo": "Moderator wyciszył twoje video"
|
"moderator.muteVideo": "Moderator wyciszył twoje video",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Nome da sala",
|
"label.roomName": "Nome da sala",
|
||||||
"label.chooseRoomButton": "Continuar",
|
"label.chooseRoomButton": "Continuar",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Fechar",
|
"label.close": "Fechar",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Numele camerei",
|
"label.roomName": "Numele camerei",
|
||||||
"label.chooseRoomButton": "Continuare",
|
"label.chooseRoomButton": "Continuare",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Rezoluție ultra înaltă (UHD)",
|
"label.ultra": "Rezoluție ultra înaltă (UHD)",
|
||||||
"label.close": "Închide",
|
"label.close": "Închide",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Oda adı",
|
"label.roomName": "Oda adı",
|
||||||
"label.chooseRoomButton": "Devam",
|
"label.chooseRoomButton": "Devam",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ultra (UHD)",
|
"label.ultra": "Ultra (UHD)",
|
||||||
"label.close": "Kapat",
|
"label.close": "Kapat",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -175,5 +180,6 @@
|
||||||
"devices.screenSharingError": "Ekranınıza erişilirken bir hata oluştu",
|
"devices.screenSharingError": "Ekranınıza erişilirken bir hata oluştu",
|
||||||
|
|
||||||
"devices.cameraDisconnected": "Kamera bağlı değil",
|
"devices.cameraDisconnected": "Kamera bağlı değil",
|
||||||
"devices.cameraError": "Kameranıza erişilirken bir hata oluştu"
|
"devices.cameraError": "Kameranıza erişilirken bir hata oluştu",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,192 @@
|
||||||
|
{
|
||||||
|
"socket.disconnected": "您已斷開連接",
|
||||||
|
"socket.reconnecting": "嘗試重新連接",
|
||||||
|
"socket.reconnected": "您已重新連接",
|
||||||
|
"socket.requestError": "服務器請求錯誤",
|
||||||
|
|
||||||
|
"room.chooseRoom": "選擇您要加入的房間的名稱",
|
||||||
|
"room.cookieConsent": "這個網站使用Cookies來提升您的使用者體驗",
|
||||||
|
"room.consentUnderstand": "了解",
|
||||||
|
"room.joined": "您已加入房間",
|
||||||
|
"room.cantJoin": "無法加入房間",
|
||||||
|
"room.youLocked": "您已鎖定房間",
|
||||||
|
"room.cantLock": "無法鎖定房間",
|
||||||
|
"room.youUnLocked": "您解鎖了房間",
|
||||||
|
"room.cantUnLock": "無法解鎖房間",
|
||||||
|
"room.locked": "房間已鎖定",
|
||||||
|
"room.unlocked": "房間現已解鎖",
|
||||||
|
"room.newLobbyPeer": "新參與者進入大廳",
|
||||||
|
"room.lobbyPeerLeft": "參與者離開大廳",
|
||||||
|
"room.lobbyPeerChangedDisplayName": "大廳的參與者將名稱變更為 {displayName}",
|
||||||
|
"room.lobbyPeerChangedPicture": "大廳的參與者變更了圖片",
|
||||||
|
"room.setAccessCode": "設置房間的進入密碼",
|
||||||
|
"room.accessCodeOn": "房間的進入密碼現已啟用",
|
||||||
|
"room.accessCodeOff": "房間的進入密碼已停用",
|
||||||
|
"room.peerChangedDisplayName": "{oldDisplayName} 已變更名稱為 {displayName}",
|
||||||
|
"room.newPeer": "{displayName} 加入了會議室",
|
||||||
|
"room.newFile": "有新文件",
|
||||||
|
"room.toggleAdvancedMode": "切換進階模式",
|
||||||
|
"room.setDemocraticView": "已更改為使用者佈局",
|
||||||
|
"room.setFilmStripView": "已更改為投影片佈局",
|
||||||
|
"room.loggedIn": "您已登入",
|
||||||
|
"room.loggedOut": "您已登出",
|
||||||
|
"room.changedDisplayName": "您的顯示名稱已變更為 {displayName}",
|
||||||
|
"room.changeDisplayNameError": "更改顯示名稱時發生錯誤",
|
||||||
|
"room.chatError": "無法發送聊天消息",
|
||||||
|
"room.aboutToJoin": "您即將參加會議",
|
||||||
|
"room.roomId": "房間ID: {roomName}",
|
||||||
|
"room.setYourName": "設置您的顯示名稱,並選擇您想加入的方式:",
|
||||||
|
"room.audioOnly": "僅通話",
|
||||||
|
"room.audioVideo": "通話和視訊",
|
||||||
|
"room.youAreReady": "準備完畢!",
|
||||||
|
"room.emptyRequireLogin": "房間是空的! 您可以登錄以開始會議或等待主持人加入",
|
||||||
|
"room.locketWait": "房間已鎖定! 請等待其他人允許您進入...",
|
||||||
|
"room.lobbyAdministration": "大廳管理",
|
||||||
|
"room.peersInLobby": "大廳的參與者",
|
||||||
|
"room.lobbyEmpty": "大廳目前沒有人",
|
||||||
|
"room.hiddenPeers": "{hiddenPeersCount, plural, one {participant} other {participants}}",
|
||||||
|
"room.me": "我",
|
||||||
|
"room.spotlights": "Spotlight中的參與者",
|
||||||
|
"room.passive": "被動參與者",
|
||||||
|
"room.videoPaused": "視訊已關閉",
|
||||||
|
"room.muteAll": "全部靜音",
|
||||||
|
"room.stopAllVideo": "關閉全部視訊",
|
||||||
|
"room.closeMeeting": "關閉會議",
|
||||||
|
"room.clearChat": "清除聊天",
|
||||||
|
"room.clearFileSharing": "清除檔案",
|
||||||
|
"room.speechUnsupported": "您的瀏覽器不支援語音辨識",
|
||||||
|
"room.moderatoractions": "管理員動作",
|
||||||
|
"room.raisedHand": "{displayName} 舉手了",
|
||||||
|
"room.loweredHand": "{displayName} 放下了他的手",
|
||||||
|
"room.extraVideo": "其他視訊",
|
||||||
|
"room.overRoomLimit": "房間已滿,請稍後重試",
|
||||||
|
"room.help": "幫助",
|
||||||
|
"room.about": "關於",
|
||||||
|
"room.shortcutKeys": "鍵盤快速鍵",
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
|
"me.mutedPTT": "您已靜音,請按下 空白鍵 來說話",
|
||||||
|
|
||||||
|
"roles.gotRole": "您已取得身份: {role}",
|
||||||
|
"roles.lostRole": "您的 {role} 身份已被撤銷",
|
||||||
|
|
||||||
|
"tooltip.login": "登入",
|
||||||
|
"tooltip.logout": "登出",
|
||||||
|
"tooltip.admitFromLobby": "從大廳允許",
|
||||||
|
"tooltip.lockRoom": "鎖定房間",
|
||||||
|
"tooltip.unLockRoom": "解鎖房間",
|
||||||
|
"tooltip.enterFullscreen": "進入全螢幕",
|
||||||
|
"tooltip.leaveFullscreen": "退出全螢幕",
|
||||||
|
"tooltip.lobby": "顯示大廳",
|
||||||
|
"tooltip.settings": "顯示設置",
|
||||||
|
"tooltip.participants": "顯示參加者",
|
||||||
|
"tooltip.kickParticipant": "踢出",
|
||||||
|
"tooltip.muteParticipant": "靜音",
|
||||||
|
"tooltip.muteParticipantVideo": "隱藏視訊",
|
||||||
|
"tooltip.raisedHand": "舉手",
|
||||||
|
"tooltip.muteScreenSharing": "隱藏螢幕分享",
|
||||||
|
"tooltip.muteParticipantAudioModerator": "關閉聲音",
|
||||||
|
"tooltip.muteParticipantVideoModerator": "關閉視訊",
|
||||||
|
"tooltip.muteScreenSharingModerator": "關閉螢幕分享",
|
||||||
|
|
||||||
|
"label.roomName": "房間名稱",
|
||||||
|
"label.chooseRoomButton": "繼續",
|
||||||
|
"label.yourName": "您的名字",
|
||||||
|
"label.newWindow": "新視窗",
|
||||||
|
"label.fullscreen": "全螢幕",
|
||||||
|
"label.openDrawer": "打開側邊欄",
|
||||||
|
"label.leave": "離開",
|
||||||
|
"label.chatInput": "輸入聊天訊息",
|
||||||
|
"label.chat": "聊天",
|
||||||
|
"label.filesharing": "文件分享",
|
||||||
|
"label.participants": "參與者",
|
||||||
|
"label.shareFile": "分享文件",
|
||||||
|
"label.shareGalleryFile": "分享圖片",
|
||||||
|
"label.fileSharingUnsupported": "不支援文件分享",
|
||||||
|
"label.unknown": "未知",
|
||||||
|
"label.democratic": "使用者佈局",
|
||||||
|
"label.filmstrip": "投影片佈局",
|
||||||
|
"label.low": "低",
|
||||||
|
"label.medium": "中",
|
||||||
|
"label.high": "高 (HD)",
|
||||||
|
"label.veryHigh": "非常高 (FHD)",
|
||||||
|
"label.ultra": "超高 (UHD)",
|
||||||
|
"label.close": "關閉",
|
||||||
|
"label.media": "媒體",
|
||||||
|
"label.appearance": "外觀",
|
||||||
|
"label.advanced": "進階",
|
||||||
|
"label.addVideo": "新增視訊",
|
||||||
|
"label.promoteAllPeers": "提升全部",
|
||||||
|
"label.moreActions": "更多",
|
||||||
|
|
||||||
|
"settings.settings": "設置",
|
||||||
|
"settings.camera": "視訊來源",
|
||||||
|
"settings.selectCamera": "選擇視訊來源",
|
||||||
|
"settings.cantSelectCamera": "無法選擇此視訊來源",
|
||||||
|
"settings.audio": "音訊來源",
|
||||||
|
"settings.selectAudio": "選擇音訊來源",
|
||||||
|
"settings.cantSelectAudio": "無法選擇音訊來源",
|
||||||
|
"settings.audioOutput": "音訊輸出",
|
||||||
|
"settings.selectAudioOutput": "選擇音訊輸出設備",
|
||||||
|
"settings.cantSelectAudioOutput": "無法選擇音訊輸出設備",
|
||||||
|
"settings.resolution": "選擇視訊解析度",
|
||||||
|
"settings.layout": "房間佈局",
|
||||||
|
"settings.selectRoomLayout": "選擇房間佈局",
|
||||||
|
"settings.advancedMode": "進階模式",
|
||||||
|
"settings.permanentTopBar": "固定頂端列",
|
||||||
|
"settings.lastn": "視訊數量上限",
|
||||||
|
"settings.hiddenControls": "隱藏控制按鈕",
|
||||||
|
"settings.notificationSounds": "通知音效",
|
||||||
|
"settings.showNotifications": "顯示通知",
|
||||||
|
"settings.buttonControlBar": "獨立控制按鈕",
|
||||||
|
"settings.echoCancellation": "回音消除",
|
||||||
|
"settings.autoGainControl": "自動增益控制",
|
||||||
|
"settings.noiseSuppression": "噪音消除",
|
||||||
|
"settings.drawerOverlayed": "側邊欄覆蓋畫面",
|
||||||
|
|
||||||
|
"filesharing.saveFileError": "無法保存文件",
|
||||||
|
"filesharing.startingFileShare": "開始分享文件",
|
||||||
|
"filesharing.successfulFileShare": "文件已成功分享",
|
||||||
|
"filesharing.unableToShare": "無法分享文件",
|
||||||
|
"filesharing.error": "文件分享發生錯誤",
|
||||||
|
"filesharing.finished": "文件分享成功",
|
||||||
|
"filesharing.save": "保存文件",
|
||||||
|
"filesharing.sharedFile": "{displayName} 分享了一個文件",
|
||||||
|
"filesharing.download": "下載文件",
|
||||||
|
"filesharing.missingSeeds": "如果過了很久還是無法下載,則可能沒有人播種了。請讓上傳者重新上傳您想要的文件。",
|
||||||
|
|
||||||
|
"devices.devicesChanged": "您的設備已更改,請在設置中設定您的設備",
|
||||||
|
|
||||||
|
"device.audioUnsupported": "不支援您的音訊格式",
|
||||||
|
"device.activateAudio": "開啟音訊",
|
||||||
|
"device.muteAudio": "靜音",
|
||||||
|
"device.unMuteAudio": "取消靜音",
|
||||||
|
|
||||||
|
"device.videoUnsupported": "不支援您的視訊格式",
|
||||||
|
"device.startVideo": "開啟視訊",
|
||||||
|
"device.stopVideo": "關閉視訊",
|
||||||
|
|
||||||
|
"device.screenSharingUnsupported": "不支援您的螢幕分享格式",
|
||||||
|
"device.startScreenSharing": "開始螢幕分享",
|
||||||
|
"device.stopScreenSharing": "停止螢幕分享",
|
||||||
|
|
||||||
|
"devices.microphoneDisconnected": "麥克風已斷開",
|
||||||
|
"devices.microphoneError": "麥克風發生錯誤",
|
||||||
|
"devices.microphoneMute": "麥克風靜音",
|
||||||
|
"devices.microphoneUnMute": "取消麥克風靜音",
|
||||||
|
"devices.microphoneEnable": "麥克風已啟用",
|
||||||
|
"devices.microphoneMuteError": "無法使麥克風靜音",
|
||||||
|
"devices.microphoneUnMuteError": "無法取消麥克風靜音",
|
||||||
|
|
||||||
|
"devices.screenSharingDisconnected" : "螢幕分享已斷開",
|
||||||
|
"devices.screenSharingError": "螢幕分享時發生錯誤",
|
||||||
|
|
||||||
|
"devices.cameraDisconnected": "相機已斷開連接",
|
||||||
|
"devices.cameraError": "存取相機時發生錯誤",
|
||||||
|
|
||||||
|
"moderator.clearChat": "管理員清除了聊天",
|
||||||
|
"moderator.clearFiles": "管理員清除了所有檔案",
|
||||||
|
"moderator.muteAudio": "您已被管理員靜音",
|
||||||
|
"moderator.muteVideo": "您的視訊已被管理員關閉",
|
||||||
|
"moderator.muteScreenSharing": null
|
||||||
|
}
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
"room.help": null,
|
"room.help": null,
|
||||||
"room.about": null,
|
"room.about": null,
|
||||||
"room.shortcutKeys": null,
|
"room.shortcutKeys": null,
|
||||||
|
"room.browsePeersSpotlight": null,
|
||||||
|
"room.stopAllScreenSharing": null,
|
||||||
|
|
||||||
"me.mutedPTT": null,
|
"me.mutedPTT": null,
|
||||||
|
|
||||||
|
|
@ -84,6 +86,9 @@
|
||||||
"tooltip.muteParticipantVideo": null,
|
"tooltip.muteParticipantVideo": null,
|
||||||
"tooltip.raisedHand": null,
|
"tooltip.raisedHand": null,
|
||||||
"tooltip.muteScreenSharing": null,
|
"tooltip.muteScreenSharing": null,
|
||||||
|
"tooltip.muteParticipantAudioModerator": null,
|
||||||
|
"tooltip.muteParticipantVideoModerator": null,
|
||||||
|
"tooltip.muteScreenSharingModerator": null,
|
||||||
|
|
||||||
"label.roomName": "Назва кімнати",
|
"label.roomName": "Назва кімнати",
|
||||||
"label.chooseRoomButton": "Продовжити",
|
"label.chooseRoomButton": "Продовжити",
|
||||||
|
|
@ -109,7 +114,7 @@
|
||||||
"label.ultra": "Ультра (UHD)",
|
"label.ultra": "Ультра (UHD)",
|
||||||
"label.close": "Закрити",
|
"label.close": "Закрити",
|
||||||
"label.media": null,
|
"label.media": null,
|
||||||
"label.appearence": null,
|
"label.appearance": null,
|
||||||
"label.advanced": null,
|
"label.advanced": null,
|
||||||
"label.addVideo": null,
|
"label.addVideo": null,
|
||||||
"label.promoteAllPeers": null,
|
"label.promoteAllPeers": null,
|
||||||
|
|
@ -183,5 +188,6 @@
|
||||||
"moderator.clearChat": null,
|
"moderator.clearChat": null,
|
||||||
"moderator.clearFiles": null,
|
"moderator.clearFiles": null,
|
||||||
"moderator.muteAudio": null,
|
"moderator.muteAudio": null,
|
||||||
"moderator.muteVideo": null
|
"moderator.muteVideo": null,
|
||||||
}
|
"moderator.muteScreenSharing": null
|
||||||
|
}
|
||||||
|
|
@ -1441,6 +1441,38 @@ class Room extends EventEmitter
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'moderator:stopAllScreenSharing':
|
||||||
|
{
|
||||||
|
if (!this._hasPermission(peer, MODERATE_ROOM))
|
||||||
|
throw new Error('peer not authorized');
|
||||||
|
|
||||||
|
// Spread to others
|
||||||
|
this._notification(peer.socket, 'moderator:stopScreenSharing', null, true);
|
||||||
|
|
||||||
|
cb();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'moderator:stopScreenSharing':
|
||||||
|
{
|
||||||
|
if (!this._hasPermission(peer, MODERATE_ROOM))
|
||||||
|
throw new Error('peer not authorized');
|
||||||
|
|
||||||
|
const { peerId } = request.data;
|
||||||
|
|
||||||
|
const stopVideoPeer = this._peers[peerId];
|
||||||
|
|
||||||
|
if (!stopVideoPeer)
|
||||||
|
throw new Error(`peer with id "${peerId}" not found`);
|
||||||
|
|
||||||
|
this._notification(stopVideoPeer.socket, 'moderator:stopScreenSharing');
|
||||||
|
|
||||||
|
cb();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'moderator:closeMeeting':
|
case 'moderator:closeMeeting':
|
||||||
{
|
{
|
||||||
if (!this._hasPermission(peer, MODERATE_ROOM))
|
if (!this._hasPermission(peer, MODERATE_ROOM))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue