全员静音

This commit is contained in:
yj 2024-07-16 14:02:26 +08:00
parent 4e2dcf85f3
commit 20000d0b98
5 changed files with 41 additions and 23 deletions

View File

@ -77,7 +77,7 @@
] ]
}, },
"directories": { "directories": {
"output": "aa" "output": "electron"
}, },
"extraResources": [] "extraResources": []
} }

View File

@ -23,7 +23,7 @@ export const PostRoomFile = (data: any) =>
export const GetRoomUpFileurl = (roomNum: string, fileSuffix: string) => export const GetRoomUpFileurl = (roomNum: string, fileSuffix: string) =>
request({ request({
url: `/room/up-fileurl?roomNum=${roomNum}&fileSuffix=${fileSuffix}`, url: `/room/up-fileurl?roomNum=${roomNum}&fileSuffix=${fileSuffix}`,
method: 'get' method: 'get',
}) })
export const GetRoomFileDwUrl = (fileUrl: string, fileId: string) => export const GetRoomFileDwUrl = (fileUrl: string, fileId: string) =>

View File

@ -144,9 +144,11 @@ const Meeting: React.FC = () => {
useEffect(() => { useEffect(() => {
roomUserList.forEach((item: any) => { roomUserList.forEach((item: any) => {
agora.muteLocalAudioStream(item.enableMicr)
agora.muteLocalVideoStream(item.enableCamera)
let dom = document.getElementById(`video-${item.account}`) as HTMLElement let dom = document.getElementById(`video-${item.account}`) as HTMLElement
if (!dom.getAttribute('load')) { if (!dom.getAttribute('account')) {
dom.setAttribute('load', 'true') dom.setAttribute('account', item.account)
agora.setVideo({ agora.setVideo({
account: Number(item.account), account: Number(item.account),
view: dom, view: dom,
@ -213,28 +215,24 @@ const Meeting: React.FC = () => {
footerListTemplate[itemIndex][rowIndex].title = '开启声音' footerListTemplate[itemIndex][rowIndex].title = '开启声音'
footerListTemplate[itemIndex][rowIndex].active = true footerListTemplate[itemIndex][rowIndex].active = true
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
agora.muteLocalAudioStream(true) postOpenMicr(false, false)
postOpenMicr(false)
break; break;
case '开启声音': case '开启声音':
footerListTemplate[itemIndex][rowIndex].title = '关闭声音' footerListTemplate[itemIndex][rowIndex].title = '关闭声音'
footerListTemplate[itemIndex][rowIndex].active = false footerListTemplate[itemIndex][rowIndex].active = false
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
agora.muteLocalAudioStream(false) postOpenMicr(true, false)
postOpenMicr(true)
break; break;
case '关闭视频': case '关闭视频':
footerListTemplate[itemIndex][rowIndex].title = '开启视频' footerListTemplate[itemIndex][rowIndex].title = '开启视频'
footerListTemplate[itemIndex][rowIndex].active = true footerListTemplate[itemIndex][rowIndex].active = true
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
agora.muteLocalVideoStream(true)
postOpenCamera(false) postOpenCamera(false)
break; break;
case '开启视频': case '开启视频':
footerListTemplate[itemIndex][rowIndex].title = '关闭视频' footerListTemplate[itemIndex][rowIndex].title = '关闭视频'
footerListTemplate[itemIndex][rowIndex].active = false footerListTemplate[itemIndex][rowIndex].active = false
setFooterList(footerListTemplate) setFooterList(footerListTemplate)
agora.muteLocalVideoStream(false)
postOpenCamera(true) postOpenCamera(true)
break; break;
case '设置向导': case '设置向导':
@ -359,11 +357,12 @@ const Meeting: React.FC = () => {
} }
// 开关麦克风 // 开关麦克风
const postOpenMicr = async (enableMicr: boolean): Promise<void> => { const postOpenMicr = async (enableMicr: boolean, isAll: boolean): Promise<void> => {
await PostOpenMicr({ await PostOpenMicr({
roomNum: state.channelId, roomNum: state.channelId,
uid: user.uid, uid: user.uid,
enableMicr enableMicr,
isAll,
}).then(res => { }).then(res => {
getRoomUser() getRoomUser()
}) })
@ -440,22 +439,25 @@ const Meeting: React.FC = () => {
</div> </div>
<Input placeholder="请输入用户名" className='drag' prefix={<SearchOutlined style={{ color: 'white' }} />} /> <Input placeholder="请输入用户名" className='drag' prefix={<SearchOutlined style={{ color: 'white' }} />} />
<div className={styles.meetingUserListContent}> <div className={styles.meetingUserListContent}>
{list.map((item: number) => {roomUserList.map((item: any, index: number) =>
<div key={item} className='drag'> <div key={index} className='drag'>
<div> <div>
<div><img src={ImageUrl.avatar} alt="" /></div> <div><img src={ImageUrl.avatar} alt="" /></div>
<span><span style={{ color: '#02B188', marginLeft: '4px' }}></span></span> <span>
{item.userName}
{item.roleId === '1' ? <span style={{ color: '#02B188', marginLeft: '4px' }}></span> : null}
</span>
</div> </div>
<div> <div>
<img src={ImageUrl.icon22} alt="" /> <img src={item.enableMicr ? ImageUrl.icon22 : ImageUrl.icon22Active} alt="" />
<img src={ImageUrl.icon23} alt="" /> <img src={item.enableCamera ? ImageUrl.icon23 : ImageUrl.icon23Active} alt="" />
</div> </div>
</div> </div>
)} )}
</div> </div>
<div className={`${styles.meetingUserListFooter} drag`}> <div className={`${styles.meetingUserListFooter} drag`}>
<div></div> <div></div>
<div></div> <div onClick={() => postOpenMicr(true, true)}></div>
</div> </div>
</div> </div>
: :

View File

@ -1,7 +1,7 @@
import { message } from "antd"; import { message } from "antd";
import os from 'os' const os = require('os');
import storage from "./storage"; import storage from "./storage";
const { import {
createAgoraRtcEngine, createAgoraRtcEngine,
ClientRoleType, ClientRoleType,
VideoSourceType, VideoSourceType,
@ -11,7 +11,7 @@ const {
ChannelProfileType, ChannelProfileType,
MediaRecorderContainerFormat, MediaRecorderContainerFormat,
MediaRecorderStreamType MediaRecorderStreamType
} = require("agora-electron-sdk"); } from "agora-electron-sdk";
const option: any = { const option: any = {
appId: 'dcfc466a6ecb4a1f972630065dfb1e75', appId: 'dcfc466a6ecb4a1f972630065dfb1e75',
token: '', token: '',
@ -221,7 +221,7 @@ const agora = {
}, },
}) })
iMediaRecorder.startRecording({ iMediaRecorder.startRecording({
storagePath: `${os.homedir()}/${+new Date()}.mp4`, //录音文件在本地保存的绝对路径,需精确到文件名及格式 storagePath: `${os.homedir()}/Desktop/${+new Date()}.mp4`, //录音文件在本地保存的绝对路径,需精确到文件名及格式
containerFormat: MediaRecorderContainerFormat.FormatMp4, //录制文件的格式 containerFormat: MediaRecorderContainerFormat.FormatMp4, //录制文件的格式
streamType: MediaRecorderStreamType.StreamTypeBoth, //录制内容 streamType: MediaRecorderStreamType.StreamTypeBoth, //录制内容
maxDurationMs: 7200000, //maxDurationMs maxDurationMs: 7200000, //maxDurationMs

View File

@ -54,10 +54,26 @@ export default defineConfig({
resolve({ resolve({
'agora-electron-sdk': ` 'agora-electron-sdk': `
const { const {
createAgoraRtcEngine createAgoraRtcEngine,
ChannelProfileType,
ClientRoleType,
MediaRecorderContainerFormat,
MediaRecorderStreamType,
RenderModeType,
ScreenCaptureSourceType,
VideoSourceType,
VideoViewSetupMode
} = require("agora-electron-sdk") } = require("agora-electron-sdk")
export { export {
createAgoraRtcEngine, createAgoraRtcEngine,
ChannelProfileType,
ClientRoleType,
MediaRecorderContainerFormat,
MediaRecorderStreamType,
RenderModeType,
ScreenCaptureSourceType,
VideoSourceType,
VideoViewSetupMode
} }
`, `,
}) })