diff --git a/src/components/Consultation/components/draggerAble.vue b/src/components/Consultation/components/draggerAble.vue index 7115fd2..e2e2e72 100644 --- a/src/components/Consultation/components/draggerAble.vue +++ b/src/components/Consultation/components/draggerAble.vue @@ -87,8 +87,6 @@ const showPushlVideo = ref(false); const speakers = ref([]); -const codeId = ref(null) - // 54040254001310305009 视频 // 38467417 对讲机 const keyWoed = ref('38467417') //关键字 @@ -126,17 +124,11 @@ const handleBtn = (type) =>{ switch(type){ case '无人机': let obj = { basedata_id , video_frame_size: 3, hook_flag: 0 } - window.lemon.call.makeVideoCall(obj)?.then((resp) => { - console.log('无人机', resp); - codeId.value = resp.call_id - }); + CALL.makeVideoCall(obj) break; case '对讲机': let obj1 = { basedata_id,"hook_flag":0,"duplex_flag":0 } CALL.makeVoiceCall(obj1) - // window.lemon.call.makeVoiceCall(obj1)?.then((resp) => { - // codeId.value = resp.call_id - // }); break; } } @@ -147,7 +139,6 @@ const handleBtn = (type) =>{ // register media stream callback,include audio and video stream const registerStream = () => { streamCbId = window.lemon.call.addMediaStream((call_id, stream, type) => { - console.log(type,'============监听播放类型'); rootView.style.display = 'unset'; if (type === 'audio_dst') { setAudio(stream); @@ -244,13 +235,14 @@ const registerGrantEvent = () => { const close = () => { - console.log('=======关闭'); - if (rootView) rootView.style.display = 'none'; + if (rootView) { + emit('update:modelValue',false) + rootView.style.display = 'none'; + } }; const applayFloor = () => { - const index = speakers.value?.findIndex((item) => item.number === baseInfo.basedata_id); - console.log( index,'-1','=== speakers.value'); + const index = speakers.value?.findIndex((item) => item.number === baseInfo.user_id); if (index >= 0) { CALL.releaseFloor(); } else { @@ -260,7 +252,7 @@ const applayFloor = () => { const hangup = () => { emit('update:modelValue',false) - CALL.hangup(codeId.value); + CALL.hangup(); }; const initWave = () => { diff --git a/src/components/Consultation/demo.vue b/src/components/Consultation/demo.vue index 1196c0c..f264efe 100644 --- a/src/components/Consultation/demo.vue +++ b/src/components/Consultation/demo.vue @@ -159,7 +159,7 @@ const Init = () => { if (!token) { let userInfo = { username: "sgxtcs", - password: "sgxtcs", + password: "123456", realm: "puc.com", webpucUrl: "https://89.40.9.95:16888" }; diff --git a/src/components/Consultation/sdk/call.js b/src/components/Consultation/sdk/call.js index 021857f..ca14e82 100644 --- a/src/components/Consultation/sdk/call.js +++ b/src/components/Consultation/sdk/call.js @@ -32,7 +32,7 @@ export default function useCallModule() { const makeVoiceCall = (record ) => { if (call_id) return; - window.lemon.call.makeVoiceCall({ basedata_id: record.basedata_id, hook_flag: 0 })?.then((resp) => { + window.lemon.call.makeVoiceCall({ basedata_id: record.basedata_id, hook_flag: 0 , duplex_flag:0})?.then((resp) => { call_id = resp.call_id; }); }; @@ -145,9 +145,7 @@ export default function useCallModule() { * hangup call */ const hangup = (id) => { - console.log(id,'=====挂断'); window.lemon.call.hangupCall({ call_id: id || call_id })?.then(() => { - console.log('00000000000=====挂断'); call_id = undefined; window.calling_conference = undefined; }) diff --git a/src/views/backOfficeSystem/JudgmentHome/MeetingRoom/sdk/call.js b/src/views/backOfficeSystem/JudgmentHome/MeetingRoom/sdk/call.js deleted file mode 100644 index 32419f8..0000000 --- a/src/views/backOfficeSystem/JudgmentHome/MeetingRoom/sdk/call.js +++ /dev/null @@ -1,714 +0,0 @@ -// import { Notification } from '@arco-design/web-vue'; -import { ElNotification, ElMessage } from 'element-plus' -import emitter from "@/utils/eventBus.js"; -// import handleCallingNotification from '../hooks/callingNotification'; - -let call_id; -let hangup_event_cb_id; -let force_hangup_event_cb_id; -let answer_ack_cb_id; -let incoming_cb_id; -let floor_grant_cb_id; - -// Whether it is a pushVideoFile call -// 是否为视频推送的呼叫 -let pushing_video = false; -// monitor call list -// 值守呼叫列表 -const monitor_call_list = []; - -export default function useCallModule() { - // we allow only one call exist in demo.but actually,sdk supports more - - /** - * make private vioce call,return nothing,receive result in callback - * This interface has been expanded to support makeGroupVoiceCall、makeDispatcherVoiceCall、makeConferenceVoiceCall、makeCrosspatchVoiceCall - * 这个接口已扩展,除了支持语音单呼外,还支持语音组呼、语音呼叫调度员、语音会议、群组呼叫。 - * @param record who you wanna call - * @returns - */ - const makeVoiceCall = (record) => { - if (call_id) { - console.warn('we allow only one call exist,please hangup first'); - return; - } - - window.lemon.call - .makeVoiceCall({ basedata_id: record.basedata_id, hook_flag: 0 }) - ?.then((resp) => { - call_id = resp.call_id; - console.info('makeVoiceCall succ,registerCallEstablishEvent', call_id); - }); - - // test - // window.lemon.call.changeCamera({ call_id, target_camera: 0 }); - - // also can use this makecall method,the method provides the most comprehensive call capability - // For example, Voice private call, ensure that the basedata_id is a private - // window.lemon.call - // .makeCall({ - // callee_guid: record.basedata_id, - // attribute: { - // call_type: 0, - // call_mode: 0, - // duplex_flag: 0, - // }, - // }) - // ?.then((resp) => { - // console.info('makeCall succ,resp', resp); - // call_id = resp.call_id; - // }); - - // For example, Voice group call,ensure that the basedata_id is a group - // window.lemon.call - // .makeCall({ - // callee_guid: record.basedata_id, - // attribute: { - // call_type: 1, - // call_mode: 0, - // duplex_flag: 0, // group call ,the value must be 0 - // }, - // }) - // ?.then((resp) => { - // console.info('makeCall succ,resp', resp); - // call_id = resp.call_id; - // }); - }; - /** - * make private video call,call with vioce and video,return nothing,receive result in callback - * This interface has been expanded to support makeGroupVideoCall、makeDispatcherVideoCall、makeConferenceVideoCall - * 这个接口已扩展,除了支持视频单呼外,还支持视频组呼、视频呼叫调度员、视频会议 - * @param record who you wanna call - * @returns - */ - const makeVideoCall = (record) => { - if (call_id) { - console.warn('we allow only one call exist,please hangup first'); - return; - } - window.lemon.call - .makeVideoCall({ basedata_id: record.basedata_id, video_frame_size: 3 }) - ?.then((resp) => { - call_id = resp.call_id; - - console.warn('makeVideoCall succ,call_id=', call_id); - }); - - // also can use this makecall method,the method provides the most comprehensive call capability - // For example, Video private call (with voice), ensure that the basedata_id is a private - // window.lemon.call - // .makeCall({ - // callee_guid: record.basedata_id, - // attribute: { - // call_type: 11, - // call_mode: 2, - // duplex_flag: 1, - // }, - // video_frame_size: window.lemon.call.getMaxFrameSize(), - // }) - // ?.then((resp) => { - // console.info('makeCall succ,resp', resp); - // call_id = resp.call_id; - // }); - - // For example, Video group call,ensure that the basedata_id is a group - // window.lemon.call - // .makeCall({ - // callee_guid: record.basedata_id, - // attribute: { - // call_type: 13, - // call_mode: 2, - // duplex_flag: 0, // group call ,the value must be 0 - // }, - // video_frame_size: window.lemon.call.getMaxFrameSize(), - // }) - // ?.then((resp) => { - // console.info('makeCall succ,resp', resp); - // call_id = resp.call_id; - // }); - }; - const makeGroupVideoCall = (record) => { - if (call_id) { - console.warn('we allow only one call exist,please hangup first'); - return; - } - window.lemon.call - .makeGroupVideoCall({ - basedata_id: record.basedata_id, - video_frame_size: 3, - }) - ?.then((resp) => { - console.log('makeGroupVideoCall call_id = ', call_id); - call_id = resp.call_id; - }); - }; - const makeGroupVoiceCall = (record) => { - if (call_id) { - console.warn('we allow only one call exist,please hangup first'); - return; - } - window.lemon.call - .makeGroupVoiceCall({ - basedata_id: record.basedata_id, - }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - - const makeCrosspatchVoiceCall = (record) => { - window.lemon.call - .makeCrosspatchVoiceCall({ basedata_id: record.basedata_id }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - - /** - * 视频上拉 - * make pure video call,only video, no voice - * @param record who you wanna call - * @returns - */ - const pureVideoCall = (record) => { - if (call_id) { - console.warn('we allow only one call exist,please hangup first'); - return; - } - window.lemon.call - .pullVideo({ basedata_id: record.basedata_id, hook_flag: 0 }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - /** - * 环境监听 - * @param record - */ - const voiceDetect = (record) => { - window.lemon.call - .makeCall({ - callee_guid: record.basedata_id, - attribute: { - call_type: 0, - call_mode: 0, - duplex_flag: 0, - ambience_flag: 1, - }, - }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - - /** - * 环境监视 - * @param record - */ - const videoDetect = (record) => { - window.lemon.call - .makeCall({ - callee_guid: record.basedata_id, - attribute: { - call_type: 11, - call_mode: 2, - duplex_flag: 0, - ambience_flag: 1, - }, - }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - /** - * 音频会议 - * @param record - */ - const makeConferenceVoiceCall = (record) => { - window.lemon.call - .makeConferenceVoiceCall({ - basedata_id: record.basedata_id, - }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - /** - * 音视频会议 - * @param record - */ - const makeConferenceVideoCall = (record) => { - window.lemon.call - .makeConferenceVideoCall({ - basedata_id: record.basedata_id, - }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - - // 广播呼叫 - // Broadcast Call - const makeBroadcastCall = (record) => { - window.lemon.call - .makeCall({ - callee_guid: record.basedata_id, - attribute: { - call_type: 3, - call_mode: 0, - }, - }) - ?.then((resp) => { - call_id = resp.call_id; - }); - }; - - /** - * hangup call - */ - const hangup = (id) => { - console.info('try hangup,call_id=', call_id); - console.info('try hangup,id=', id); - - window.lemon.call - .hangupCall({ call_id: id || call_id }) - ?.then(() => { - call_id = undefined; - window.calling_conference = undefined; - // console.log('22222registerCallEstablishEven'); - }) - .catch((err) => { - console.error('hangup call error,', err); - }); - }; - - /** - * 接听呼叫 - * answer call - */ - const answerCall = () => { - ElNotification.close(call_id); - - window.lemon.call - .answerCall({ call_id }) - ?.then(() => { - // display alert ui - ElNotification.close(call_id); - }) - .catch((err) => { - console.error('answer call error,', err); - }); - }; - - // 禁麦 - // mute the microphone - const setMuteMic = (mute) => { - return window.lemon.call.muteMic({ - call_id, - is_mute: mute, - }); - }; - - // 禁摄像头 - // disable the camera - const setMuteCamera = (mute) => { - return window.lemon.call.muteCamera({ - call_id, - is_mute: mute, - }); - }; - // 静音 - // mute call - const setMuteCall = (mute) => { - return window.lemon.call.muteCall({ - call_id, - is_mute: mute, - }); - }; - - const removeMonitorCall = (callId) => { - const index = monitor_call_list.findIndex( - (item) => item.call_id === callId - ); - if (index >= 0) { - monitor_call_list.splice(index, 1); - emitter.emit('monitorUpdate'); - } - }; - - const getMonitorCallList = () => { - return monitor_call_list; - }; - - // 添加 挂断 回调 - // After hanging up the call, you can receive a notification and process the style of the current page based on the notification - const registerhangupEvent = () => { - if (hangup_event_cb_id !== undefined) { - return; - } - - hangup_event_cb_id = window.lemon.call.addHangupEvt((data) => { - console.info('receive hangup event'); - console.info( - 'receive hangup event receive call id', - String(data.call_id) - ); - console.info('receive hangup event local call id', String(call_id)); - if (data.call_id === call_id) { - // remove display alert ui - ElNotification.close(call_id); - call_id = undefined; - window.calling_conference = undefined; - // console.log('2222211111registerCallEstablishEvent'); - } - - // pushVideoFile uninit - // 如果是视频推送的,挂断是反初始化一些东西。 - if (pushing_video) { - window.video.src = undefined; - window.showVideo.value = false; - pushing_video = false; - window.videoViewRoot.style.display = 'none'; - } - removeMonitorCall(data.call_id); - }); - }; - - // 添加强拆事件 - const registerForceHangupEvent = () => { - if (force_hangup_event_cb_id !== undefined) { - return; - } - force_hangup_event_cb_id = window.lemon.call.addForceHangupEvt((data) => { - // 目前强拆成功,都是走挂断通知事件。 当失败了,才走强拆事件通知。 - if (data.result === 0) { - if (data.call_id === call_id) { - ElNotification.close(call_id); - call_id = undefined; - window.calling_conference = undefined; - } - removeMonitorCall(data.call_id); - } else { - // 强拆失败 fail - ElMessage.error("强拆失败"); - } - }); - }; - - // 添加接听回调通知 代表呼叫建立 - // receive the answer acknowledgement asynchronously after the call is established - const registerCallEstablishEvent = () => { - if (answer_ack_cb_id !== undefined) { - return; - } - answer_ack_cb_id = window.lemon.call.addAnswerAckEvt((data) => { - // console.info('registerCallEstablishEvent0', call_id); - console.info('registerCallEstablishEvent', String(data.call_id)); - console.info('registerCallEstablishEvent', JSON.stringify(data)); - - call_id = data.call_id; - // pushVideoFile init - // 接通后,视频推送的文件开始播放 - if (pushing_video) { - window.videoViewRoot.style.display = 'unset'; - window.showVideo.value = true; - window.video.play(); - } - }); - }; - - // 注册来电通知回调 - // add the incoming call callback - const registerReceiveCallEvent = () => { - if (incoming_cb_id !== undefined) { - return; - } - incoming_cb_id = window.lemon.call.addIncomingEvt((session) => { - console.log('receive call------>', session); - call_id = session.call_id; - const callingReq = { - callInfo: session, - equipment: undefined, - text: { - calling: '队列', - answer: '接听', - hangUp: '挂断', - }, - }; - console.log('receive this------>', useCallModule()); - if (session.listen_flag) { - // monitor call,auto answer call - // 值守的来电呼叫,自动接听 - window.lemon.call.answerCall({ call_id: session.call_id }); - monitor_call_list.push(session); - - emitter.emit('monitorUpdate'); - } else { - // normal call - // 正常来电,弹框询问接听 - // handleCallingNotification(callingReq); - } - }); - }; - - // 申请话权 - // apply floor - const applyFloor = () => { - console.info('try applyFloor,call_id=', call_id); - if (!call_id) { - console.warn('no call exits'); - return undefined; - } - return window.lemon.floor - .applySpeak({ call_id }) - ?.then((resp) => { - if (resp.result === 0) { - console.log('applyFloor request sucess'); - } else { - ElMessage.error("申请话权失败"); - } - }) - .catch((err) => { - console.error('applyFloor error,', err); - }); - }; - - // 释放话权 - // release floor - const releaseFloor = () => { - console.info('try releaseFloor,call_id=', call_id); - return window.lemon.floor - .releaseSpeak({ call_id }) - ?.then((resp) => { - if (resp.result === 0) { - console.log('releaseSpeak request sucess'); - } else { - ElMessage.error("释放话权失败"); - } - }) - .catch((err) => { - console.error('releaseSpeak error,', err); - }); - }; - - // add floor event - // 添加话权通知事件 - const registerFloorGrantEvent = () => { - if (floor_grant_cb_id !== undefined) { - return; - } - floor_grant_cb_id = window.lemon.floor.addGrantEvt((grantInfo) => { - console.log('registerFloorGrantEvent', grantInfo); - if (grantInfo.result !== 0) { - ElMessage.error("话权申请失败"); - } - }); - }; - - // 强拆 - // override the call - const forceHangupCall = (callId) => { - return window.lemon.call - .forceHangupCall({ call_id: callId || call_id }) - ?.then((resp) => { - if (resp.result === 0) { - console.log('forceHangupCall request sucess'); - } else { - ElMessage.error("强拆失败"); - } - call_id = undefined; - window.calling_conference = undefined; - // console.log('2222233registerCallEstablishEven'); - }) - .catch((err) => { - console.error('forceHangupCall error,', err); - }); - }; - // 强插 - // interrupt the call during monitoring - const forceApplySpeak = (callId) => { - return window.lemon.floor - .forceApplySpeak({ call_id: callId || call_id }) - ?.then((resp) => { - if (resp.result === 0) { - console.log('forceApplySpeak request sucess'); - call_id = callId; - } else { - ElMessage.error("强插失败"); - } - }) - .catch((err) => { - console.error('forceApplySpeak error,', err); - }); - }; - - /** - * 会议成员禁言 - * mute or unmute a conference member - * @param param - * @param param.conference_basedata_id - */ - const muteMemberInConference = ( - conference_basedata_id, - member_basedata_id, - mute - ) => { - return window.lemon.call.conferenceMemberSpeakSet({ - conference_call_id: call_id, - conference_basedata_id, - member_setting: { - member_basedata_id, - forbid: mute ? 1 : 0, - }, - }); - }; - - /** - * 视频推送 - * select a local video file and play then push the stream to remote - * @param record - * @param file - * @returns - */ - const pushVideoFile = (record, url) => { - console.info('try pushVideoFile,call_id=', call_id); - if (call_id) { - console.warn('call exits'); - return; - } - console.warn('window.video', window.video); - // set the file to video tag - if (window.video) { - const canPlayListener = () => { - window.video.removeEventListener('canplay', canPlayListener); - // capture stream - const stream = (window.video)?.captureStream(); - console.info('pushVideoFile,inited stream=', stream); - // register hook listner ,play the video when remote hooked - registerCallEstablishEvent(); - // init the call - window.lemon.call - .pushVideoFile({ - basedata_id: record?.basedata_id, - stream, - }) - ?.then((resp) => { - pushing_video = true; - call_id = resp.call_id; - }); - }; - - const endListener = () => { - console.info('pushVideoFile,video play end'); - window.video.removeEventListener('ended', endListener); - hangup(); - }; - // maybe did't finish the video,so that we has listener already,remove it - window.video.removeEventListener('ended', endListener); - console.info('pushVideoFile,add canplay Event Listener', canPlayListener); - window.video.addEventListener('canplay', canPlayListener); - // hangup the call when video finished - console.info('pushVideoFile,add ended Event Listener', endListener); - window.video.addEventListener('ended', endListener); - window.video.autoplay = false; - window.video.src = url; - } - }; - - /** - * 视频转发 - * share a exist call to another device - * @param record - * @param stop - * @returns - */ - const forwardVideoCall = (record, stop) => { - console.info('try forwardVideoCall,call_id=', call_id); - if (!call_id) { - console.warn('no call exits,can not forward'); - ElMessage.warning('no call exits'); - return undefined; - } - return window.lemon.call - .forwardVideoCall({ - basedata_id: record?.basedata_id, - call_id, - action: stop ? 1 : 0, - }) - ?.then((resp) => { - if (resp.result === 0) { - console.log('forwardVideoCall request sucess'); - } else { - ElMessage.error("视频转发失败"); - } - }) - .catch((err) => { - console.error('forwardVideoCall error,', err); - }); - }; - - const getEmitter = () => { - return emitter; - }; - - // call sdk unInit - const unInit = () => { - call_id = undefined; - - if (hangup_event_cb_id) { - window.lemon.call.removeHangupEvt(hangup_event_cb_id); - hangup_event_cb_id = undefined; - } - if (force_hangup_event_cb_id) { - window.lemon.call.removeForceHangupEvt(force_hangup_event_cb_id); - force_hangup_event_cb_id = undefined; - } - if (answer_ack_cb_id) { - window.lemon.call.removeAnswerAckEvt(answer_ack_cb_id); - answer_ack_cb_id = undefined; - } - if (incoming_cb_id) { - window.lemon.call.removeIncomingEvt(incoming_cb_id); - incoming_cb_id = undefined; - } - if (floor_grant_cb_id) { - window.lemon.floor.removeGrantEvt(floor_grant_cb_id); - floor_grant_cb_id = undefined; - } - monitor_call_list.length = 0; - }; - - return { - makeVoiceCall, - makeVideoCall, - pureVideoCall, - registerhangupEvent, - registerReceiveCallEvent, - answerCall, - makeGroupVoiceCall, - makeGroupVideoCall, - makeBroadcastCall, - hangup, - voiceDetect, - videoDetect, - applyFloor, - releaseFloor, - setMuteCamera, - setMuteMic, - setMuteCall, - muteMemberInConference, - makeConferenceVoiceCall, - makeConferenceVideoCall, - makeCrosspatchVoiceCall, - registerCallEstablishEvent, - pushVideoFile, - forwardVideoCall, - forceHangupCall, - getMonitorCallList, - getEmitter, - forceApplySpeak, - registerFloorGrantEvent, - registerForceHangupEvent, - unInit, - }; -} diff --git a/src/views/backOfficeSystem/JudgmentHome/MeetingRoom/sdk/callingNotification.ts b/src/views/backOfficeSystem/JudgmentHome/MeetingRoom/sdk/callingNotification.ts deleted file mode 100644 index 230033a..0000000 --- a/src/views/backOfficeSystem/JudgmentHome/MeetingRoom/sdk/callingNotification.ts +++ /dev/null @@ -1,37 +0,0 @@ -// import { h } from 'vue'; -// import { Notification } from '@arco-design/web-vue'; -// import { IconClose } from '@arco-design/web-vue/es/icon'; -// import Content from '@/views/webPuc/callingNotification/components/content.vue'; -// import Footer from '@/views/webPuc/callingNotification/components/footer.vue'; -// import { formatShowNameFin } from './format-show-name'; - -// export default function handleCallingNotification(propsObj) { -// const { callInfo, text } = propsObj; -// const { calling, answer = 'answer', hangUp = 'hang up' } = text; -// Notification.info({ -// id: callInfo.call_id, -// showIcon: false, -// position: 'bottomLeft', -// closable: true, -// closeIconElement: () => { -// return h(IconClose); -// }, -// title: () => -// h(Content, { -// callInfo, -// calling, -// getName: formatShowNameFin( -// callInfo.caller_alias, -// callInfo.caller_number -// ), -// }), -// content: () => -// h(Footer, { -// callInfo, -// answer, -// hangUp, -// }), -// duration: 0, -// style: { width: '260px' }, -// }); -// }