diff --git a/src/components/CallView/shared/VideoVue.vue b/src/components/CallView/shared/VideoVue.vue index 4766a74796a..cf45edaac04 100644 --- a/src/components/CallView/shared/VideoVue.vue +++ b/src/components/CallView/shared/VideoVue.vue @@ -94,7 +94,7 @@ import TransitionWrapper from '../../UIShared/TransitionWrapper.vue' import Screen from './Screen.vue' import VideoBackground from './VideoBackground.vue' import VideoBottomBar from './VideoBottomBar.vue' -import { ATTENDEE, AVATAR, PARTICIPANT } from '../../../constants.ts' +import { ATTENDEE, AVATAR } from '../../../constants.ts' import { EventBus } from '../../../services/EventBus.ts' import { useCallViewStore } from '../../../stores/callView.ts' import { useGuestNameStore } from '../../../stores/guestName.js' @@ -456,8 +456,7 @@ export default { }, hasVideo() { - return !!(this.participant.permissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO) - && !this.model.attributes.videoBlocked + return !this.model.attributes.videoBlocked && this.model.attributes.videoAvailable && this.sharedData.remoteVideoBlocker.isVideoEnabled() && (typeof this.model.attributes.stream === 'object') }, diff --git a/src/utils/webrtc/webrtc.js b/src/utils/webrtc/webrtc.js index c0f3738b28b..eff3aa2d882 100644 --- a/src/utils/webrtc/webrtc.js +++ b/src/utils/webrtc/webrtc.js @@ -1039,8 +1039,11 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local return } - if (webrtc.webrtc.isAudioAllowed() === !!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO) - && webrtc.webrtc.isVideoAllowed() === !!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO)) { + const hasPublishAudioPermissions = !!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO) + const hasPublishVideoPermissions = !!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO) + + if (webrtc.webrtc.isAudioAllowed() === hasPublishAudioPermissions + && webrtc.webrtc.isVideoAllowed() === hasPublishVideoPermissions) { return } @@ -1057,11 +1060,8 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local hasVideoSenders ||= !!videoSender }) - const removeSender = (hasAudioSenders && !(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO)) - || (hasVideoSenders && !(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO)) - - const hasPublishAudioPermissions = !!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO) - const hasPublishVideoPermissions = !!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO) + const removeSender = (hasAudioSenders && !hasPublishAudioPermissions) + || (hasVideoSenders && !hasPublishVideoPermissions) if (!hasPublishAudioPermissions) { // If permissions were revoked, disable media devices @@ -1079,8 +1079,8 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local } if (webrtc.webrtc.isLocalMediaActive() - && !(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO) - && !(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO)) { + && !hasPublishAudioPermissions + && !hasPublishVideoPermissions) { webrtc.stopLocalVideo() // If the MCU is used and there is no sending peer there is no need @@ -1100,10 +1100,10 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local // reconnection. if (webrtc.webrtc.isLocalMediaActive() && removeSender) { let flags = signaling.getCurrentCallFlags() - if (!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO)) { + if (!hasPublishAudioPermissions) { flags &= ~PARTICIPANT.CALL_FLAG.WITH_AUDIO } - if (!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO)) { + if (!hasPublishVideoPermissions) { flags &= ~PARTICIPANT.CALL_FLAG.WITH_VIDEO } @@ -1128,8 +1128,8 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local // If media is not active but the participant does not have publishing // permissions there is no need to start the media nor reconnect. - if (!(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO) - && !(currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO)) { + if (!hasPublishAudioPermissions + && !hasPublishVideoPermissions) { return } @@ -1162,8 +1162,8 @@ export default function initWebRtc(signaling, _callParticipantCollection, _local webrtc.on('localMediaError', forceReconnectOnceLocalMediaError) const constraints = { - audio: currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_AUDIO, - video: currentParticipant.participantPermissions & PARTICIPANT.PERMISSIONS.PUBLISH_VIDEO, + audio: hasPublishAudioPermissions, + video: hasPublishVideoPermissions, } webrtc.startLocalVideo(constraints) }