{"version":3,"file":"js/index.fff6db1b.js","mappings":"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","sources":["webpack://yunshihome/./src/config/storage.ts","webpack://yunshihome/./src/App.vue","webpack://yunshihome/./src/App.vue?7ccd","webpack://yunshihome/./src/router/index.ts","webpack://yunshihome/./src/websocket/index.ts","webpack://yunshihome/./src/config/participant.ts","webpack://yunshihome/./src/store/public/websocket.ts","webpack://yunshihome/./src/store/public/public.ts","webpack://yunshihome/./src/store/index.ts","webpack://yunshihome/./src/config/element.ts","webpack://yunshihome/./src/main.ts","webpack://yunshihome/webpack/bootstrap","webpack://yunshihome/webpack/runtime/amd options","webpack://yunshihome/webpack/runtime/chunk loaded","webpack://yunshihome/webpack/runtime/compat get default export","webpack://yunshihome/webpack/runtime/define property getters","webpack://yunshihome/webpack/runtime/ensure chunk","webpack://yunshihome/webpack/runtime/get javascript chunk filename","webpack://yunshihome/webpack/runtime/get mini-css chunk filename","webpack://yunshihome/webpack/runtime/global","webpack://yunshihome/webpack/runtime/hasOwnProperty shorthand","webpack://yunshihome/webpack/runtime/load script","webpack://yunshihome/webpack/runtime/make namespace object","webpack://yunshihome/webpack/runtime/node module decorator","webpack://yunshihome/webpack/runtime/publicPath","webpack://yunshihome/webpack/runtime/css loading","webpack://yunshihome/webpack/runtime/jsonp chunk loading","webpack://yunshihome/webpack/startup"],"sourcesContent":["export const localSet = (name:any, value:any) => localStorage.setItem(name,value)\r\nexport const sessionSet = (name:any, value:any) => sessionStorage.setItem(name,value)\r\n\r\nexport const localGet = (name:any) => localStorage.getItem(name)\r\nexport const sessionGet = (name:any) => sessionStorage.getItem(name)\r\n\r\nexport const localDel = (name:any) => localStorage.removeItem(name)\r\nexport const sessionDel = (name:any) => sessionStorage.removeItem(name)","\r\n\t\r\n\r\n\r\n\n","import { render } from \"./App.vue?vue&type=template&id=5a88b4a9\"\nconst script = {}\n\nimport \"./App.vue?vue&type=style&index=0&id=5a88b4a9&lang=scss\"\n\nimport exportComponent from \"D:\\\\works\\\\official-web\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\n\nconst routes: Array = [\n\t// {\n\t// \tpath: '/',\n\t// \tname: 'home',\n\t// \tcomponent: () => import('../views/home/index.vue')\n\t// },\r\n\t{\r\n\t\tpath: '/index',\r\n\t\tname: 'index',\r\n\t\tcomponent: () => import('../components/MainContent/MainContent.vue'),\r\n\t\tchildren: [\r\n\t\t {\r\n\t\t path: '/',\r\n\t\t\t\tname: 'home',\r\n\t\t\t\tmeta: {moudule: 'home'},\r\n\t\t component: () => import('../views/home/index.vue')\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tpath: '/about',\r\n\t\t\t\tname: 'about',\r\n\t\t\t\tmeta: {moudule: 'about'},\r\n\t\t\t\tcomponent: () => import('../views/home/about.vue')\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tpath: '/download',\r\n\t\t\t\tname: 'download',\r\n\t\t\t\tmeta: {moudule: 'download'},\r\n\t\t\t\tcomponent: () => import('../views/home/download.vue')\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tpath: '/productcenter/:name?/:cur?/:code?',\r\n\t\t\t\tname: 'productcenter',\r\n\t\t\t\tmeta: {moudule: 'productcenter'},\r\n\t\t\t\tprops: true,\r\n\t\t\t\tcomponent: () => import('../views/home/productcenter.vue')\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tpath: '/productinfo/:id',\r\n\t\t\t\tname: 'productinfo',\r\n\t\t\t\tprops: true,\r\n\t\t\t\tmeta: {moudule: 'productcenter'},\r\n\t\t\t\tcomponent: () => import('../views/home/productinfo.vue')\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tpath: '/document',\r\n\t\t\t\tname: 'document',\r\n\t\t\t\tmeta: {moudule: 'document'},\r\n\t\t\t\tcomponent: () => import('../views/home/document.vue')\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tpath: '/api',\r\n\t\t\t\tname: 'api',\r\n\t\t\t\tmeta: {moudule: 'document', shadow: true},\r\n\t\t\t\tcomponent: () => import('../views/home/api/index.vue'),\r\n\t\t\t\tchildren: [\r\n\t\t\t\t {\r\n\t\t\t\t path: 'history',\r\n\t\t\t\t\t\tname: 'history',\r\n\t\t\t\t\t\tmeta: {moudule: 'document', shadow: true},\r\n\t\t\t\t component: () => import('../views/home/api/history.vue')\r\n\t\t\t\t\t},\r\n\t\t\t\t {\r\n\t\t\t\t path: 'info',\r\n\t\t\t\t\t\tname: 'info',\r\n\t\t\t\t\t\tmeta: {moudule: 'document', shadow: true},\r\n\t\t\t\t component: () => import('../views/home/api/info.vue')\r\n\t\t\t\t\t},\r\n\t\t\t\t {\r\n\t\t\t\t path: 'method',\r\n\t\t\t\t\t\tname: 'method',\r\n\t\t\t\t\t\tmeta: {moudule: 'document', shadow: true},\r\n\t\t\t\t component: () => import('../views/home/api/method.vue')\r\n\t\t\t\t\t},\r\n\t\t\t\t {\r\n\t\t\t\t path: 'websocket',\r\n\t\t\t\t\t\tname: 'websocket',\r\n\t\t\t\t\t\tmeta: {moudule: 'document', shadow: true},\r\n\t\t\t\t component: () => import('../views/home/api/websocket.vue')\r\n\t\t\t\t\t},\r\n\t\t\t\t {\r\n\t\t\t\t path: 'request/:id',\r\n\t\t\t\t\t\tname: 'request',\r\n\t\t\t\t\t\tmeta: {moudule: 'document', shadow: true},\r\n\t\t\t\t\t\tprops: true,\r\n\t\t\t\t component: () => import('../views/home/api/request.vue')\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tpath: '/living',\r\n\t\tname: 'living',\r\n\t\tcomponent: () => import('../views/living/living.vue')\r\n\t},\r\n\t{\r\n\t\tpath: '/meeting',\r\n\t\tname: 'meeting',\r\n\t\tcomponent: () => import('../components/Content/Content.vue'),\r\n\t\tchildren: [\r\n\t\t {\r\n\t\t path: 'index',\r\n\t\t component: () => import('../views/meeting/index.vue')\r\n\t\t\t},\r\n\t\t {\r\n\t\t path: 'meeting/:room',\r\n\t\t component: () => import('../views/meeting/Meeting.vue'),\r\n\t\t\t\tprops: true\r\n\t\t\t},\r\n\t\t {\r\n\t\t path: 'living/:url/:room',\r\n\t\t component: () => import('../views/meeting/Living.vue'),\r\n\t\t\t\tprops: true\r\n\t\t\t},\r\n\t\t],\r\n\t},\r\n\t{\r\n\t\tpath: '/login',\r\n\t\tname: 'login',\r\n\t\tcomponent: () => import('../views/meeting/Login.vue')\r\n\t},\n]\n\nconst router = createRouter({\n\thistory: createWebHashHistory(),\n\troutes\n})\n\nexport default router\n","export const useWebSocket = ({ wsUri, onMessage, onClosed, onSuccess }:any) => {\r\n\tlet ws:any = null;\r\n\tinterface timeout{\r\n\t\ttimeoutObj: any | null,\r\n\t\tserverTimeoutObj: any | null,\r\n\t}\r\n\tlet timeouts: timeout = { timeoutObj: null, serverTimeoutObj: null, }\r\n\tconst bindWsEvent = () => {\r\n\t\t//连接成功\r\n\t\tws.addEventListener('open', ({ type }:any) => {\r\n\t\t\tconsole.log('连接成功 ---', type,)\r\n\t\t\theartCheck.start()\r\n\t\t\tif(typeof onSuccess == 'function') onSuccess()\r\n\t\t})\r\n\t\t//连接关闭\r\n\t\tws.addEventListener('close', ({ type }:any) => {\r\n\t\t\tconsole.log('连接关闭 ---', type)\r\n\t\t\ttimeouts.timeoutObj && clearTimeout(timeouts.timeoutObj);\r\n\t\t\ttimeouts.serverTimeoutObj && clearTimeout(timeouts.serverTimeoutObj);\r\n\t\t\tif(typeof onClosed == 'function') onClosed()\r\n\t\t})\r\n\t\t//连接错误\r\n\t\tws.addEventListener('error', ({ type }:any) => {\r\n\t\t\tconsole.log('连接错误 ---', type)\r\n\t\t})\r\n\t\t//消息接收\r\n\t\tws.addEventListener('message', (res:any) => {\r\n\t\t\theartCheck.start()\r\n\t\t\tif(typeof onMessage == 'function') onMessage(res)\r\n\t\t})\r\n\t}\r\n\t\r\n\t// 初始化函数\r\n\tconst init = () => {\r\n\t\tbindWsEvent()\r\n\t}\r\n\t\r\n\tvar lockReconnect = false;//避免重复连接\r\n\tvar tt:any = null;\r\n\tconst reconnect = () => {\r\n\t\tif (lockReconnect) {\r\n\t\t\treturn;\r\n\t\t};\r\n\t\tlockReconnect = true;\r\n\t\t//没连接上会一直重连,设置延迟避免请求过多\r\n\t\ttt && clearTimeout(tt);\r\n\t\ttt = setTimeout(function() {\r\n\t\t\tcreateWebSocket();\r\n\t\t\tlockReconnect = false;\r\n\t\t}, 4000);\r\n\t}\r\n\t\r\n\tconst createWebSocket = () => {\r\n\t\ttry {\r\n\t\t\tws = new WebSocket(wsUri)\r\n\t\t\tinit()\r\n\t\t} catch (e) {\r\n\t\t\tconsole.log('catch', e);\r\n\t\t\t// reconnect(wsUrl);\r\n\t\t\tif(typeof onClosed == 'function') onClosed()\r\n\t\t}\r\n\t}\r\n\tcreateWebSocket()\r\n\t\r\n\t//心跳检测\r\n\tvar heartCheck = {\r\n\t\ttimeout: 30000, //每隔三秒发送心跳\r\n\t\tseverTimeout: 5000, //服务端超时时间\r\n\t\tstart: function() {\r\n\t\t\tvar _this = this;\r\n\t\t\ttimeouts.timeoutObj && clearTimeout(timeouts.timeoutObj);\r\n\t\t\ttimeouts.serverTimeoutObj && clearTimeout(timeouts.serverTimeoutObj);\r\n\t\t\ttimeouts.timeoutObj = setTimeout(function() {\r\n\t\t\t\t//这里发送一个心跳,后端收到后,返回一个心跳消息,\r\n\t\t\t\t//onmessage拿到返回的心跳就说明连接正常\r\n\t\t\t\ttry {\r\n\t\t\t\t\tws.send(JSON.stringify({// 心跳包\r\n\t\t\t\t\t\tmethod: 'heartbeat',\r\n\t\t\t\t\t}))\r\n\t\t\t\t}catch (e) {\r\n\t\t\t\t\tconsole.log('catch1', e);\r\n\t\t\t\t\t// reconnect(wsUrl);\r\n\t\t\t\t}\r\n\t\t\t\t//计算答复的超时时间\r\n\t\t\t\ttimeouts.serverTimeoutObj = setTimeout(function() {\r\n\t\t\t\t\tconsole.log(12333,'timeout to close')\r\n\t\t\t\t\tws.close();\r\n\t\t\t\t}, _this.severTimeout);\r\n\t\t\t}, _this.timeout)\r\n\t\t}\r\n\t}\r\n\t\r\n\treturn ws\r\n}\n","import store from '@/store'\r\nimport { nextTick } from 'vue'\r\n/**创建每个流对象**/\r\nexport const Participant = function(this: any, name: string, camera?:boolean, muteFlag?:boolean, mode?: string, readyStatus?:any, videoWidth?: number, videoHeight?: number){\r\n\tcamera = typeof (camera) == \"undefined\" ? true : camera\r\n\tmuteFlag = typeof (muteFlag) == \"undefined\" ? false : muteFlag\r\n\treadyStatus = typeof (readyStatus) == \"undefined\" ? 0 : readyStatus\r\n\tthis.name = name\r\n\tthis.mode = mode || 'none'\r\n\t// this.muteStatus = 1 //开麦状态,1开麦,0禁麦\r\n\t// this.videoStatus = 1 //视频状态,1开启视频,0视频关闭\r\n\tthis.muteStatus = muteFlag ? 0 : 1 //开麦状态,1开麦,0禁麦\r\n\tthis.videoStatus = camera ? 1 : 0 //视频状态,1开启视频,0视频关闭\r\n\tthis.readyStatus = readyStatus //视频加载状态,0加载未完成,1加载完毕开始播放,-1加载失败,不能播放\r\n\tthis.mkStatus = 0 //麦克风状态,是否能用,默认不能用,0不能用,1可以用\r\n\tthis.cameraStatus = 1 //摄像头状态,是否能用,默认不能用,0不能用,1可以用\r\n\tthis.checkeds = false //播放器加载完成回调是否已经调用过\r\n\tthis.onIceCandidate = function (candidate: any, wp: any) {\r\n\t\tlet message = {\r\n\t\t method: 'onIceCandidate',\r\n\t\t\tparams:{\r\n\t\t\t\tcandidate: candidate,\r\n\t\t\t\tname: name\r\n\t\t\t}\r\n\t\t};\r\n\t\tsendMessage(message);\r\n\t}\r\n\tthis.offerToReceiveVideo = function(error: any, offerSdp: any, wp: any){\r\n\t\tif (error) return console.log(\"sdp offer error\", error)\r\n\t\tconsole.log('Invoking SDP offer callback function');\r\n\t\tlet message = {\r\n\t\t\tmethod : \"receiveVideoFrom\",\r\n\t\t\tparams:{\r\n\t\t\t\tsender : name,\r\n\t\t\t\tsdpOffer : offerSdp\r\n\t\t\t}\r\n\t\t};\r\n\t\tsendMessage(message);\r\n\t}\r\n\tthis.onaddstream = function(e:any){\r\n\t\t\r\n\t}\r\n\tObject.defineProperty(this, 'rtcPeer', { writable: true});\r\n\tthis.dispose = function() {\r\n\t\tthis.rtcPeer.dispose()\r\n\t}\r\n\t//加载错误\r\n\tthis.getError = function(){\r\n\t\tthis.muteStatus = 0\r\n\t\tthis.videoStatus = 0\r\n\t\tthis.readyStatus = -1\r\n\t\tthis.cameraStatus = 0\r\n\t\tlet message = {\r\n\t\t\tmethod: 'mute',\r\n\t\t\tparams: {\r\n\t\t\t\tsender: name\r\n\t\t\t}\r\n\t\t}\r\n\t\tsendMessage(message)\r\n\t\tlet message2 = {\r\n\t\t\tmethod: 'groupForward',\r\n\t\t\tparams: {\r\n\t\t\t\tkey: \"camera\",\r\n\t\t\t\tmethod: \"updateMode\",\r\n\t\t\t\tvalue: false,\r\n\t\t\t\tparams: {\r\n\t\t\t\t\tname,\r\n\t\t\t\t\tcamera: false,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsendMessage(message2)\r\n\t}\r\n\t//设置开麦禁麦状态\r\n\tthis.setMute = function(muteFlag:any){\r\n\t\tthis.muteStatus = muteFlag\r\n\t}\r\n\t//设置参数\r\n\tthis.setPara = function(data:any){\r\n\t\tfor(let i in data){\r\n\t\t\tthis[i] = data[i]\r\n\t\t\tif(i == 'videoStatus'){\r\n\t\t\t\tconst camera = data[i] == 1\r\n\t\t\t\tlet message = {\r\n\t\t\t\t\tmethod: 'groupForward',\r\n\t\t\t\t\tparams: {\r\n\t\t\t\t\t\tkey: \"camera\",\r\n\t\t\t\t\t\tmethod: \"updateMode\",\r\n\t\t\t\t\t\tvalue: camera,\r\n\t\t\t\t\t\tparams: {\r\n\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t\tcamera,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsendMessage(message)\r\n\t\t\t\tsendMessage({\r\n\t\t\t\t\tmethod: 'groupForward',\r\n\t\t\t\t\tparams: {\r\n\t\t\t\t\t\tmethod: \"videoStop\",\r\n\t\t\t\t\t\tparams: {\r\n\t\t\t\t\t\t\tname,\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tthis.setVideo = function(){\r\n\t\tconst audio:any = document.getElementById('video' + name)\r\n\t\taudio.srcObject = null\r\n\t}\r\n\t//设置视频开启状态\r\n\tthis.setCamera = function(muteFlag:any){\r\n\t\tthis.videoStatus = muteFlag\r\n\t}\r\n\t//禁麦/开麦,或者打开关闭视频\r\n\tthis.setMuted = function(type:string){\r\n\t\tconst audio:any = document.getElementById('video' + name)\r\n\t\tconst stream = audio.srcObject\r\n\t\t\r\n\t\tlet isMuted = type == 'audio' ? this.muteStatus == 0 : this.videoStatus == 0\r\n\t\tstream.getTracks().forEach((track:any)=>{\r\n\t\t\tif(track.kind == type) track.enabled = isMuted\r\n\t\t})\r\n\t\tif(type == 'audio'){\r\n\t\t\tthis.muteStatus = !isMuted ? 0 : 1\r\n\t\t\tlet msgId = isMuted ? 'unmute' : 'mute'\r\n\t\t\tlet message = {\r\n\t\t\t\tmethod: msgId,\r\n\t\t\t\tparams: {\r\n\t\t\t\t\tsender: name\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsendMessage(message)\r\n\t\t}else{\r\n\t\t\tthis.videoStatus = !isMuted ? 0 : 1\r\n\t\t\tconst camera = this.videoStatus == 1\r\n\t\t\tlet message = {\r\n\t\t\t\tmethod: 'groupForward',\r\n\t\t\t\tparams: {\r\n\t\t\t\t\tkey: \"camera\",\r\n\t\t\t\t\tmethod: \"updateMode\",\r\n\t\t\t\t\tvalue: camera,\r\n\t\t\t\t\tparams: {\r\n\t\t\t\t\t\tname,\r\n\t\t\t\t\t\tcamera,\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsendMessage(message)\r\n\t\t}\r\n\t}\r\n\t//视频/音频可以加载完毕可以播放后监控声音画面\r\n\tthis.canPlay = async function (callback:any){\r\n\t\tif(this.checkeds){\r\n\t\t\treturn false\r\n\t\t}\r\n\t\tthis.checkeds = true\r\n\t\tthis.readyStatus = 1\r\n\t\tvar audio:any = document.getElementById('video' + name)\r\n\t\tvar stream = audio.srcObject\r\n\t\tvar isMuted = true\r\n\t\tvar videoMuted = true\r\n\t\tlet tracks = stream.getTracks()\r\n\t\tawait nextTick()\r\n\t\ttracks.forEach(async (track:any)=>{\r\n\t\t\tif(track.kind == 'audio' && track.enabled == true && track.muted == false){\r\n\t\t\t\tif(!muteFlag){\r\n\t\t\t\t\tisMuted = false\r\n\t\t\t\t\tthis.mkStatus = 1\r\n\t\t\t\t}\r\n\t\t\t}else if(track.kind == 'video' && track.enabled == true && track.muted == false){\r\n\t\t\t\tvideoMuted = false\r\n\t\t\t}else if(track.kind == 'video' && track.enabled == true){\r\n\t\t\t\tvideoMuted = false\r\n\t\t\t}\r\n\t\t})\r\n\t\tthis.muteStatus = isMuted ? 0 : 1\r\n\t\tthis.videoStatus = videoMuted ? 0 : 1\r\n\t\tif(!isMuted){\r\n\t\t\tif(typeof callback == 'function') callback(stream)\r\n\t\t}\r\n\t}\r\n}\r\n/**发送消息**/\r\nfunction sendMessage(message: any){\r\n\tif(store){\r\n\t\tstore.dispatch('websocketOptions/sendMessage', message)\r\n\t}\r\n}","import { reactive } from 'vue'\r\nimport { useWebSocket } from '@/websocket'\r\nimport { Participant } from '@/config/participant'\r\nimport kurentoUtils from 'kurento-utils'\r\nimport { nextTick } from 'vue'\r\nimport { ElMessage } from 'element-plus'\r\nimport { signalWsUri } from '@/request/api/index'\r\n\r\n/**iceservers**/\r\nconst iceservers={\n\t\"iceServers\":[\n\t\t{\n\t\t\turls:\"stun:1.14.19.123:3478\"\n\t\t},\n\t\t{\n\t\t\turls:[\"turn:1.14.19.123:3478\"],\n\t\t\tusername:\"admin\",\n\t\t\tcredential: \"admin\"\n\t\t}\n\t]\n}\r\n/**定义constraints类型**/\r\ninterface constraintsType{\r\n\taudio: boolean,\r\n\tvideo: any,\r\n}\r\n/**定义optionsType类型**/\r\ninterface optionsType{\r\n\tconfiguration: any,\r\n\tlocalVideo?: any,\r\n\tmediaConstraints?: any,\r\n\tonicecandidate?: any,\r\n\tvideoStream?: any,\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n\tstate: () => ({\r\n\t\t/**websocket数据**/\r\n\t\tws: null,\r\n\t\t/**当前房间号**/\r\n\t\troom: '',\r\n\t\t/**当前房间信息**/\r\n\t\troomInfo: {},\r\n\t\t/**流信息保存**/\r\n\t\tparticipants: {},\r\n\t\t/**当前选中摄像头全局保存**/\r\n\t\tdeviceFocus: 'desk',\r\n\t\t/**屏幕共享的peer**/\r\n\t\tdeskData: {},\r\n\t\t/**当前设备**/\r\n\t\tdevicesOn: {\r\n\t\t\tvideo: '',\r\n\t\t\taudio: '',\r\n\t\t\taudiooutput: '',\r\n\t\t\tgainNodeValue: 1,\r\n\t\t\tvolume: 1,\r\n\t\t},\r\n\t\t/**获取的媒体流**/\r\n\t\tstreams: {\r\n\t\t\tdata: null,\r\n\t\t\tvideoStatus: 1,\r\n\t\t\tmuteStatus: 1,\r\n\t\t},\r\n\t\toptions: {},\r\n\t\tisShaerd: false, //是否分享桌面过\r\n\t}),\r\n\tmutations: {\r\n\t\tsetIsShaerd(state:any, value:any){\r\n\t\t\tstate.isShaerd = value\r\n\t\t},\r\n\t\t/**保存媒体流**/\r\n\t\tsetOptions(state:any, value:any){\r\n\t\t\tstate.options = value\r\n\t\t},\r\n\t\t/**保存媒体流**/\r\n\t\tsetStreams(state:any, value:any){\r\n\t\t\tstate.streams = value\r\n\t\t},\r\n\t\t/**保存devicesOn**/\r\n\t\tsetDevicesOn(state:any, parmas:any){\r\n\t\t\tconst {keyName, data} = parmas\r\n\t\t\tstate.devicesOn[keyName] = data\r\n\t\t},\r\n\t\t/**屏幕共享的peer**/\r\n\t\tsetdeskData(state:any, value:any){\r\n\t\t\tstate.deskData = value\r\n\t\t},\r\n\t\t/**保存当前选中摄像头**/\r\n\t\tsetDeviceFocus(state:any, value:string){\r\n\t\t\tstate.deviceFocus = value\r\n\t\t},\r\n\t\t/**保存websocket数据**/\r\n\t\tsetWs(state:any, value:any){\r\n\t\t\tstate.ws = value\r\n\t\t},\r\n\t\t/**保存当前房间号**/\r\n\t\tsetRoomId(state:any, value:string | number){\r\n\t\t\tstate.room = value\r\n\t\t},\r\n\t\t/**保存当前房间信息**/\r\n\t\tsetRoomInfo(state:any, value:any){\r\n\t\t\tstate.roomInfo = value\r\n\t\t},\r\n\t\t/**保存流信息**/\r\n\t\tsetParticipant(state:any, value:any){\r\n\t\t\tif(Object.keys(value).length == 0){\r\n\t\t\t\tstate.participants = {}\r\n\t\t\t}else{\r\n\t\t\t\tstate.participants[value.name] = value\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**删除流**/\r\n\t\tdeleteParticipant(state:any, name: string){\r\n\t\t\tdelete state.participants[name]\r\n\t\t},\r\n\t},\r\n\tactions: {\r\n\t\t/**开始websocket连接**/\r\n\t\tasync webSocketStart({ commit, dispatch, state }:any, {onSuccess, onMicrophoneStatus, updateMode, onChat, onNewUser, onParticipantLeft, onRoomUsers, onUserLeave, onLiving, onClosed, videoStop}:any){\r\n\t\t\tconst { hostname, port, protocol } = location\r\n\t\t\tlet { streams } = state\r\n\t\t\tconst w = protocol == 'https:' ? 'wss' : 'ws'\r\n\t\t\tlet wsUri = `${w}://${hostname}:${port}/netty/groupcall`\r\n\t\t\tif(process.env.NODE_ENV === 'development') wsUri = `${w}://www.yunshihome.com/netty/groupcall`\r\n\t\t\tconst mode = await dispatch('setMode', streams)\r\n\t\t\t// const {code, data} = await signalWsUri()\r\n\t\t\t/**websocket连接存储**/\r\n\t\t\tlet ws = await useWebSocket({\r\n\t\t\t\twsUri: wsUri,\r\n\t\t\t\tonMessage: ({ data }:any) => {\r\n\t\t\t\t\tconst { method, params } = JSON.parse(data)\r\n\t\t\t\t\t// console.log(11,method)\r\n\t\t\t\t\t// console.log(22,params)\r\n\t\t\t\t\tswitch(method){\r\n\t\t\t\t\t\tcase 'existingParticipants' :\r\n\t\t\t\t\t\t\tconst { roomInfo: { url } } = state\r\n\t\t\t\t\t\t\tif(url == 'webcam') dispatch('onExistingParticipants', params)\r\n\t\t\t\t\t\t\tconst { dataObj } = params\r\n\t\t\t\t\t\t\tif(dataObj && dataObj.length && typeof onLiving == 'function') onLiving()\r\n\t\t\t\t\t\t\tdataObj?.forEach((d:any) => {\r\n\t\t\t\t\t\t\t\tdispatch('receiveAudio', d)\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'receiveVideoAnswer':\r\n\t\t\t\t\t\t\tdispatch('receiveVideoResponse', params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'iceCandidate':\r\n\t\t\t\t\t\t\tdispatch('onIceCandidate', params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'participantLeft':\r\n\t\t\t\t\t\t\tdispatch('onParticipantLeft', params)\r\n\t\t\t\t\t\t\tif(typeof onParticipantLeft == 'function') onParticipantLeft(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'newParticipantArrived':\r\n\t\t\t\t\t\t\tdispatch('receiveAudio', params)\r\n\t\t\t\t\t\t\tif(typeof onLiving == 'function') onLiving()\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'microphoneStatus':\r\n\t\t\t\t\t\t\tif(typeof onMicrophoneStatus == 'function') onMicrophoneStatus(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'updateMode':\r\n\t\t\t\t\t\t\tif(typeof updateMode == 'function') updateMode(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'chat':\r\n\t\t\t\t\t\t\tif(typeof onChat == 'function') onChat(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'newUser':\r\n\t\t\t\t\t\t\tif(typeof onNewUser == 'function') onNewUser(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'roomUsers':\r\n\t\t\t\t\t\t\tif(typeof onRoomUsers == 'function') onRoomUsers(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'userLeave':\r\n\t\t\t\t\t\t\tif(typeof onUserLeave == 'function') onUserLeave(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'videoStop':\r\n\t\t\t\t\t\tconsole.log(754)\r\n\t\t\t\t\t\t\tif(typeof videoStop == 'function') videoStop(params)\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tonClosed: () => {\r\n\t\t\t\t\tif(typeof onClosed == 'function') onClosed()\r\n\t\t\t\t},\r\n\t\t\t\tonSuccess: () => {\r\n\t\t\t\t\tif(typeof onSuccess == 'function') onSuccess(mode)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tcommit('setWs', ws)\r\n\t\t},\r\n\t\tasync setMode({dispatch}:any, streams:any){\r\n\t\t\tlet mode = 'video-and-audio'\r\n\t\t\tlet videoStream = null\r\n\t\t\tlet audioStream = null\r\n\t\t\tif(streams && streams.data){\r\n\t\t\t\tconst {muteStatus, videoStatus} = streams\r\n\t\t\t\tvideoStream = videoStatus == 1\r\n\t\t\t\taudioStream = muteStatus == 1\r\n\t\t\t}else{\r\n\t\t\t\ttry {\r\n\t\t\t\t\tvideoStream = await dispatch('getDevicesInfo', {video: true})\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.log('videoStream fail:', error)\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\taudioStream = await dispatch('getDevicesInfo', {audio: true})\r\n\t\t\t\t} catch (error) {\r\n\t\t\t\t\tconsole.log('audioStream fail:', error)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(!videoStream && !audioStream){\r\n\t\t\t\tmode = 'none'\r\n\t\t\t}else if(videoStream && !audioStream){\r\n\t\t\t\tmode = 'video-only'\r\n\t\t\t}else if(!videoStream && audioStream){\r\n\t\t\t\tmode = 'audio-only'\r\n\t\t\t}\r\n\t\t\treturn mode\r\n\t\t},\r\n\t\t/**离开房间**/\r\n\t\tasync leaveRoom({ commit, dispatch, state }:any, params:any){\r\n\t\t\tconst { participants } = state\r\n\t\t\tdispatch('sendMessage', {method: 'leaveRoom'})\r\n\t\t\tfor( let key in participants){\r\n\t\t\t\tparticipants[key].dispose()\r\n\t\t\t}\r\n\t\t\tawait nextTick()\r\n\t\t\tcommit('setParticipant', {})\r\n\t\t\tcommit('setRoomInfo', {})\r\n\t\t},\r\n\t\t/**有主讲离开房间**/\r\n\t\tonParticipantLeft({ commit, dispatch, state }:any, params:any){\r\n\t\t\tconst { name } = params\r\n\t\t\tlet participant = state.participants[name]\r\n\t\t\tif(participant){\r\n\t\t\t\tparticipant.dispose()\r\n\t\t\t}\r\n\t\t\tcommit('deleteParticipant', name)\r\n\t\t},\r\n\t\t/**onIceCandidate**/\r\n\t\tonIceCandidate({ commit, dispatch, state }:any, params:any){\r\n\t\t\tconst { participants } = state\r\n\t\t\tparticipants[params.name].rtcPeer.addIceCandidate(params.candidate, function (error: any) {\r\n\t\t\t\tif (error) {\r\n\t\t\t\t\treturn console.log(\"Error adding candidate: \", error);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t\t/**receiveVideoResponse**/\r\n\t\treceiveVideoResponse({ commit, dispatch, state }:any, params:any){\r\n\t\t\tconst { participants, roomInfo } = state\r\n\t\t\tconst {name} = params\r\n\t\t\tconst {rtcPeer, mode} = participants[name]\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tlet stream = rtcPeer.peerConnection.getRemoteStreams()\r\n\t\t\t\tif(stream && name != roomInfo.name) dispatch('setStream', {name, mode, stream})\r\n\t\t\t}, 1000)\r\n\t\t\tparticipants[params.name].rtcPeer.processAnswer(params.sdpAnswer, function (error: any) {\r\n\t\t\t\tif (error) return console.log(error);\r\n\t\t\t});\r\n\t\t},\r\n\t\tsetStream({ commit, state }:any, {name, mode, stream}:any){\r\n\t\t\tif(stream) stream = stream[0]\r\n\t\t\tlet mediaStream:any = null\r\n\t\t\tif(mode == 'audio-only'){\r\n\t\t\t\tmediaStream = new MediaStream()\r\n\t\t\t\tstream.getTracks().forEach((track:any) => {\r\n\t\t\t\t\tconst {kind, enabled, muted} = track\r\n\t\t\t\t\tif(kind == 'audio') mediaStream.addTrack(track)\r\n\t\t\t\t})\r\n\t\t\t\tlet video:any = document.getElementById('video' + name)\r\n\t\t\t\tvideo.srcObject = mediaStream\r\n\t\t\t}else{\r\n\t\t\t\t// mediaStream = stream\r\n\t\t\t\t// let mediaStream = new MediaStream()\r\n\t\t\t\t// stream.getTracks().forEach((track:any) => {\r\n\t\t\t\t// \tconst {kind, enabled, muted} = track\r\n\t\t\t\t// \tif(kind == 'audio') mediaStream.addTrack(track)\r\n\t\t\t\t// })\r\n\t\t\t\t// let video:any = document.getElementById('video' + name)\r\n\t\t\t\t// video.srcObject = mediaStream\r\n\t\t\t\t// console.log(787878)\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**延迟几秒继续向下执行代码**/\r\n\t\tsetTimeoutFun({}, time: number){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tresolve()\r\n\t\t\t\t}, time)\r\n\t\t\t})\r\n\t\t},\r\n\t\t/**receiveAudio**/\r\n\t\tasync receiveAudio({ commit, dispatch, state }:any, params:any){\r\n\t\t\tconst { name: sender, mode, muteFlag, camera } = params\r\n\t\t\tlet participant = reactive(new (Participant as any)(`${sender}`, camera, muteFlag, mode))\r\n\t\t\tcommit('setParticipant', participant)\r\n\t\t\tinterface constraintst{\r\n\t\t\t\taudio: any | true,\r\n\t\t\t\tvideo: any | true,\r\n\t\t\t}\r\n\t\t\tlet constraints : constraintst = {\r\n\t\t\t\taudio : true,\r\n\t\t\t\tvideo: {\r\n\t\t\t\t\twidth:{\r\n\t\t\t\t\t\tmax: document.documentElement.clientWidth\r\n\t\t\t\t\t},\r\n\t\t\t\t\theight: document.documentElement.clientHeight,\r\n\t\t\t\t\tframeRate: 30\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (mode == 'video-only') {\r\n\t\t\t\tconstraints.audio = false;\r\n\t\t\t} else if (mode == 'audio-only') {\r\n\t\t\t\tconstraints.video = false;\r\n\t\t\t}\r\n\t\t\tawait nextTick()\r\n\t\t\tlet video = document.getElementById('video' + sender)\r\n\t\t\tlet options = {\r\n\t\t\t\tconfiguration: iceservers,\r\n\t\t\t\tremoteVideo: video,\r\n\t\t\t\tmediaConstraints : constraints,\r\n\t\t\t\tonaddstream: participant.onaddstream.bind(participant),\r\n\t\t\t\tonicecandidate: participant.onIceCandidate.bind(participant)\r\n\t\t\t}\r\n\t\t\tparticipant.rtcPeer = new (kurentoUtils as any).WebRtcPeer.WebRtcPeerRecvonly(options, function(error:any) {\r\n\t\t\t\tif (error) return console.log(error)\r\n\t\t\t\tparticipant.rtcPeer.generateOffer(participant.offerToReceiveVideo.bind(participant))\r\n\t\t\t})\r\n\t\t},\r\n\t\t/**onExistingParticipants**/\r\n\t\tasync onExistingParticipants({ commit, dispatch, state }:any, params:any){\r\n\t\t\tlet { roomInfo: { mode, url, name }, streams } = state\r\n\t\t\tlet constraints: constraintsType = {\r\n\t\t\t\taudio : true,\r\n\t\t\t\tvideo: {\r\n\t\t\t\t\twidth:{\r\n\t\t\t\t\t\tmax: document.documentElement.clientWidth\r\n\t\t\t\t\t},\r\n\t\t\t\t\theight: document.documentElement.clientHeight,\r\n\t\t\t\t\tframeRate: 30\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (mode == 'video-only') {\r\n\t\t\t\tconstraints.audio = false;\r\n\t\t\t} else if (mode == 'audio-only') {\r\n\t\t\t\tconstraints.video = false;\r\n\t\t\t}\r\n\t\t\tlet options: optionsType = {\r\n\t\t\t\tconfiguration: iceservers,\r\n\t\t\t\t// localVideo: video,\r\n\t\t\t\tmediaConstraints: constraints,\r\n\t\t\t\t// onicecandidate: participant.onIceCandidate.bind(participant)\r\n\t\t\t}\r\n\t\t\t// switch(state.deviceFocus){\r\n\t\t\t// \tcase 'desk':\r\n\t\t\t// \t\ttry{\r\n\t\t\t// \t\t\tlet stream = await dispatch('getStream')\r\n\t\t\t// \t\t\toptions.videoStream = stream\r\n\t\t\t// \t\t}catch (error) {\r\n\t\t\t// \t\t\tconsole.log(error)\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\tbreak;\r\n\t\t\t// \tdefault:\r\n\t\t\t// \t\tif(options.mediaConstraints.video && state.deviceFocus){\r\n\t\t\t// \t\t\toptions.mediaConstraints.video = { deviceId: { exact: state.deviceFocus }}\r\n\t\t\t// \t\t}\r\n\t\t\t// \t\tbreak;\r\n\t\t\t// }\r\n\t\t\tlet camera = true\r\n\t\t\tlet muteFlag = false\r\n\t\t\tlet readyStatus = 0\r\n\t\t\tlet message = {\r\n\t\t\t\tmethod: 'mute',\r\n\t\t\t\tparams: {\r\n\t\t\t\t\tsender: name\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet message2 = {\r\n\t\t\t\tmethod: 'groupForward',\r\n\t\t\t\tparams: {\r\n\t\t\t\t\tkey: \"camera\",\r\n\t\t\t\t\tmethod: \"updateMode\",\r\n\t\t\t\t\tvalue: false,\r\n\t\t\t\t\tparams: {\r\n\t\t\t\t\t\tname,\r\n\t\t\t\t\t\tcamera: false,\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(streams && streams.data){\r\n\t\t\t\tconst {data, videoStatus, muteStatus} = streams\r\n\t\t\t\toptions.videoStream = data\r\n\t\t\t\tif(videoStatus == 0){\r\n\t\t\t\t\tcamera = false\r\n\t\t\t\t\treadyStatus = -1\r\n\t\t\t\t\tdispatch('sendMessage', message2)\r\n\t\t\t\t}\r\n\t\t\t\tif(muteStatus == 0){\r\n\t\t\t\t\tmuteFlag = true\r\n\t\t\t\t\tdispatch('sendMessage', message)\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tlet videoStream = null\r\n\t\t\t\tlet audioStream = null\r\n\t\t\t\ttry{\r\n\t\t\t\t\tvideoStream = await dispatch('getDevicesInfo', {video: true})\r\n\t\t\t\t}catch(e){\r\n\t\t\t\t\tcamera = false\r\n\t\t\t\t\tdispatch('sendMessage', message2)\r\n\t\t\t\t\tconsole.log(e)\r\n\t\t\t\t}\r\n\t\t\t\ttry{\r\n\t\t\t\t\taudioStream = await dispatch('getDevicesInfo', {audio: true})\r\n\t\t\t\t}catch(e){\r\n\t\t\t\t\tmuteFlag = true\r\n\t\t\t\t\tdispatch('sendMessage', message)\r\n\t\t\t\t\tconsole.log(e)\r\n\t\t\t\t}\r\n\t\t\t\tif(videoStream && audioStream){\r\n\t\t\t\t\tvideoStream.addTrack(audioStream.getAudioTracks()[0])\r\n\t\t\t\t\toptions.videoStream = videoStream\r\n\t\t\t\t}else if(!videoStream && audioStream){\r\n\t\t\t\t\tvideoStream = audioStream\r\n\t\t\t\t\t// readyStatus = -1\r\n\t\t\t\t}\r\n\t\t\t\t// if(videoStream){\r\n\t\t\t\t// \toptions.videoStream = videoStream\r\n\t\t\t\t// }else{\r\n\t\t\t\t// \treadyStatus = -1\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t\tlet participant = reactive(new (Participant as any)(name, camera, muteFlag, mode, readyStatus ))\r\n\t\t\t// participant.mode = mode\r\n\t\t\tcommit('setParticipant', participant)\r\n\t\t\tawait nextTick()\r\n\t\t\t/**延迟1秒再往下执行,防止video标签获取不到**/\r\n\t\t\tlet video = document.getElementById('video' + name)\r\n\t\t\toptions.localVideo = video\r\n\t\t\toptions.onicecandidate = participant.onIceCandidate.bind(participant)\r\n\t\t\tcommit('setOptions', options)\r\n\t\t\tparticipant.rtcPeer = new (kurentoUtils as any).WebRtcPeer.WebRtcPeerSendonly(options, function(error:any) {\r\n\t\t\t\tif (error){\r\n\t\t\t\t\tparticipant.getError()\r\n\t\t\t\t\t// ElMessage.error(String(error))\r\n\t\t\t\t\treturn console.log(error)\r\n\t\t\t\t}\r\n\t\t\t\tparticipant.rtcPeer.generateOffer(participant.offerToReceiveVideo.bind(participant))\r\n\t\t\t})\r\n\t\t\t// commit('setParticipant', participant)\r\n\t\t},\r\n\t\t/**共享屏幕**/\r\n\t\tshareDesk({ commit, dispatch, state }:any){\r\n\t\t\tconst { roomInfo: { name } } = state\r\n\t\t\tconst participant = state.participants[name]\r\n\t\t\tnavigator.mediaDevices.getDisplayMedia({video: true}).then(async(stream) => {\r\n\t\t\t\tdispatch('replaceVideoTrack', stream)\r\n\t\t\t\t// await nextTick()\r\n\t\t\t\t// dispatch('addAudioTrack', stream)\r\n\t\t\t\tstream.getVideoTracks()[0].onended = ()=>{\r\n\t\t\t\t\tdispatch('endDesk')\r\n\t\t\t\t}\r\n\t\t\t\tcommit('setdeskData', {name})\r\n\t\t\t\tif(participant.videoStatus == 0){\r\n\t\t\t\t\tparticipant.setMuted('video')\r\n\t\t\t\t}\r\n\t\t\t}).catch(error => {\r\n\t\t\t\tconsole.log('error', error)\r\n\t\t\t})\r\n\t\t},\r\n\t\t/**共享屏幕(没有摄像头麦克风推流)**/\r\n\t\tshareDesk2({ commit, dispatch, state }:any){\r\n\t\t\tlet { roomInfo: { name }, participants, options, isShaerd } = state\r\n\t\t\tconst participant = state.participants[name]\r\n\t\t\tnavigator.mediaDevices.getDisplayMedia({video: true}).then(async(stream) => {\r\n\t\t\t\tcommit('setdeskData', {name})\r\n\t\t\t\tif(isShaerd){\r\n\t\t\t\t\tlet video:any = document.getElementById(`video${name}`)\r\n\t\t\t\t\tlet oldStream = video.srcObject\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst newVideoTrack = stream.getVideoTracks()[0]\r\n\t\t\t\t\tparticipant.rtcPeer.peerConnection.addTrack(newVideoTrack, stream)\r\n\t\t\t\t\toldStream = stream\r\n\t\t\t\t\tvideo.srcObject = stream\r\n\t\t\t\t}else{\r\n\t\t\t\t\toptions.videoStream = stream\r\n\t\t\t\t\tcommit('setIsShaerd', true)\r\n\t\t\t\t\tparticipant.rtcPeer = new (kurentoUtils as any).WebRtcPeer.WebRtcPeerSendonly(options, function(error:any) {\r\n\t\t\t\t\t\tif (error){\r\n\t\t\t\t\t\t\tparticipant.getError()\r\n\t\t\t\t\t\t\t// ElMessage.error(String(error))\r\n\t\t\t\t\t\t\treturn console.log(error)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tparticipant.rtcPeer.generateOffer(participant.offerToReceiveVideo.bind(participant))\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}).catch(error => {\r\n\t\t\t\tconsole.log('error', error)\r\n\t\t\t})\r\n\t\t},\r\n\t\t/**结束桌面共享**/\r\n\t\tendDesk({ commit, state, dispatch }:any){\r\n\t\t\tlet { roomInfo: { name }, participants } = state\r\n\t\t\tconst participant = state.participants[name]\r\n\t\t\tif(participant.cameraStatus == 1){\r\n\t\t\t\tnavigator.mediaDevices.getUserMedia({ audio: true, video: true }).then((stream) => {\r\n\t\t\t\t\tdispatch('replaceVideoTrack', stream)\r\n\t\t\t\t\tcommit('setdeskData', {})\r\n\t\t\t\t}).catch(error => {\r\n\t\t\t\t\tconsole.log('error', error)\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tlet video:any = document.getElementById(`video${name}`)\r\n\t\t\t\tlet oldStream = video.srcObject\r\n\t\t\t\tlet tracks = oldStream.getVideoTracks()\r\n\t\t\t\toldStream.getTracks().forEach((track:any) => {\r\n\t\t\t\t\tif(track.kind == 'video') track.stop()\r\n\t\t\t\t})\r\n\t\t\t\tif(tracks.length) oldStream.removeTrack(oldStream.getVideoTracks()[0])\r\n\t\t\t\tconst senders = participant.rtcPeer.peerConnection.getSenders()\r\n\t\t\t\tsenders.forEach((sender:any) => {\r\n\t\t\t\t if (sender.track.kind === 'video') {\r\n\t\t\t\t sender.track.stop(); // 停止当前视频轨\r\n\t\t\t\t participant.rtcPeer.peerConnection.removeTrack(sender); // 移除发送器中的当前视频轨\r\n\t\t\t\t }\r\n\t\t\t\t});\r\n\t\t\t\tparticipant.setPara({readyStatus: -1, videoStatus: 0})\r\n\t\t\t\tcommit('setdeskData', {})\r\n\t\t\t\tparticipant.checkeds = false\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**修改推送的视频流**/\r\n\t\treplaceVideoTrack({ commit, dispatch, state }:any, stream:any){\r\n\t\t\tconst { roomInfo: { name }, participants } = state\r\n\t\t\tconst {rtcPeer} = participants[name]\r\n\t\t\tlet video:any = document.getElementById(`video${name}`)\r\n\t\t\tlet oldStream = video.srcObject\r\n\t\t\tlet newVideoTrack = stream.getVideoTracks()[0]\r\n\t\t\tlet tracks = oldStream.getVideoTracks()\r\n\t\t\toldStream.getTracks().forEach((track:any) => {\r\n\t\t\t\tif(track.kind == 'video') track.stop()\r\n\t\t\t})\r\n\t\t\tif(tracks.length) oldStream.removeTrack(oldStream.getVideoTracks()[0])\r\n\t\t\toldStream.addTrack(newVideoTrack)\r\n\t\t\tvideo.srcObject = oldStream\r\n\t\t\tlet sender = rtcPeer.peerConnection.getSenders()[1]\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.replaceTrack(newVideoTrack)\r\n\t\t\t}else{\r\n\t\t\t\trtcPeer.peerConnection.addTrack(newVideoTrack,oldStream)\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**添加音频流**/\r\n\t\taddAudioTrack({ commit, dispatch, state }:any, stream:any){\r\n\t\t\tconst { roomInfo: { name }, participants } = state\r\n\t\t\tconst {rtcPeer} = participants[name]\r\n\t\t\tlet video:any = document.getElementById(`video${name}`)\r\n\t\t\tlet oldStream = video.srcObject\r\n\t\t\tlet newVideoTrack = stream.getAudioTracks()[0]\r\n\t\t\toldStream.addTrack(newVideoTrack)\r\n\t\t\tvideo.srcObject = oldStream\r\n\t\t\tlet sender = rtcPeer.peerConnection\r\n\t\t\tsender.addTrack(newVideoTrack, oldStream)\r\n\t\t},\r\n\t\t/**修改推送的音频流**/\r\n\t\treplaceAudioTrack({ commit, dispatch, state }:any, stream:any){\r\n\t\t\tconst { roomInfo: { name }, participants } = state\r\n\t\t\tconst {rtcPeer} = participants[name]\r\n\t\t\tlet video:any = document.getElementById(`video${name}`)\r\n\t\t\tlet oldStream = video.srcObject\r\n\t\t\tlet newVideoTrack = stream.getAudioTracks()[0]\r\n\t\t\toldStream.getTracks().forEach((track:any) => {\r\n\t\t\t\tif(track.kind == 'audio') track.stop()\r\n\t\t\t})\r\n\t\t\toldStream.removeTrack(oldStream.getAudioTracks()[0])\r\n\t\t\t// oldStream.addTrack(newVideoTrack)\r\n\t\t\tvideo.srcObject = oldStream\r\n\t\t\tlet sender = rtcPeer.peerConnection.getSenders()[1]\r\n\t\t\tsender.replaceTrack(newVideoTrack)\r\n\t\t\t\r\n\t\t},\r\n\t\tasync closeWs({ commit, state }:any){\r\n\t\t\tconst { ws } = state\r\n\t\t\tif(ws && ws.readyState == ws.OPEN){\r\n\t\t\t\tws.close()\r\n\t\t\t}\r\n\t\t\tawait nextTick()\r\n\t\t\tcommit('setWs', null)\r\n\t\t},\r\n\t\t/**获取分享桌面权限和添加音轨**/\r\n\t\tgetStream(){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tnavigator.mediaDevices.getDisplayMedia({video: true,audio: false}).then((stream) => {\r\n\t\t\t\t navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then((audioStream) => {\r\n\t\t\t\t\t\tstream.addTrack(audioStream.getAudioTracks()[0])\r\n\t\t\t\t\t\tresolve(stream)\r\n\t\t\t\t }).catch(error => {\r\n\t\t\t\t\t\treject(error)\r\n\t\t\t\t\t});\r\n\t\t\t\t}).catch(error => {\r\n\t\t\t\t\treject(error)\r\n\t\t\t\t});\r\n\t\t\t})\r\n\t\t},\r\n\t\t/**websocket发送消息**/\r\n\t\tsendMessage({ commit, dispatch, state }:any, message:any){\r\n\t\t\tconst { ws } = state\r\n\t\t\tlet Msg = JSON.stringify(message)\r\n\t\t\tif(ws && ws.readyState == ws.OPEN){\r\n\t\t\t\tws.send(Msg)\r\n\t\t\t\tconst { method, params } = message\r\n\t\t\t\tif(method == 'joinRoom') commit('setRoomInfo', params)\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**获取本地媒体设备**/\r\n\t\tgetDevicesInfo({ }:any, constraints:any){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t// function success(stream:any){\r\n\t\t\t\t// \tresolve(stream)\r\n\t\t\t\t// }\r\n\t\t\t\t// function error(error:any){\r\n\t\t\t\t// \treject(error)\r\n\t\t\t\t// }\r\n\t\t\t\t// if (navigator.mediaDevices.getUserMedia) {\r\n\t\t\t\t// \t//最新的标准API\r\n\t\t\t\t// \tnavigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);\r\n\t\t\t\t// } else if (typeof navigator.webkitGetUserMedia == 'function') {\r\n\t\t\t\t// \t//webkit核心浏览器\r\n\t\t\t\t// \tnavigator.webkitGetUserMedia(constraints, success, error)\r\n\t\t\t\t// } else if (typeof navigator.mozGetUserMedia == 'function') {\r\n\t\t\t\t// \t//firfox浏览器\r\n\t\t\t\t// \tnavigator.mozGetUserMedia(constraints, success, error);\r\n\t\t\t\t// } else if (typeof navigator.getUserMedia == 'function') {\r\n\t\t\t\t// \t//旧版API\r\n\t\t\t\t// \tnavigator.getUserMedia(constraints, success, error);\r\n\t\t\t\t// }\r\n\t\t\t\tnavigator.mediaDevices.getUserMedia(constraints).then((stream) => {\r\n\t\t\t\t\tresolve(stream)\r\n\t\t\t\t}).catch(error => {\r\n\t\t\t\t\treject(error)\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t},\r\n\t\t/**停止流**/\r\n\t\tstopStream({ }:any, {stream, type}:any){\r\n\t\t\treturn new Promise((resolve) => {\r\n\t\t\t\tstream.getTracks().forEach((track:any) => {\r\n\t\t\t\t\tif(!type || track.kind == type) track.stop()\r\n\t\t\t\t})\r\n\t\t\t\tif(type == 'audio'){\r\n\t\t\t\t\tstream.removeTrack(stream.getAudioTracks()[0])\r\n\t\t\t\t}else if(type == 'video'){\r\n\t\t\t\t\tstream.removeTrack(stream.getVideoTracks()[0])\r\n\t\t\t\t}\r\n\t\t\t\tresolve(stream)\r\n\t\t\t})\r\n\t\t},\r\n\t}\r\n}","import { localGet } from '@/config/storage'\r\nexport default {\r\n namespaced: true,\r\n\tstate: () => ({\r\n\t\t/**用户数据**/\r\n\t\tmeetingData: localGet('meetingData') || JSON.stringify({}),\r\n\t\tlivingData: localGet('livingData') || JSON.stringify({}),\r\n\t\tcompanyData: {\r\n\t\t\tname: '厦门云视听信息技术有限公司',\r\n\t\t\taddress: '福建省厦门市湖里区湖里大道43号405室之2',\r\n\t\t\temail: '125388771@qq.com',\r\n\t\t\tphone: '18150151002',\r\n\t\t\tqq: '125388771',\r\n\t\t}\r\n\t}),\r\n\tmutations: {\r\n\t\t/**保存当前选中摄像头**/\r\n\t\tsetMeetingData(state:any, value:any){\r\n\t\t\tstate.meetingData = value\r\n\t\t},\r\n\t\tsetLivingDataa(state:any, value:any){\r\n\t\t\tstate.livingData = value\r\n\t\t},\r\n\t},\r\n\tactions: {\r\n\t\t\r\n\t}\r\n}","import { createStore } from 'vuex'\r\nimport websocketOptions from '@/store/public/websocket'\nimport publicOptions from '@/store/public/public'\n\nexport default createStore({\n\tstate: {\n\t},\n\tgetters: {\n\t},\n\tmutations: {\n\t},\n\tactions: {\n\t},\n\tmodules: {\r\n\t\twebsocketOptions,\r\n\t\tpublicOptions,\n\t}\n})\n","import ElementPlus from 'element-plus'\r\nimport 'element-plus/dist/index.css'\n \nexport default (app:any) => {\n app.use(ElementPlus)\n app._context.components.ElDialog.props.closeOnClickModal.default = false\n app._context.components.ElDialog.props.closeOnPressEscape.default = false\n app._context.components.ElDrawer.props.closeOnClickModal.default = false\n app._context.components.ElDrawer.props.closeOnPressEscape.default = false\n}","import { createApp } from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport store from './store'\r\nimport installElementPlus from './config/element'\n\r\nimport '@/assets/font/iconfont.css'\r\nimport '@/assets/font_cai/iconfont.css'\r\nimport '@/assets/css/app/style.scss'\r\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\r\n\r\nimport VueBMap, {initBMapApiLoader} from 'vue-bmap-gl'\r\nimport 'vue-bmap-gl/dist/style.css'\r\n\r\nconst app = createApp(App)\r\nfor (const [key, component] of Object.entries(ElementPlusIconsVue)) {\n app.component(key, component)\n}\r\napp.config.globalProperties.$filters = {\r\n\tformatTime(value:any) {\r\n\t\tif(!value){\r\n\t\t\treturn '00:00:00'\r\n\t\t}else{\r\n\t\t\tlet hour = this.numFromat(parseInt((value / 3600).toString()))\r\n\t\t\tlet hourYu = this.numFromat(value % 3600)\r\n\t\t\tlet min = this.numFromat(parseInt((hourYu / 60).toString()))\r\n\t\t\tlet sec = this.numFromat(hourYu % 60)\r\n\t\t\treturn hour + ':' + min + ':' + sec\r\n\t\t}\r\n\t},\r\n\tnumFromat(value:number){\r\n\t\treturn value >= 10 ? value : '0' + value\r\n\t},\r\n\tnameFromat(value:string){\r\n\t\treturn value.split(' ')\r\n\t}\r\n}\r\ninstallElementPlus(app)\r\n\r\ninitBMapApiLoader({\r\n ak: 'sWVzBQ8S13r7sBpUf3vKzK88sFsGmdpf',\r\n v: '1.1',\r\n})\r\n\r\napp.use(store).use(router).use(VueBMap).mount('#app')\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + chunkId + \".\" + {\"8\":\"f67355cf\",\"44\":\"71137323\",\"118\":\"24d45ba7\",\"183\":\"07b13cc6\",\"249\":\"1d84c3ff\",\"278\":\"ddff653c\",\"301\":\"31db23c6\",\"304\":\"a5cb7b61\",\"514\":\"0290f0a4\",\"517\":\"4620a054\",\"518\":\"a6474200\",\"519\":\"826fe8db\",\"608\":\"319b25e8\",\"731\":\"4e18350b\",\"809\":\"c2efc55b\",\"820\":\"5bac31a8\",\"840\":\"d5544bba\",\"891\":\"f0e6ed8d\",\"908\":\"89941c3b\",\"912\":\"5544f20a\",\"949\":\"06657043\",\"985\":\"0623ad69\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + chunkId + \".\" + {\"8\":\"50377685\",\"44\":\"9419b791\",\"118\":\"8ef6ff27\",\"183\":\"471554df\",\"249\":\"49ef4cd5\",\"278\":\"4ec0e83f\",\"301\":\"2f1a6fb0\",\"304\":\"29fa7768\",\"514\":\"995f9832\",\"517\":\"b72931c6\",\"518\":\"1f23c4de\",\"519\":\"6ccddd5e\",\"731\":\"8ccce7c3\",\"809\":\"93f52979\",\"840\":\"0ceb203e\",\"908\":\"cda10d52\",\"949\":\"fc904fe3\",\"985\":\"bfa5290e\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"yunshihome:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t826: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"8\":1,\"44\":1,\"118\":1,\"183\":1,\"249\":1,\"278\":1,\"301\":1,\"304\":1,\"514\":1,\"517\":1,\"518\":1,\"519\":1,\"731\":1,\"809\":1,\"840\":1,\"908\":1,\"949\":1,\"985\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t826: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkyunshihome\"] = self[\"webpackChunkyunshihome\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(9370); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["localSet","name","value","localStorage","setItem","localGet","getItem","_createBlock","_component_router_view","script","__exports__","render","routes","path","component","children","meta","moudule","props","shadow","router","createRouter","history","createWebHashHistory","useWebSocket","wsUri","onMessage","onClosed","onSuccess","ws","timeouts","timeoutObj","serverTimeoutObj","bindWsEvent","addEventListener","type","console","log","heartCheck","start","clearTimeout","res","init","createWebSocket","WebSocket","e","timeout","severTimeout","_this","this","setTimeout","send","JSON","stringify","method","close","Participant","camera","muteFlag","mode","readyStatus","videoWidth","videoHeight","muteStatus","videoStatus","mkStatus","cameraStatus","checkeds","onIceCandidate","candidate","wp","message","params","sendMessage","offerToReceiveVideo","error","offerSdp","sender","sdpOffer","onaddstream","Object","defineProperty","writable","dispose","rtcPeer","getError","message2","key","setMute","setPara","data","i","setVideo","audio","document","getElementById","srcObject","setCamera","setMuted","stream","isMuted","getTracks","forEach","track","kind","enabled","msgId","canPlay","async","callback","videoMuted","tracks","nextTick","muted","store","dispatch","iceservers","urls","username","credential","namespaced","state","room","roomInfo","participants","deviceFocus","deskData","devicesOn","video","audiooutput","gainNodeValue","volume","streams","options","isShaerd","mutations","setIsShaerd","setOptions","setStreams","setDevicesOn","parmas","keyName","setdeskData","setDeviceFocus","setWs","setRoomId","setRoomInfo","setParticipant","keys","length","deleteParticipant","actions","commit","onMicrophoneStatus","updateMode","onChat","onNewUser","onParticipantLeft","onRoomUsers","onUserLeave","onLiving","videoStop","hostname","port","protocol","location","w","parse","url","dataObj","d","videoStream","audioStream","participant","addIceCandidate","receiveVideoResponse","peerConnection","getRemoteStreams","processAnswer","sdpAnswer","setStream","mediaStream","MediaStream","addTrack","setTimeoutFun","time","Promise","resolve","reject","reactive","constraints","width","max","documentElement","clientWidth","height","clientHeight","frameRate","configuration","remoteVideo","mediaConstraints","bind","onicecandidate","kurentoUtils","generateOffer","getAudioTracks","localVideo","shareDesk","navigator","mediaDevices","getDisplayMedia","then","getVideoTracks","onended","catch","shareDesk2","oldStream","newVideoTrack","endDesk","getUserMedia","stop","removeTrack","senders","getSenders","replaceVideoTrack","replaceTrack","addAudioTrack","replaceAudioTrack","readyState","OPEN","getStream","Msg","getDevicesInfo","stopStream","meetingData","livingData","companyData","address","email","phone","qq","setMeetingData","setLivingDataa","createStore","getters","modules","websocketOptions","publicOptions","app","use","ElementPlus","_context","components","ElDialog","closeOnClickModal","default","closeOnPressEscape","ElDrawer","createApp","App","entries","ElementPlusIconsVue","config","globalProperties","$filters","formatTime","hour","numFromat","parseInt","toString","hourYu","min","sec","nameFromat","split","installElementPlus","initBMapApiLoader","ak","v","VueBMap","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","amdO","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","splice","r","n","getter","__esModule","a","definition","o","enumerable","get","f","chunkId","all","reduce","promises","u","miniCssF","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","inProgress","dataWebpackPrefix","l","done","push","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","doneFns","parentNode","removeChild","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","createStylesheet","fullhref","linkTag","rel","onLinkComplete","errorType","realHref","href","err","Error","code","request","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}