diff --git a/app/src/Server.js b/app/src/Server.js index 510bed8a..a51770ac 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -40,7 +40,7 @@ dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.2.3 + * @version 1.2.4 * */ @@ -897,13 +897,21 @@ function startServer() { const peer_name = room.getPeers()?.get(socket.id)?.peer_info?.peer_name; const peer_uuid = room.getPeers()?.get(socket.id)?.peer_info?.peer_uuid; - if (Object.keys(presenters[socket.room_id]).length === 0) { - presenters[socket.room_id] = { - peer_ip: peer_ip, - peer_name: peer_name, - peer_uuid: peer_uuid, - is_presenter: true, - }; + // Set the presenters + const presenter = { + peer_ip: peer_ip, + peer_name: peer_name, + peer_uuid: peer_uuid, + is_presenter: true, + }; + // first we check if the username match the presenter username + if (config.presenter && peer_name === config.presenter.username) { + presenters[socket.room_id] = presenter; + } else { + // if not match the first one who join room is the presenter + if (Object.keys(presenters[socket.room_id]).length === 0) { + presenters[socket.room_id] = presenter; + } } log.debug('[Join] - Connected presenters grp by roomId', presenters); @@ -1300,10 +1308,11 @@ function startServer() { try { isPresenter = - typeof presenters[room_id] === 'object' && - Object.keys(presenters[room_id]).length > 1 && - presenters[room_id]['peer_name'] === peer_name && - presenters[room_id]['peer_uuid'] === peer_uuid; + (typeof presenters[room_id] === 'object' && + Object.keys(presenters[room_id]).length > 1 && + presenters[room_id]['peer_name'] === peer_name && + presenters[room_id]['peer_uuid'] === peer_uuid) || + (config.presenter && peer_name === config.presenter.username); } catch (err) { log.error('isPeerPresenter', err); return false; diff --git a/app/src/config.template.js b/app/src/config.template.js index 7cb9a78f..f64c9406 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -46,6 +46,14 @@ module.exports = { username: 'username', password: 'password', }, + presenter: { + /* + By default, the presenter is identified as the first participant to join the room, identified by username and uuid. + Additional layers can be added to specify the presenter by setting a designated username. + This username can also be used to apply presenter rules to another participant with the same username. + */ + username: 'Miroslav Pejic', + }, console: { debug: true, colors: true, diff --git a/package.json b/package.json index 5eff4771..3e0dc100 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.2.3", + "version": "1.2.4", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Room.js b/public/js/Room.js index 5ce79864..8c228f8e 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.2.3 + * @version 1.2.4 * */ diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index fda65764..b199bf14 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -9,7 +9,7 @@ * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.2.3 + * @version 1.2.4 * */