Merge remote-tracking branch 'upstream/develop' into mm-exporter

auto_join_3.3
Christian Hörtnagl 2020-04-24 07:36:38 +02:00
commit b6d4833b62
30 changed files with 314 additions and 54 deletions

View File

@ -25,6 +25,16 @@ var config =
{ scaleResolutionDownBy: 2 }, { scaleResolutionDownBy: 2 },
{ scaleResolutionDownBy: 1 } { scaleResolutionDownBy: 1 }
], ],
/**
* White listing browsers that support audio output device selection.
* It is not yet fully implemented in Firefox.
* See: https://bugzilla.mozilla.org/show_bug.cgi?id=1498512
*/
audioOutputSupportedBrowsers :
[
'chrome',
'opera'
],
// Socket.io request timeout // Socket.io request timeout
requestTimeout : 10000, requestTimeout : 10000,
transportOptions : transportOptions :

View File

@ -244,6 +244,8 @@ export default class RoomClient
this._audioDevices = {}; this._audioDevices = {};
this._audioOutputDevices = {};
// mediasoup Consumers. // mediasoup Consumers.
// @type {Map<String, mediasoupClient.Consumer>} // @type {Map<String, mediasoupClient.Consumer>}
this._consumers = new Map(); this._consumers = new Map();
@ -360,7 +362,7 @@ export default class RoomClient
store.dispatch(requestActions.notify( store.dispatch(requestActions.notify(
{ {
text : intl.formatMessage({ text : intl.formatMessage({
id : 'devices.microPhoneMute', id : 'devices.microphoneMute',
defaultMessage : 'Muted your microphone' defaultMessage : 'Muted your microphone'
}) })
})); }));
@ -372,7 +374,7 @@ export default class RoomClient
store.dispatch(requestActions.notify( store.dispatch(requestActions.notify(
{ {
text : intl.formatMessage({ text : intl.formatMessage({
id : 'devices.microPhoneUnMute', id : 'devices.microphoneUnMute',
defaultMessage : 'Unmuted your microphone' defaultMessage : 'Unmuted your microphone'
}) })
})); }));
@ -456,6 +458,7 @@ export default class RoomClient
await this._updateAudioDevices(); await this._updateAudioDevices();
await this._updateWebcams(); await this._updateWebcams();
await this._updateAudioOutputDevices();
store.dispatch(requestActions.notify( store.dispatch(requestActions.notify(
{ {
@ -1107,6 +1110,37 @@ export default class RoomClient
meActions.setAudioInProgress(false)); meActions.setAudioInProgress(false));
} }
async changeAudioOutputDevice(deviceId)
{
logger.debug('changeAudioOutputDevice() [deviceId: %s]', deviceId);
store.dispatch(
meActions.setAudioOutputInProgress(true));
try
{
const device = this._audioOutputDevices[deviceId];
if (!device)
throw new Error('Selected audio output device no longer avaibale');
logger.debug(
'changeAudioOutputDevice() | new selected [audio output device:%o]',
device);
store.dispatch(settingsActions.setSelectedAudioOutputDevice(deviceId));
await this._updateAudioOutputDevices();
}
catch (error)
{
logger.error('changeAudioOutputDevice() failed: %o', error);
}
store.dispatch(
meActions.setAudioOutputInProgress(false));
}
async changeVideoResolution(resolution) async changeVideoResolution(resolution)
{ {
logger.debug('changeVideoResolution() [resolution: %s]', resolution); logger.debug('changeVideoResolution() [resolution: %s]', resolution);
@ -2717,6 +2751,19 @@ export default class RoomClient
this.enableWebcam(); this.enableWebcam();
} }
await this._updateAudioOutputDevices();
const { selectedAudioOutputDevice } = store.getState().settings;
if (!selectedAudioOutputDevice && this._audioOutputDevices !== {})
{
store.dispatch(
settingsActions.setSelectedAudioOutputDevice(
Object.keys(this._audioOutputDevices)[0]
)
);
}
store.dispatch(roomActions.setRoomState('connected')); store.dispatch(roomActions.setRoomState('connected'));
// Clean all the existing notifications. // Clean all the existing notifications.
@ -3515,4 +3562,35 @@ export default class RoomClient
logger.error('_getWebcamDeviceId() failed:%o', error); logger.error('_getWebcamDeviceId() failed:%o', error);
} }
} }
async _updateAudioOutputDevices()
{
logger.debug('_updateAudioOutputDevices()');
// Reset the list.
this._audioOutputDevices = {};
try
{
logger.debug('_updateAudioOutputDevices() | calling enumerateDevices()');
const devices = await navigator.mediaDevices.enumerateDevices();
for (const device of devices)
{
if (device.kind !== 'audiooutput')
continue;
this._audioOutputDevices[device.deviceId] = device;
}
store.dispatch(
meActions.setAudioOutputDevices(this._audioOutputDevices));
}
catch (error)
{
logger.error('_updateAudioOutputDevices() failed:%o', error);
}
}
} }

View File

@ -31,6 +31,8 @@ beforeEach(() =>
me : { me : {
audioDevices : null, audioDevices : null,
audioInProgress : false, audioInProgress : false,
audioOutputDevices : null,
audioOutputInProgress : false,
canSendMic : false, canSendMic : false,
canSendWebcam : false, canSendWebcam : false,
canShareFiles : false, canShareFiles : false,
@ -76,6 +78,7 @@ beforeEach(() =>
displayName : 'Jest Tester', displayName : 'Jest Tester',
resolution : 'ultra', resolution : 'ultra',
selectedAudioDevice : 'default', selectedAudioDevice : 'default',
selectedAudioOutputDevice : 'default',
selectedWebcam : 'soifjsiajosjfoi' selectedWebcam : 'soifjsiajosjfoi'
}, },
toolarea : { toolarea : {

View File

@ -51,6 +51,12 @@ export const setAudioDevices = (devices) =>
payload : { devices } payload : { devices }
}); });
export const setAudioOutputDevices = (devices) =>
({
type : 'SET_AUDIO_OUTPUT_DEVICES',
payload : { devices }
});
export const setWebcamDevices = (devices) => export const setWebcamDevices = (devices) =>
({ ({
type : 'SET_WEBCAM_DEVICES', type : 'SET_WEBCAM_DEVICES',
@ -69,6 +75,12 @@ export const setAudioInProgress = (flag) =>
payload : { flag } payload : { flag }
}); });
export const setAudioOutputInProgress = (flag) =>
({
type : 'SET_AUDIO_OUTPUT_IN_PROGRESS',
payload : { flag }
});
export const setWebcamInProgress = (flag) => export const setWebcamInProgress = (flag) =>
({ ({
type : 'SET_WEBCAM_IN_PROGRESS', type : 'SET_WEBCAM_IN_PROGRESS',

View File

@ -4,6 +4,12 @@ export const setSelectedAudioDevice = (deviceId) =>
payload : { deviceId } payload : { deviceId }
}); });
export const setSelectedAudioOutputDevice = (deviceId) =>
({
type : 'CHANGE_AUDIO_OUTPUT_DEVICE',
payload : { deviceId }
});
export const setSelectedWebcamDevice = (deviceId) => export const setSelectedWebcamDevice = (deviceId) =>
({ ({
type : 'CHANGE_WEBCAM', type : 'CHANGE_WEBCAM',

View File

@ -42,7 +42,7 @@ const ChatModerator = (props) =>
} = props; } = props;
if (!isChatModerator) if (!isChatModerator)
return; return null;
return ( return (
<ul className={classes.root}> <ul className={classes.root}>

View File

@ -6,6 +6,7 @@ import DOMPurify from 'dompurify';
import marked from 'marked'; import marked from 'marked';
import Paper from '@material-ui/core/Paper'; import Paper from '@material-ui/core/Paper';
import Typography from '@material-ui/core/Typography'; import Typography from '@material-ui/core/Typography';
import { useIntl } from 'react-intl';
const linkRenderer = new marked.Renderer(); const linkRenderer = new marked.Renderer();
@ -55,6 +56,8 @@ const styles = (theme) =>
const Message = (props) => const Message = (props) =>
{ {
const intl = useIntl();
const { const {
self, self,
picture, picture,
@ -88,7 +91,16 @@ const Message = (props) =>
} }
) }} ) }}
/> />
<Typography variant='caption'>{self ? 'Me' : name} - {time}</Typography> <Typography variant='caption'>
{ self ?
intl.formatMessage({
id : 'room.me',
defaultMessage : 'Me'
})
:
name
} - {time}
</Typography>
</div> </div>
</Paper> </Paper>
); );

View File

@ -42,7 +42,7 @@ const FileSharingModerator = (props) =>
} = props; } = props;
if (!isFileSharingModerator) if (!isFileSharingModerator)
return; return null;
return ( return (
<ul className={classes.root}> <ul className={classes.root}>

View File

@ -7,7 +7,8 @@ import PeerAudio from './PeerAudio';
const AudioPeers = (props) => const AudioPeers = (props) =>
{ {
const { const {
micConsumers micConsumers,
audioOutputDevice
} = props; } = props;
return ( return (
@ -19,6 +20,7 @@ const AudioPeers = (props) =>
<PeerAudio <PeerAudio
key={micConsumer.id} key={micConsumer.id}
audioTrack={micConsumer.track} audioTrack={micConsumer.track}
audioOutputDevice={audioOutputDevice}
/> />
); );
}) })
@ -29,12 +31,14 @@ const AudioPeers = (props) =>
AudioPeers.propTypes = AudioPeers.propTypes =
{ {
micConsumers : PropTypes.array micConsumers : PropTypes.array,
audioOutputDevice : PropTypes.string
}; };
const mapStateToProps = (state) => const mapStateToProps = (state) =>
({ ({
micConsumers : micConsumerSelector(state) micConsumers : micConsumerSelector(state),
audioOutputDevice : state.settings.selectedAudioOutputDevice
}); });
const AudioPeersContainer = connect( const AudioPeersContainer = connect(
@ -45,7 +49,8 @@ const AudioPeersContainer = connect(
areStatesEqual : (next, prev) => areStatesEqual : (next, prev) =>
{ {
return ( return (
prev.consumers === next.consumers prev.consumers === next.consumers &&
prev.settings.selectedAudioOutputDevice === next.settings.selectedAudioOutputDevice
); );
} }
} }

View File

@ -10,6 +10,7 @@ export default class PeerAudio extends React.PureComponent
// Latest received audio track. // Latest received audio track.
// @type {MediaStreamTrack} // @type {MediaStreamTrack}
this._audioTrack = null; this._audioTrack = null;
this._audioOutputDevice = null;
} }
render() render()
@ -24,17 +25,19 @@ export default class PeerAudio extends React.PureComponent
componentDidMount() componentDidMount()
{ {
const { audioTrack } = this.props; const { audioTrack, audioOutputDevice } = this.props;
this._setTrack(audioTrack); this._setTrack(audioTrack);
this._setOutputDevice(audioOutputDevice);
} }
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
UNSAFE_componentWillReceiveProps(nextProps) UNSAFE_componentWillReceiveProps(nextProps)
{ {
const { audioTrack } = nextProps; const { audioTrack, audioOutputDevice } = nextProps;
this._setTrack(audioTrack); this._setTrack(audioTrack);
this._setOutputDevice(audioOutputDevice);
} }
_setTrack(audioTrack) _setTrack(audioTrack)
@ -60,9 +63,23 @@ export default class PeerAudio extends React.PureComponent
audio.srcObject = null; audio.srcObject = null;
} }
} }
_setOutputDevice(audioOutputDevice)
{
if (this._audioOutputDevice === audioOutputDevice)
return;
this._audioOutputDevice = audioOutputDevice;
const { audio } = this.refs;
if (audioOutputDevice && typeof audio.setSinkId === 'function')
audio.setSinkId(audioOutputDevice);
}
} }
PeerAudio.propTypes = PeerAudio.propTypes =
{ {
audioTrack : PropTypes.any audioTrack : PropTypes.any,
audioOutputDevice : PropTypes.string
}; };

View File

@ -131,6 +131,13 @@ const Settings = ({
else else
audioDevices = []; audioDevices = [];
let audioOutputDevices;
if (me.audioOutputDevices)
audioOutputDevices = Object.values(me.audioOutputDevices);
else
audioOutputDevices = [];
return ( return (
<Dialog <Dialog
className={classes.root} className={classes.root}
@ -226,6 +233,55 @@ const Settings = ({
</FormHelperText> </FormHelperText>
</FormControl> </FormControl>
</form> </form>
{
'audioOutputSupportedBrowsers' in window.config &&
window.config.audioOutputSupportedBrowsers.includes(me.browser.name) &&
<form className={classes.setting} autoComplete='off'>
<FormControl className={classes.formControl}>
<Select
value={settings.selectedAudioOutputDevice || ''}
onChange={(event) =>
{
if (event.target.value)
roomClient.changeAudioOutputDevice(event.target.value);
}}
displayEmpty
name={intl.formatMessage({
id : 'settings.audioOutput',
defaultMessage : 'Audio output device'
})}
autoWidth
className={classes.selectEmpty}
disabled={audioOutputDevices.length === 0 || me.audioOutputInProgress}
>
{ audioOutputDevices.map((audioOutput, index) =>
{
return (
<MenuItem
key={index}
value={audioOutput.deviceId}
>
{audioOutput.label}
</MenuItem>
);
})}
</Select>
<FormHelperText>
{ audioOutputDevices.length > 0 ?
intl.formatMessage({
id : 'settings.selectAudioOutput',
defaultMessage : 'Select audio output device'
})
:
intl.formatMessage({
id : 'settings.cantSelectAudioOutput',
defaultMessage : 'Unable to select audio output device'
})
}
</FormHelperText>
</FormControl>
</form>
}
<form className={classes.setting} autoComplete='off'> <form className={classes.setting} autoComplete='off'>
<FormControl className={classes.formControl}> <FormControl className={classes.formControl}>
<Select <Select

View File

@ -26,7 +26,7 @@ export default function()
flag, flag,
os : browser.getOSName(true), // ios, android, linux... os : browser.getOSName(true), // ios, android, linux...
platform : browser.getPlatformType(true), // mobile, desktop, tablet platform : browser.getPlatformType(true), // mobile, desktop, tablet
name : browser.getBrowserName(), name : browser.getBrowserName(true),
version : browser.getBrowserVersion(), version : browser.getBrowserVersion(),
bowser : browser bowser : browser
}; };

View File

@ -99,6 +99,13 @@ const me = (state = initialState, action) =>
return { ...state, audioDevices: devices }; return { ...state, audioDevices: devices };
} }
case 'SET_AUDIO_OUTPUT_DEVICES':
{
const { devices } = action.payload;
return { ...state, audioOutputDevices: devices };
}
case 'SET_WEBCAM_DEVICES': case 'SET_WEBCAM_DEVICES':
{ {
const { devices } = action.payload; const { devices } = action.payload;

View File

@ -23,6 +23,11 @@ const settings = (state = initialState, action) =>
return { ...state, selectedAudioDevice: action.payload.deviceId }; return { ...state, selectedAudioDevice: action.payload.deviceId };
} }
case 'CHANGE_AUDIO_OUTPUT_DEVICE':
{
return { ...state, selectedAudioOutputDevice: action.payload.deviceId };
}
case 'SET_DISPLAY_NAME': case 'SET_DISPLAY_NAME':
{ {
const { displayName } = action.payload; const { displayName } = action.payload;

View File

@ -100,6 +100,9 @@
"settings.audio": "音频设备", "settings.audio": "音频设备",
"settings.selectAudio": "选择音频设备", "settings.selectAudio": "选择音频设备",
"settings.cantSelectAudio": "无法选择音频设备", "settings.cantSelectAudio": "无法选择音频设备",
"settings.audioOutput": "音频输出设备",
"settings.selectAudioOutput": "选择音频输出设备",
"settings.cantSelectAudioOutput": "无法选择音频输出设备",
"settings.resolution": "选择视频分辨率", "settings.resolution": "选择视频分辨率",
"settings.layout": "房间布局", "settings.layout": "房间布局",
"settings.selectRoomLayout": "选择房间布局", "settings.selectRoomLayout": "选择房间布局",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "麦克风已断开", "devices.microphoneDisconnected": "麦克风已断开",
"devices.microphoneError": "麦克风发生错误", "devices.microphoneError": "麦克风发生错误",
"devices.microPhoneMute": "麦克风静音", "devices.microphoneMute": "麦克风静音",
"devices.micophoneUnMute": "取消麦克风静音", "devices.microphoneUnMute": "取消麦克风静音",
"devices.microphoneEnable": "启用了麦克风", "devices.microphoneEnable": "启用了麦克风",
"devices.microphoneMuteError": "无法使麦克风静音", "devices.microphoneMuteError": "无法使麦克风静音",
"devices.microphoneUnMuteError": "无法取消麦克风静音", "devices.microphoneUnMuteError": "无法取消麦克风静音",

View File

@ -97,6 +97,9 @@
"settings.audio": "Audio zařízení", "settings.audio": "Audio zařízení",
"settings.selectAudio": "Vyberte audio zařízení", "settings.selectAudio": "Vyberte audio zařízení",
"settings.cantSelectAudio": "Není možno vybrat audio zařízení", "settings.cantSelectAudio": "Není možno vybrat audio zařízení",
"settings.audioOutput": "Audio output zařízení",
"settings.selectAudioOutput": "Vyberte audio output zařízení",
"settings.cantSelectAudioOutput": "Není možno vybrat audio output zařízení",
"settings.resolution": "Vyberte rozlišení vašeho videa", "settings.resolution": "Vyberte rozlišení vašeho videa",
"settings.layout": "Rozvržení místnosti", "settings.layout": "Rozvržení místnosti",
"settings.selectRoomLayout": "Vyberte rozvržení místnosti", "settings.selectRoomLayout": "Vyberte rozvržení místnosti",
@ -130,8 +133,8 @@
"devices.microphoneDisconnected": "Mikrofon odpojen", "devices.microphoneDisconnected": "Mikrofon odpojen",
"devices.microphoneError": "Při přístupu k vašemu mikrofonu se vyskytla chyba", "devices.microphoneError": "Při přístupu k vašemu mikrofonu se vyskytla chyba",
"devices.microPhoneMute": "Mikrofon ztišen", "devices.microphoneMute": "Mikrofon ztišen",
"devices.micophoneUnMute": "Ztišení mikrofonu zrušeno", "devices.microphoneUnMute": "Ztišení mikrofonu zrušeno",
"devices.microphoneEnable": "Mikrofon povolen", "devices.microphoneEnable": "Mikrofon povolen",
"devices.microphoneMuteError": "Není možné ztišit váš mikrofon", "devices.microphoneMuteError": "Není možné ztišit váš mikrofon",
"devices.microphoneUnMuteError": "Není možné zrušit ztišení vašeho mikrofonu", "devices.microphoneUnMuteError": "Není možné zrušit ztišení vašeho mikrofonu",

View File

@ -100,6 +100,9 @@
"settings.audio": "Audiogerät", "settings.audio": "Audiogerät",
"settings.selectAudio": "Wähle ein Audiogerät", "settings.selectAudio": "Wähle ein Audiogerät",
"settings.cantSelectAudio": "Kann Audiogerät nicht aktivieren", "settings.cantSelectAudio": "Kann Audiogerät nicht aktivieren",
"settings.audioOutput": "Audioausgabegerät",
"settings.selectAudioOutput": "Wähle ein Audioausgabegerät",
"settings.cantSelectAudioOutput": "Kann Audioausgabegerät nicht aktivieren",
"settings.resolution": "Wähle eine Auflösung", "settings.resolution": "Wähle eine Auflösung",
"settings.layout": "Raumlayout", "settings.layout": "Raumlayout",
"settings.selectRoomLayout": "Wähle ein Raumlayout", "settings.selectRoomLayout": "Wähle ein Raumlayout",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Mikrofon nicht verbunden", "devices.microphoneDisconnected": "Mikrofon nicht verbunden",
"devices.microphoneError": "Fehler beim Zugriff auf dein Mikrofon", "devices.microphoneError": "Fehler beim Zugriff auf dein Mikrofon",
"devices.microPhoneMute": "Mikrofon stummgeschaltet", "devices.microphoneMute": "Mikrofon stummgeschaltet",
"devices.micophoneUnMute": "Mikrofon aktiviert", "devices.microphoneUnMute": "Mikrofon aktiviert",
"devices.microphoneEnable": "Mikrofon aktiviert", "devices.microphoneEnable": "Mikrofon aktiviert",
"devices.microphoneMuteError": "Kann Mikrofon nicht stummschalten", "devices.microphoneMuteError": "Kann Mikrofon nicht stummschalten",
"devices.microphoneUnMuteError": "Kann Mikrofon nicht aktivieren", "devices.microphoneUnMuteError": "Kann Mikrofon nicht aktivieren",

View File

@ -100,6 +100,10 @@
"settings.audio": "Lydenhed", "settings.audio": "Lydenhed",
"settings.selectAudio": "Vælg lydenhed", "settings.selectAudio": "Vælg lydenhed",
"settings.cantSelectAudio": "Kan ikke vælge lydenhed", "settings.cantSelectAudio": "Kan ikke vælge lydenhed",
"settings.audioOutput": "Audio output enhed",
"settings.selectAudioOutput": "Vælg lydudgangsenhed",
"settings.cantSelectAudioOutput": "Kan ikke vælge lydoutputenhed",
"settings.resolution": "Vælg din videoopløsning", "settings.resolution": "Vælg din videoopløsning",
"settings.layout": "Møde visning", "settings.layout": "Møde visning",
"settings.selectRoomLayout": "Vælg møde visning", "settings.selectRoomLayout": "Vælg møde visning",
@ -135,8 +139,8 @@
"device.microphoneDisconnected": "Mikrofon frakoblet", "device.microphoneDisconnected": "Mikrofon frakoblet",
"device.microphoneError": "Der opstod en fejl under adgang til din mikrofon", "device.microphoneError": "Der opstod en fejl under adgang til din mikrofon",
"device.microPhoneMute": "Dæmp din mikrofon", "device.microphoneMute": "Dæmp din mikrofon",
"device.micophoneUnMute": "Slå ikke lyden fra din mikrofon", "device.microphoneUnMute": "Slå ikke lyden fra din mikrofon",
"device.microphoneEnable": "Aktiveret din mikrofon", "device.microphoneEnable": "Aktiveret din mikrofon",
"device.microphoneMuteError": "Kan ikke slå din mikrofon fra", "device.microphoneMuteError": "Kan ikke slå din mikrofon fra",
"device.microphoneUnMuteError": "Kan ikke slå lyden til på din mikrofon", "device.microphoneUnMuteError": "Kan ikke slå lyden til på din mikrofon",

View File

@ -100,6 +100,9 @@
"settings.audio": "Συσκευή ήχου", "settings.audio": "Συσκευή ήχου",
"settings.selectAudio": "Επιλογή συσκευής ήχου", "settings.selectAudio": "Επιλογή συσκευής ήχου",
"settings.cantSelectAudio": "Αδυναμία επιλογής συσκευής ήχου", "settings.cantSelectAudio": "Αδυναμία επιλογής συσκευής ήχου",
"settings.audioOutput": "Συσκευή εξόδου ήχου",
"settings.selectAudioOutput": "Επιλέξτε συσκευή εξόδου ήχου",
"settings.cantSelectAudioOutput": "Δεν είναι δυνατή η επιλογή συσκευής εξόδου ήχου",
"settings.resolution": "Επιλέξτε την ανάλυση του video", "settings.resolution": "Επιλέξτε την ανάλυση του video",
"settings.layout": "Περιβάλλον δωματίου", "settings.layout": "Περιβάλλον δωματίου",
"settings.selectRoomLayout": "Επιλογή περιβάλλοντος δωματίου", "settings.selectRoomLayout": "Επιλογή περιβάλλοντος δωματίου",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Το μικρόφωνο αποσυνδέθηκε", "devices.microphoneDisconnected": "Το μικρόφωνο αποσυνδέθηκε",
"devices.microphoneError": "Παρουσιάστηκε σφάλμα κατά την πρόσβαση στο μικρόφωνό σας", "devices.microphoneError": "Παρουσιάστηκε σφάλμα κατά την πρόσβαση στο μικρόφωνό σας",
"devices.microPhoneMute": "Το μικρόφωνό σας είναι σε σίγαση", "devices.microphoneMute": "Το μικρόφωνό σας είναι σε σίγαση",
"devices.micophoneUnMute": "Ανοίξτε το μικρόφωνό σας", "devices.microphoneUnMute": "Ανοίξτε το μικρόφωνό σας",
"devices.microphoneEnable": "Ενεργοποίησε το μικρόφωνό σας", "devices.microphoneEnable": "Ενεργοποίησε το μικρόφωνό σας",
"devices.microphoneMuteError": "Δεν είναι δυνατή η σίγαση του μικροφώνου σας", "devices.microphoneMuteError": "Δεν είναι δυνατή η σίγαση του μικροφώνου σας",
"devices.microphoneUnMuteError": "Δεν είναι δυνατό το άνοιγμα του μικροφώνου σας", "devices.microphoneUnMuteError": "Δεν είναι δυνατό το άνοιγμα του μικροφώνου σας",

View File

@ -100,6 +100,9 @@
"settings.audio": "Audio device", "settings.audio": "Audio device",
"settings.selectAudio": "Select audio device", "settings.selectAudio": "Select audio device",
"settings.cantSelectAudio": "Unable to select audio device", "settings.cantSelectAudio": "Unable to select audio device",
"settings.audioOutput": "Audio output device",
"settings.selectAudioOutput": "Select audio output device",
"settings.cantSelectAudioOutput": "Unable to select audio output device",
"settings.resolution": "Select your video resolution", "settings.resolution": "Select your video resolution",
"settings.layout": "Room layout", "settings.layout": "Room layout",
"settings.selectRoomLayout": "Select room layout", "settings.selectRoomLayout": "Select room layout",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Microphone disconnected", "devices.microphoneDisconnected": "Microphone disconnected",
"devices.microphoneError": "An error occured while accessing your microphone", "devices.microphoneError": "An error occured while accessing your microphone",
"devices.microPhoneMute": "Muted your microphone", "devices.microphoneMute": "Muted your microphone",
"devices.micophoneUnMute": "Unmuted your microphone", "devices.microphoneUnMute": "Unmuted your microphone",
"devices.microphoneEnable": "Enabled your microphone", "devices.microphoneEnable": "Enabled your microphone",
"devices.microphoneMuteError": "Unable to mute your microphone", "devices.microphoneMuteError": "Unable to mute your microphone",
"devices.microphoneUnMuteError": "Unable to unmute your microphone", "devices.microphoneUnMuteError": "Unable to unmute your microphone",

View File

@ -100,6 +100,9 @@
"settings.audio": "Dispositivo de sonido", "settings.audio": "Dispositivo de sonido",
"settings.selectAudio": "Seleccione dispositivo de sonido", "settings.selectAudio": "Seleccione dispositivo de sonido",
"settings.cantSelectAudio": "No ha sido posible seleccionar el dispositivo de sonido", "settings.cantSelectAudio": "No ha sido posible seleccionar el dispositivo de sonido",
"settings.audioOutput": "Dispositivo de salida de audio",
"settings.selectAudioOutput": "Seleccionar dispositivo de salida de audio",
"settings.cantSelectAudioOutput": "No se puede seleccionar el dispositivo de salida de audio",
"settings.resolution": "Seleccione su resolución de imagen", "settings.resolution": "Seleccione su resolución de imagen",
"settings.layout": "Disposición de la sala", "settings.layout": "Disposición de la sala",
"settings.selectRoomLayout": "Seleccione la disposición de la sala", "settings.selectRoomLayout": "Seleccione la disposición de la sala",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Micrófono desconectado", "devices.microphoneDisconnected": "Micrófono desconectado",
"devices.microphoneError": "Hubo un error al acceder a su micrófono", "devices.microphoneError": "Hubo un error al acceder a su micrófono",
"devices.microPhoneMute": "Desactivar micrófono", "devices.microphoneMute": "Desactivar micrófono",
"devices.micophoneUnMute": "Activar micrófono", "devices.microphoneUnMute": "Activar micrófono",
"devices.microphoneEnable": "Micrófono activado", "devices.microphoneEnable": "Micrófono activado",
"devices.microphoneMuteError": "No ha sido posible desactivar su micrófono", "devices.microphoneMuteError": "No ha sido posible desactivar su micrófono",
"devices.microphoneUnMuteError": "No ha sido posible activar su micrófono", "devices.microphoneUnMuteError": "No ha sido posible activar su micrófono",

View File

@ -100,6 +100,9 @@
"settings.audio": "Microphone", "settings.audio": "Microphone",
"settings.selectAudio": "Sélectionnez votre microphone", "settings.selectAudio": "Sélectionnez votre microphone",
"settings.cantSelectAudio": "Impossible de sélectionner votre la caméra", "settings.cantSelectAudio": "Impossible de sélectionner votre la caméra",
"settings.audioOutput": "Périphérique de sortie audio",
"settings.selectAudioOutput": "Sélectionnez le périphérique de sortie audio",
"settings.cantSelectAudioOutput": "Impossible de sélectionner le périphérique de sortie audio",
"settings.resolution": "Sélectionnez votre résolution", "settings.resolution": "Sélectionnez votre résolution",
"settings.layout": "Mode d'affichage de la salle", "settings.layout": "Mode d'affichage de la salle",
"settings.selectRoomLayout": "Sélectionnez la présentation de la salle", "settings.selectRoomLayout": "Sélectionnez la présentation de la salle",
@ -134,8 +137,8 @@
"devices.microphoneDisconnected": "Microphone déconnecté", "devices.microphoneDisconnected": "Microphone déconnecté",
"devices.microphoneError": "Une erreur est apparue lors de l'accès à votre microphone", "devices.microphoneError": "Une erreur est apparue lors de l'accès à votre microphone",
"devices.microPhoneMute": "Désactiver le microphone", "devices.microphoneMute": "Désactiver le microphone",
"devices.micophoneUnMute": "Réactiver le microphone", "devices.microphoneUnMute": "Réactiver le microphone",
"devices.microphoneEnable": "Activer le microphone", "devices.microphoneEnable": "Activer le microphone",
"devices.microphoneMuteError": "Impossible de désactiver le microphone", "devices.microphoneMuteError": "Impossible de désactiver le microphone",
"devices.microphoneUnMuteError": "Impossible de réactiver le microphone", "devices.microphoneUnMuteError": "Impossible de réactiver le microphone",

View File

@ -100,6 +100,9 @@
"settings.audio": "Uređaj za zvuk", "settings.audio": "Uređaj za zvuk",
"settings.selectAudio": "Odaberi uređaj za zvuk", "settings.selectAudio": "Odaberi uređaj za zvuk",
"settings.cantSelectAudio": "Nije moguće odabrati uređaj za zvuk", "settings.cantSelectAudio": "Nije moguće odabrati uređaj za zvuk",
"settings.audioOutput": "Uređaj za izlaz zvuka",
"settings.selectAudioOutput": "Odaberite audio izlazni uređaj",
"settings.cantSelectAudioOutput": "Nije moguće odabrati audio izlazni uređaj",
"settings.resolution": "Odaberi video rezoluciju", "settings.resolution": "Odaberi video rezoluciju",
"settings.layout": "Način prikaza", "settings.layout": "Način prikaza",
"settings.selectRoomLayout": "Odaberi način prikaza", "settings.selectRoomLayout": "Odaberi način prikaza",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Mikrofon odspojen", "devices.microphoneDisconnected": "Mikrofon odspojen",
"devices.microphoneError": "Greška prilikom pristupa mikrofonu", "devices.microphoneError": "Greška prilikom pristupa mikrofonu",
"devices.microPhoneMute": "Mikrofon utišan", "devices.microphoneMute": "Mikrofon utišan",
"devices.micophoneUnMute": "Mikrofon pojačan", "devices.microphoneUnMute": "Mikrofon pojačan",
"devices.microphoneEnable": "Mikrofon omogućen", "devices.microphoneEnable": "Mikrofon omogućen",
"devices.microphoneMuteError": "Nije moguće utišati mikrofon", "devices.microphoneMuteError": "Nije moguće utišati mikrofon",
"devices.microphoneUnMuteError": "Nije moguće pojačati mikrofon", "devices.microphoneUnMuteError": "Nije moguće pojačati mikrofon",

View File

@ -95,12 +95,15 @@
"settings.settings": "Beállítások", "settings.settings": "Beállítások",
"settings.camera": "Kamera", "settings.camera": "Kamera",
"settings.selectCamera": "Válasz videóeszközt", "settings.selectCamera": "Válassz videoeszközt",
"settings.cantSelectCamera": "Nem lehet a videó eszközt kiválasztani", "settings.cantSelectCamera": "Nem lehet a videoeszközt kiválasztani",
"settings.audio": "Hang eszköz", "settings.audio": "Hang eszköz",
"settings.selectAudio": "Válasz hangeszközt", "settings.selectAudio": "Válassz hangeszközt",
"settings.cantSelectAudio": "Nem lehet a hang eszközt kiválasztani", "settings.cantSelectAudio": "Nem sikerült a hangeszközt kiválasztani",
"settings.resolution": "Válaszd ki a videóeszközöd felbontását", "settings.audioOutput": "Kimenti hangeszköz",
"settings.selectAudioOutput": "Válassz kimenti hangeszközt",
"settings.cantSelectAudioOutput": "Nem sikerült a kimeneti hangeszközt kiválasztani",
"settings.resolution": "Válaszd ki a videoeszközöd felbontását",
"settings.layout": "A konferencia képkiosztása", "settings.layout": "A konferencia képkiosztása",
"settings.selectRoomLayout": "Válaszd ki a konferencia képkiosztását", "settings.selectRoomLayout": "Válaszd ki a konferencia képkiosztását",
"settings.advancedMode": "Részletes információk", "settings.advancedMode": "Részletes információk",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Microphone kapcsolat bontva", "devices.microphoneDisconnected": "Microphone kapcsolat bontva",
"devices.microphoneError": "Hiba történt a mikrofon hangeszköz elérése közben", "devices.microphoneError": "Hiba történt a mikrofon hangeszköz elérése közben",
"devices.microPhoneMute": "A mikrofon némítva lett", "devices.microphoneMute": "A mikrofon némítva lett",
"devices.micophoneUnMute": "A mikrofon némítása ki lett kapocsolva", "devices.microphoneUnMute": "A mikrofon némítása ki lett kapocsolva",
"devices.microphoneEnable": "A mikrofon engedéylezve", "devices.microphoneEnable": "A mikrofon engedéylezve",
"devices.microphoneMuteError": "Nem sikerült a mikrofonod némítása", "devices.microphoneMuteError": "Nem sikerült a mikrofonod némítása",
"devices.microphoneUnMuteError": "Nem sikerült a mikrofonod némításának kikapcsolása", "devices.microphoneUnMuteError": "Nem sikerült a mikrofonod némításának kikapcsolása",

View File

@ -99,6 +99,9 @@
"settings.audio": "Dispositivo audio", "settings.audio": "Dispositivo audio",
"settings.selectAudio": "Seleziona dispositivo audio", "settings.selectAudio": "Seleziona dispositivo audio",
"settings.cantSelectAudio": "Impossibile selezionare dispositivo audio", "settings.cantSelectAudio": "Impossibile selezionare dispositivo audio",
"settings.audioOutput": "Dispositivo di uscita audio",
"settings.selectAudioOutput": "Seleziona il dispositivo di uscita audio",
"settings.cantSelectAudioOutput": "Impossibile selezionare il dispositivo di uscita audio",
"settings.resolution": "Seleziona risoluzione", "settings.resolution": "Seleziona risoluzione",
"settings.layout": "Aspetto stanza", "settings.layout": "Aspetto stanza",
"settings.selectRoomLayout": "Seleziona aspetto stanza", "settings.selectRoomLayout": "Seleziona aspetto stanza",
@ -134,8 +137,8 @@
"devices.microphoneDisconnected": "Microfono scollegato", "devices.microphoneDisconnected": "Microfono scollegato",
"devices.microphoneError": "Errore con l'accesso al microfono", "devices.microphoneError": "Errore con l'accesso al microfono",
"devices.microPhoneMute": "Microfono silenziato", "devices.microphoneMute": "Microfono silenziato",
"devices.micophoneUnMute": "Microfono riattivato", "devices.microphoneUnMute": "Microfono riattivato",
"devices.microphoneEnable": "Microfono attivo", "devices.microphoneEnable": "Microfono attivo",
"devices.microphoneMuteError": "Impossibile silenziare il microfono", "devices.microphoneMuteError": "Impossibile silenziare il microfono",
"devices.microphoneUnMuteError": "Impossibile riattivare il microfono", "devices.microphoneUnMuteError": "Impossibile riattivare il microfono",

View File

@ -100,6 +100,9 @@
"settings.audio": "Lydenhet", "settings.audio": "Lydenhet",
"settings.selectAudio": "Velg lydenhet", "settings.selectAudio": "Velg lydenhet",
"settings.cantSelectAudio": "Kan ikke velge lydenhet", "settings.cantSelectAudio": "Kan ikke velge lydenhet",
"settings.audioOutput": "Lydutgangsenhet",
"settings.selectAudioOutput": "Velg lydutgangsenhet",
"settings.cantSelectAudioOutput": "Kan ikke velge lydutgangsenhet",
"settings.resolution": "Velg oppløsning", "settings.resolution": "Velg oppløsning",
"settings.layout": "Møtelayout", "settings.layout": "Møtelayout",
"settings.selectRoomLayout": "Velg møtelayout", "settings.selectRoomLayout": "Velg møtelayout",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Mikrofon koblet fra", "devices.microphoneDisconnected": "Mikrofon koblet fra",
"devices.microphoneError": "Det skjedde noe feil med mikrofonen din", "devices.microphoneError": "Det skjedde noe feil med mikrofonen din",
"devices.microPhoneMute": "Dempet mikrofonen", "devices.microphoneMute": "Dempet mikrofonen",
"devices.micophoneUnMute": "Aktiverte mikrofonen", "devices.microphoneUnMute": "Aktiverte mikrofonen",
"devices.microphoneEnable": "Aktiverte mikrofonen", "devices.microphoneEnable": "Aktiverte mikrofonen",
"devices.microphoneMuteError": "Klarte ikke å dempe mikrofonen", "devices.microphoneMuteError": "Klarte ikke å dempe mikrofonen",
"devices.microphoneUnMuteError": "Klarte ikke å aktivere mikrofonen", "devices.microphoneUnMuteError": "Klarte ikke å aktivere mikrofonen",

View File

@ -100,6 +100,9 @@
"settings.audio": "Urządzenie audio", "settings.audio": "Urządzenie audio",
"settings.selectAudio": "Wybór urządzenia audio", "settings.selectAudio": "Wybór urządzenia audio",
"settings.cantSelectAudio": "Nie można wybrać urządzenia audio", "settings.cantSelectAudio": "Nie można wybrać urządzenia audio",
"settings.audioOutput": "Urządzenie wyjściowe audio",
"settings.selectAudioOutput": "Wybierz urządzenie wyjściowe audio",
"settings.cantSelectAudioOutput": "Nie można wybrać urządzenia wyjściowego audio",
"settings.resolution": "Wybór rozdzielczości wideo", "settings.resolution": "Wybór rozdzielczości wideo",
"settings.layout": "Układ konferencji", "settings.layout": "Układ konferencji",
"settings.selectRoomLayout": "Ustawienia układu konferencji", "settings.selectRoomLayout": "Ustawienia układu konferencji",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Odłączono mikrofon", "devices.microphoneDisconnected": "Odłączono mikrofon",
"devices.microphoneError": "Błąd dostępu do mikrofonu", "devices.microphoneError": "Błąd dostępu do mikrofonu",
"devices.microPhoneMute": "Wyciszenie mikrofonu włączone", "devices.microphoneMute": "Wyciszenie mikrofonu włączone",
"devices.micophoneUnMute": "Wyciszenie mikrofonu wyłączone", "devices.microphoneUnMute": "Wyciszenie mikrofonu wyłączone",
"devices.microphoneEnable": "Włączono mikrofon", "devices.microphoneEnable": "Włączono mikrofon",
"devices.microphoneMuteError": "Nie można wyciszyć mikrofonu", "devices.microphoneMuteError": "Nie można wyciszyć mikrofonu",
"devices.microphoneUnMuteError": "Nie można wyłączyć wyciszenia mikrofonu.", "devices.microphoneUnMuteError": "Nie można wyłączyć wyciszenia mikrofonu.",

View File

@ -100,6 +100,9 @@
"settings.audio": "Dispositivo Áudio", "settings.audio": "Dispositivo Áudio",
"settings.selectAudio": "Selecione o seu dispositivo de áudio", "settings.selectAudio": "Selecione o seu dispositivo de áudio",
"settings.cantSelectAudio": "Impossível selecionar o seu dispositivo de áudio", "settings.cantSelectAudio": "Impossível selecionar o seu dispositivo de áudio",
"settings.audioOutput": "Dispositivo de saída de áudio",
"settings.selectAudioOutput": "Selecionar dispositivo de saída de áudio",
"settings.cantSelectAudioOutput": "Não foi possível selecionar o dispositivo de saída de áudio",
"settings.resolution": "Selecione a sua resolução de vídeo", "settings.resolution": "Selecione a sua resolução de vídeo",
"settings.layout": "Disposição da sala", "settings.layout": "Disposição da sala",
"settings.selectRoomLayout": "Seleccione a disposição da sala", "settings.selectRoomLayout": "Seleccione a disposição da sala",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Microfone desiligado", "devices.microphoneDisconnected": "Microfone desiligado",
"devices.microphoneError": "Ocorreu um erro no acesso ao microfone", "devices.microphoneError": "Ocorreu um erro no acesso ao microfone",
"devices.microPhoneMute": "Som microfone desativado", "devices.microphoneMute": "Som microfone desativado",
"devices.micophoneUnMute": "Som mmicrofone ativado", "devices.microphoneUnMute": "Som mmicrofone ativado",
"devices.microphoneEnable": "Microfone ativado", "devices.microphoneEnable": "Microfone ativado",
"devices.microphoneMuteError": "Não foi possível cortar o som do microfone", "devices.microphoneMuteError": "Não foi possível cortar o som do microfone",
"devices.microphoneUnMuteError": "Não foi possível ativar o som do microfone", "devices.microphoneUnMuteError": "Não foi possível ativar o som do microfone",

View File

@ -100,6 +100,9 @@
"settings.audio": "Dispozitivul audio", "settings.audio": "Dispozitivul audio",
"settings.selectAudio": "Selectarea dispozitivul audio", "settings.selectAudio": "Selectarea dispozitivul audio",
"settings.cantSelectAudio": "Încercarea de a selecta dispozitivul audio a eșuat", "settings.cantSelectAudio": "Încercarea de a selecta dispozitivul audio a eșuat",
"settings.audioOutput": "Dispozitiv de ieșire audio",
"settings.selectAudioOutput": "Selectați dispozitivul de ieșire audio",
"settings.cantSelectAudioOutput": "Imposibil de selectat dispozitivul de ieșire audio",
"settings.resolution": "Selectează rezoluția video", "settings.resolution": "Selectează rezoluția video",
"settings.layout": "Aspectul camerei video", "settings.layout": "Aspectul camerei video",
"settings.selectRoomLayout": "Selectează spectul camerei video", "settings.selectRoomLayout": "Selectează spectul camerei video",
@ -135,8 +138,8 @@
"devices.microphoneDisconnected": "Microfonul e deconectat", "devices.microphoneDisconnected": "Microfonul e deconectat",
"devices.microphoneError": "A apărut o eroare la accesarea microfonului", "devices.microphoneError": "A apărut o eroare la accesarea microfonului",
"devices.microPhoneMute": "Microfonul e dezactivat", "devices.microphoneMute": "Microfonul e dezactivat",
"devices.micophoneUnMute": "Retragerea dezactivării microfonului", "devices.microphoneUnMute": "Retragerea dezactivării microfonului",
"devices.microphoneEnable": "Microfonul e activat", "devices.microphoneEnable": "Microfonul e activat",
"devices.microphoneMuteError": "Încercarea de a dezactiva microfonului a eșuat", "devices.microphoneMuteError": "Încercarea de a dezactiva microfonului a eșuat",
"devices.microphoneUnMuteError": "Încercarea de a retrage dezactivarea microfonului a eșuat", "devices.microphoneUnMuteError": "Încercarea de a retrage dezactivarea microfonului a eșuat",

View File

@ -97,6 +97,9 @@
"settings.audio": "Аудіопристрій", "settings.audio": "Аудіопристрій",
"settings.selectAudio": "Вибрати аудіопристрій", "settings.selectAudio": "Вибрати аудіопристрій",
"settings.cantSelectAudio": "Неможливо вибрати аудіопристрій", "settings.cantSelectAudio": "Неможливо вибрати аудіопристрій",
"settings.audioOutput": "Пристрій аудіовиходу",
"settings.selectAudioOutput": "Виберіть пристрій аудіовиходу",
"settings.cantSelectAudioOutput": "Неможливо вибрати аудіо вихідний пристрій",
"settings.resolution": "Виберіть роздільну здатність відео", "settings.resolution": "Виберіть роздільну здатність відео",
"settings.layout": "Розміщення кімнати", "settings.layout": "Розміщення кімнати",
"settings.selectRoomLayout": "Вибір розташування кімнати", "settings.selectRoomLayout": "Вибір розташування кімнати",