You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2022/12/11 16:03:53 UTC

[openmeetings] branch master updated: [OPENMEETINGS-131] basic push-to-talk

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d59add0e [OPENMEETINGS-131] basic push-to-talk
5d59add0e is described below

commit 5d59add0e21eeacac593aec10ef0897ecaabe4a8
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sun Dec 11 23:03:42 2022 +0700

    [OPENMEETINGS-131] basic push-to-talk
---
 .../src/main/front/room/src/video-manager.js       | 20 ++++++++--
 openmeetings-web/src/main/front/room/src/video.js  | 19 ++++++++++
 .../src/main/front/settings/src/video-util.js      | 44 +++++++++++-----------
 .../web/app/Application.properties.xml             |  1 +
 .../web/app/Application_ar.properties.xml          |  1 +
 .../web/app/Application_bg.properties.xml          |  1 +
 .../web/app/Application_bn.properties.xml          |  1 +
 .../web/app/Application_ca.properties.xml          |  1 +
 .../web/app/Application_cs.properties.xml          |  1 +
 .../web/app/Application_da.properties.xml          |  1 +
 .../web/app/Application_de.properties.xml          |  1 +
 .../web/app/Application_el.properties.xml          |  1 +
 .../web/app/Application_es.properties.xml          |  1 +
 .../web/app/Application_fa.properties.xml          |  1 +
 .../web/app/Application_fi.properties.xml          |  1 +
 .../web/app/Application_fr.properties.xml          |  1 +
 .../web/app/Application_gl.properties.xml          |  1 +
 .../web/app/Application_he.properties.xml          |  1 +
 .../web/app/Application_hi.properties.xml          |  1 +
 .../web/app/Application_hu.properties.xml          |  1 +
 .../web/app/Application_id.properties.xml          |  1 +
 .../web/app/Application_it.properties.xml          |  1 +
 .../web/app/Application_ja.properties.xml          |  1 +
 .../web/app/Application_ko.properties.xml          |  1 +
 .../web/app/Application_ku.properties.xml          |  1 +
 .../web/app/Application_lo.properties.xml          |  1 +
 .../web/app/Application_nl.properties.xml          |  1 +
 .../web/app/Application_pl.properties.xml          |  1 +
 .../web/app/Application_pt.properties.xml          |  1 +
 .../web/app/Application_pt_BR.properties.xml       |  1 +
 .../web/app/Application_ru.properties.xml          |  1 +
 .../web/app/Application_sk.properties.xml          |  1 +
 .../web/app/Application_sv.properties.xml          |  1 +
 .../web/app/Application_ta.properties.xml          |  1 +
 .../web/app/Application_th.properties.xml          |  1 +
 .../web/app/Application_tk.properties.xml          |  1 +
 .../web/app/Application_tr.properties.xml          |  1 +
 .../web/app/Application_uk.properties.xml          |  1 +
 .../web/app/Application_ur.properties.xml          |  1 +
 .../web/app/Application_zh_CN.properties.xml       |  1 +
 .../web/app/Application_zh_TW.properties.xml       |  1 +
 .../apache/openmeetings/web/room/RoomPanel.html    |  2 +-
 openmeetings-web/src/main/webapp/css/raw-room.css  |  3 ++
 43 files changed, 100 insertions(+), 26 deletions(-)

diff --git a/openmeetings-web/src/main/front/room/src/video-manager.js b/openmeetings-web/src/main/front/room/src/video-manager.js
index d8254fcc6..b8df5cce5 100644
--- a/openmeetings-web/src/main/front/room/src/video-manager.js
+++ b/openmeetings-web/src/main/front/room/src/video-manager.js
@@ -44,7 +44,7 @@ function _onReceive(msg) {
 function _onKMessage(m) {
 	switch (m.id) {
 		case 'clientLeave':
-			$(VID_SEL + '[data-client-uid="' + m.uid + '"]').each(function() {
+			$(`${VID_SEL}[data-client-uid="${m.uid}"]`).each(function() {
 				VideoMgrUtil.closeV($(this));
 			});
 			if (share.data('cuid') === m.uid) {
@@ -113,6 +113,8 @@ function _init() {
 	share = $('.room-block .room-container').find('.btn.shared');
 	VideoMgrUtil.init(share);
 	inited = true;
+	$(window).on('keydown.push-to-talk', {enable: true}, _onPtt);
+	$(window).on('keyup.push-to-talk', {enable: false}, _onPtt);
 }
 function _update(c) {
 	if (!inited) {
@@ -141,7 +143,7 @@ function _update(c) {
 			$(this).data().setRights(c.rights);
 		});
 	}
-	$('[data-client-uid="' + c.cuid + '"]').each(function() {
+	$(`[data-client-uid="${c.cuid}"]`).each(function() {
 		const sd = $(this).data().stream();
 		if (!streamMap[sd.uid]) {
 			//not-inited/invalid video window
@@ -185,10 +187,10 @@ function _play(streams, iceServers) {
 	});
 }
 function _find(uid) {
-	return $(VID_SEL + '[data-client-uid="' + uid + '"][data-client-type="WEBCAM"]');
+	return $(`${VID_SEL}[data-client-uid="${uid}"][data-client-type="WEBCAM"]`);
 }
 function _userSpeaks(uid, active) {
-	const u = $('#user' + uid + ' .audio-activity')
+	const u = $(`#user${uid} .audio-activity`)
 		, v = _find(uid).parent();
 	if (active) {
 		u.addClass('speaking');
@@ -224,6 +226,14 @@ function _toggleActivity(activity) {
 		, activity: activity
 	});
 }
+function _onPtt(e) {
+	if ((e.ctrlKey || e.metaKey) && 'Space' === e.code) {
+		const v = _find(Room.getOptions().uid);
+		if (v.length > 0 && v.data()) {
+			v.data().pushToTalk(e.data.enable);
+		}
+	}
+}
 
 module.exports = {
 	init: _init
@@ -234,6 +244,8 @@ module.exports = {
 	, muteOthers: _muteOthers
 	, toggleActivity: _toggleActivity
 	, destroy: function() {
+		$(window).off('keydown.push-to-talk');
+		$(window).off('keyup.push-to-talk');
 		Wicket.Event.unsubscribe('/websocket/message', _onWsMessage);
 	}
 };
diff --git a/openmeetings-web/src/main/front/room/src/video.js b/openmeetings-web/src/main/front/room/src/video.js
index 55375c44f..6f0a9582b 100644
--- a/openmeetings-web/src/main/front/room/src/video.js
+++ b/openmeetings-web/src/main/front/room/src/video.js
@@ -97,6 +97,9 @@ module.exports = class Video {
 						stream.getVideoTracks().forEach(track => track.enabled = cnts.videoEnabled);
 						stream.getAudioTracks().forEach(track => track.enabled = cnts.audioEnabled);
 						state.localStream = stream;
+						if (__pttEnabled(state)) {
+							OmUtil.alert('warning', $('#user-video').data('ptt-info'), 10000);
+						}
 						let _stream = stream;
 						const data = {};
 						if (stream.getAudioTracks().length !== 0) {
@@ -658,9 +661,25 @@ module.exports = class Video {
 			__initUI(_msg.instanceUid);
 			_refresh(_msg);
 		}
+		function __pttEnabled(state) {
+			return sd && sd.self && state && state.localStream
+					&& VideoUtil.hasActivity(sd, VideoUtil.MIC_ACTIVITY) && !sd.micEnabled;
+		}
 
 		this.update = _update;
 		this.refresh = _refresh;
+		this.pushToTalk = (enable) => {
+			const state = __getState();
+			if (__pttEnabled(state)) {
+				state.localStream.getAudioTracks().forEach(track => track.enabled = enable);
+				const classes = document.querySelector('#room-sidebar-tab-users .header .om-icon.activity.mic.clickable').classList;
+				if (enable) {
+					classes.add('push-to-talk');
+				} else {
+					classes.remove('push-to-talk');
+				}
+			}
+		};
 		this.mute = function(_mute) {
 			vol.mute(_mute);
 		};
diff --git a/openmeetings-web/src/main/front/settings/src/video-util.js b/openmeetings-web/src/main/front/settings/src/video-util.js
index 1d6518b08..7ca532edb 100644
--- a/openmeetings-web/src/main/front/settings/src/video-util.js
+++ b/openmeetings-web/src/main/front/settings/src/video-util.js
@@ -17,6 +17,9 @@ function _isSharing(sd) {
 function _isRecording(sd) {
 	return !!sd && 'SCREEN' === sd.type && sd.activities.includes(REC_ACTIVITY);
 }
+function _hasActivity(sd, act) {
+	return !!sd && sd.activities.includes(act);
+}
 function _hasMic(sd) {
 	if (!sd) {
 		return true;
@@ -228,29 +231,27 @@ function _setPos(v, pos) {
 	}
 }
 function _askPermission(callback) {
-	const perm = $('#ask-permission');
-	if (undefined === perm.dialog('instance')) {
-		perm.data('callbacks', []).dialog({
-			appendTo: '.room-block .room-container'
-			, dialogClass: "ask-video-play-permission"
-			, autoOpen: false
-			, buttons: [
-				{
-					text: perm.data('btn-ok')
-					, click: function() {
-						while (perm.data('callbacks').length > 0) {
-							perm.data('callbacks').pop()();
-						}
-						$(this).dialog('close');
-					}
-				}
-			]
+	const data = $('.sidebar').data('bs.confirmation');
+	if (typeof(data) === 'object') {
+		data.config.buttons[0].onClick = function() {callback();};
+	} else {
+		const perm = $('#ask-permission');
+		$('.sidebar').confirmation({
+			title: perm.attr('title')
+			, placement: Settings.isRtl ? 'right' : 'left'
+			, singleton: true
+			, rootSelector: '.sidebar'
+			, html: true
+			, content: perm.html()
+			, buttons: [{
+				class: 'btn btn-sm btn-warning'
+				, label: perm.data('btn-ok')
+				, value: perm.data('btn-ok')
+				, onClick: function() {callback();}
+			}]
 		});
 	}
-	if (!perm.dialog('isOpen')) {
-		perm.dialog('open');
-	}
-	perm.data('callbacks').push(callback);
+	$('.sidebar').confirmation('show');
 }
 function _disconnect(node) {
 	try {
@@ -309,6 +310,7 @@ module.exports = {
 	, hasMic: _hasMic
 	, hasCam: _hasCam
 	, hasVideo: _hasVideo
+	, hasActivity: _hasActivity
 	, getRects: _getRects
 	, getPos: _getPos
 	, container: _container
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
index 6dad69b01..7ab5e50a2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
index 73a8b47e2..a990ce8bc 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@ -887,6 +887,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="poll.type.YES_NO"><![CDATA[نعم / لا]]></entry>
 	<entry key="profile.invitation"><![CDATA[رسالة دعوة]]></entry>
 	<entry key="profile.invitations"><![CDATA[الدعوات]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[تسجيلات المجموعة]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[بالنقر على "${register}" ، فإنك توافق على  ${link} الخاص بنا.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[بيان الخصوصية]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
index 5d406f23d..6d5908b37 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Да/Не]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
index 44728ed8d..e08f05bbb 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_bn.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
index ce149dcd3..8c06aa11d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Sí/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
index e658962a1..665801242 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Ano/Ne]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
index c8c3fb7c2..99dffcd36 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Ja/Nej]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
index 3497ea6da..4600b0921 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_de.properties.xml
@@ -893,6 +893,7 @@ Bitte <tt>openmeetings.log</tt> prüfen und die OpenMeetings-Entwickeler kontakt
 	<entry key="poll.type.YES_NO"><![CDATA[Ja/Nein]]></entry>
 	<entry key="profile.invitation"><![CDATA[Einladung]]></entry>
 	<entry key="profile.invitations"><![CDATA[Einladungen]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Gruppen-Aufnahmen]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[Mit Klick auf "${register}" stimmen Sie unseren ${link} zu.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[Datenschutzerklärung]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
index 77a2ac02f..c74655c17 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Ναι/Όχι]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
index ed6372daa..820a72a5d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_es.properties.xml
@@ -889,6 +889,7 @@ por favor revise <tt> openmeetings.log </tt> y contacte a los desarrolladores de
 	<entry key="poll.type.YES_NO"><![CDATA[Sí/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitación]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitaciones]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Grabaciones de grupo (u organización)]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[Haciendo clic en "${register}", declara su conformidad con nuestra ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[declaración de privacidad]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
index 08e090ca7..a7c6732ba 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
@@ -884,6 +884,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[خير/بله]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[ضبط های گروهی]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[با کلیک بر روی "${register}" ، با ${link} ما موافقت می کنید.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
index 5edbc610a..bae83bf9c 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Kyllä/Ei]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
index 1e5df2207..22f946df5 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
@@ -889,6 +889,7 @@ allez sur <tt>openmeetings.log</tt> et contactez les développeurs d'OpenMeeting
 	<entry key="poll.type.YES_NO"><![CDATA[Oui/Non]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Enregistrements de groupe]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[En cliquant sur "${register}", vous acceptez notre ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[déclaration de confidentialité]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
index e32212cb1..07b4a23a6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Sí/Non]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
index 4d9fa9607..485520eba 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_he.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
index 11b5d6681..5260769c7 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hi.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
index f52f7e787..330535c04 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
@@ -876,6 +876,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Igen/Nem]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml
index a890ea838..ace2b48b6 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_id.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Ya/Tidak]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
index bcae392f0..6c422d26d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_it.properties.xml
@@ -889,6 +889,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Si/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invito]]></entry>
 	<entry key="profile.invitations"><![CDATA[Inviti]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
index afedeb029..72d1b8510 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
@@ -888,6 +888,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[はい/いいえ]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[グループの録画]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[私は、「${register}」をクリックすることにより、 ${link} に同意します。]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[プライバシーに関する声明]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
index c67b78ba7..eacc1c6d2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[네/아니오]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml
index dc5f6916b..27941f874 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ku.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml
index 2baf885a9..98d54be26 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_lo.properties.xml
@@ -887,6 +887,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
index 81c8d45af..a29873bf2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Ja/Nee]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
index 5a6d0813b..7a5002a75 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@ -887,6 +887,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Tak/Nie]]></entry>
 	<entry key="profile.invitation"><![CDATA[Zaproszenie]]></entry>
 	<entry key="profile.invitations"><![CDATA[Zaproszenia]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Nagrania grupy]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
index 5eee6215d..aed665167 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Sim/Não]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
index b8bb38dd2..225669fd0 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@ -887,6 +887,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Sim/Não]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Convites]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
index 9daf63c4b..fd800b432 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
@@ -888,6 +888,7 @@ see https://openmeetings.apache.org/LanguageEditor.html for Details
 	<entry key="poll.type.YES_NO"><![CDATA[Да/Нет]]></entry>
 	<entry key="profile.invitation"><![CDATA[Приглашение]]></entry>
 	<entry key="profile.invitations"><![CDATA[Приглашения]]></entry>
+	<entry key="ptt.info"><![CDATA[Ваш микрофон отключен. Вы можете удерживать Ctrl+Пробел (Cmd+Пробел), чтобы временно включить звук (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Записи группы]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[Нажимая на кнопку "${register}", Вы соглашаетесь с нашим ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[соглашением о конфиденциальности]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
index 3357b44de..41a7997a2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Áno/Nie]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
index d6aa104a0..2e4009400 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
@@ -894,6 +894,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Ja/Nej]]></entry>
 	<entry key="profile.invitation"><![CDATA[Inbjudan]]></entry>
 	<entry key="profile.invitations"><![CDATA[Inbjudningar]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Gruppinspelningar]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[Genom att klicka "${register}", accepterar du våra ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[dataskyddspolicy]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
index f936034cb..1a9ecbd65 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ta.properties.xml
@@ -898,6 +898,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
index 5f5842bac..490b0bf64 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[ใช่/ไม่]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml
index 3e05a2ba7..67b84b02d 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tk.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
index 7117eaa37..6bb027963 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Evet/Hayır]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
index e0aab27be..cf61a133f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
@@ -887,6 +887,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Так/Ні]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml
index 6dad69b01..7ab5e50a2 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_ur.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[Yes/No]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
index 6637dfd11..90bfac2dd 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
@@ -888,6 +888,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[是/否]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
index 136fb65f5..c14357c32 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@ -896,6 +896,7 @@ please check <tt>openmeetings.log</tt> and contact OpenMeetings developers]]></e
 	<entry key="poll.type.YES_NO"><![CDATA[是/否]]></entry>
 	<entry key="profile.invitation"><![CDATA[Invitation]]></entry>
 	<entry key="profile.invitations"><![CDATA[Invitations]]></entry>
+	<entry key="ptt.info"><![CDATA[Your microphone is muted. You can hold Ctrl+Space (Cmd+Space) to temporary unmute it (Push-to-Talk)]]></entry>
 	<entry key="recordings.root.group"><![CDATA[Group recordings]]></entry>
 	<entry key="register.privacy.accept"><![CDATA[By clicking "${register}", you agree to our ${link}.]]></entry>
 	<entry key="register.privacy.statement"><![CDATA[privacy statement]]></entry>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
index 2980961d1..707891dff 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
@@ -95,7 +95,7 @@
 		</div>
 	</div>
 	<div hidden="hidden">
-		<div id="user-video" class="video-container">
+		<div id="user-video" class="video-container" wicket:message="data-ptt-info:ptt.info">
 			<div class="video">
 				<canvas width="10" class="level-meter" wicket:message="title:767"></canvas>
 				<div class="om-icon mute-others clickable" wicket:message="title:video.muteothers"></div>
diff --git a/openmeetings-web/src/main/webapp/css/raw-room.css b/openmeetings-web/src/main/webapp/css/raw-room.css
index 5ed43f0ba..9e3289d0f 100644
--- a/openmeetings-web/src/main/webapp/css/raw-room.css
+++ b/openmeetings-web/src/main/webapp/css/raw-room.css
@@ -357,6 +357,9 @@ html[dir="rtl"] .room-block .sb-wb .sidebar {
 	content: '\f131';
 	color: var(--bs-warning);
 }
+.activity.mic.om-icon.push-to-talk::before {
+	color: var(--bs-info);
+}
 .room-block .sb-wb .sidebar .user-list .user.entry.current {
 	font-weight: bold;
 	background-color: var(--bs-light);