UNPKG

@jp-web/ts-sdk

Version:

视频客服,视频会议Web端及微信小程序端SDK

260 lines (241 loc) 9.53 kB
var environmentAddressInput = document.getElementById('environment-address'); var appKeyInput = document.getElementById('appKey'); var clientListInfo = document.getElementById('client-list'); var callConAllBtn = document.getElementById('call-all'); var termConAllBtn = document.getElementById('term-all'); var openLocalStreamBtn = document.getElementById('open-local-stream'); var openRemoteStreamBtn = document.getElementById('open-remote-stream'); var clientCountInput = document.getElementById('client-count'); var groupNumberInput = document.getElementById('group-number'); var {JuphoonRTCGuest, Reporter, LoggerLevel, GuestEventType} = JuphoonRTCGuestSDK; var videoLayout, recorder, socketState, tokenList = [], clientList = [], roomNumList = [], getTokenList = [], clientCount, groupNumber; //将config.js中设置的环境配入 environmentAddressInput.value = publicConfig.webacdEnvironment; appKeyInput.value = publicConfig.appKey; Reporter.setLogLevel(LoggerLevel.DEBUG); JuphoonRTCGuest.setConfig({address: environmentAddressInput.value}); //获取token function getToken() { clientCount = parseInt(clientCountInput.value); groupNumber = groupNumberInput.value; const memberCount = clientCount; for (var i = 0; i < memberCount; i++) { var getToken = JuphoonRTCGuest.getToken() .then(_token => { tokenList.push(_token); }) .catch(reason => { console.error(reason); }) getTokenList.push(getToken); } Promise.all(getTokenList).then(() => { createClients(); }).catch((error) => { console.error(error); }); } //创建client function createClients() { for (let i = 0; i < tokenList.length; i++) { JuphoonRTCGuest.config.socket = null; const client = JuphoonRTCGuest.createGuestClient(appKeyInput.value, tokenList[i]); client.login() .then(() => { for (let i in clientList) { //按钮都变得可以操作 document.getElementById(`call-con[${i}]`).disabled = false; document.getElementById(`term-con[${i}]`).disabled = false; document.getElementById(`local-stream-btn[${i}]`).disabled = false; document.getElementById(`remote-stream-btn[${i}]`).disabled = false; callConAllBtn.disabled = termConAllBtn.disabled = openLocalStreamBtn.disabled = openRemoteStreamBtn.disabled = false; } }); client.addEventListener(GuestEventType.CALL_STATE_CHANGE, (ev) => { console.log(ev); setSocketState(i); document.getElementById(`username[${i}]`).innerHTML = client.clientInfo.username; document.getElementById(`client-state[${i}]`).innerHTML = client._state; document.getElementById(`socket-state[${i}]`).innerHTML = socketState; }); client.addEventListener(GuestEventType.LOGIN, (ev) => { console.log(ev, client); document.getElementById(`client-state[${i}]`).innerHTML = client._state; }); clientList.push(client); setSocketState(i); clientListInfo.innerHTML += `<li> <b>username: </b><span id="username[${i}]">null</span> <b>group number: </b>${groupNumber} <b>client状态: </b><span id="client-state[${i}]">${clientList[i]._state}</span> <b>socket状态: </b><span id="socket-state[${i}]">${socketState}</span> <button id="call-con[${i}]" onclick="callCon(${i}, clientList[${i}])" disabled>呼叫</button> <button id="term-con[${i}]" onclick="termCon(${i}, clientList[${i}])" disabled>挂断</button> <button id="local-stream-btn[${i}]" onclick="openLocalStream(${i}, clientList[${i}])" disabled>打开本地画面</button> <div id="local-stream[${i}]" style="width: 150px;height: 100px;vertical-align: top;display: none;"></div> <button id="remote-stream-btn[${i}]" onclick="openRemoteStream(${i}, clientList[${i}])" disabled>打开远端画面</button> <div id="remote-stream[${i}]" style="width: 150px;height: 100px;vertical-align: top;display: none;"></div> </li>`; client.addEventListener(GuestEventType.CONFERENCE_JOIN, (ev) => { console.warn(ev); }); client.addEventListener(GuestEventType.SOCKET_STATE_CHANGE, (ev) => { console.warn(ev); setSocketState(i); document.getElementById(`socket-state[${i}]`).innerHTML = socketState; }); client.conferenceParticipantUpdate = (ev) => { console.log(ev); }; client.conferenceParticipantLeft = (ev) => { console.log(ev); }; client.addEventListener(GuestEventType.ERROR, (ev) => { console.warn(ev); switch (ev.error) { case ConferenceErrorType.LOGIN_PASSWORD_ERROR: alert('用户名或密码错误'); break; } }) } } //加入会议 function callCon(i, client) { document.getElementById(`call-con[${i}]`).disabled = true; document.getElementById(`username[${i}]`).innerHTML = client.clientInfo.username; client.call(groupNumber, { extraParam: '', }) .catch(() => { alert('加入会议失败,请检查参数'); }); client.addEventListener(GuestEventType.CONFERENCE_LEAVE, (ev) => { console.warn(ev); setSocketState(i); document.getElementById(`client-state[${i}]`).innerHTML = client._state; document.getElementById(`socket-state[${i}]`).innerHTML = socketState; client._remoteStream && client._remoteStream.stop(); client._localStream && client._localStream.stop(); }); client.addEventListener(GuestEventType.CONFERENCE_DESTROY, (ev) => { console.warn(ev); setSocketState(i); document.getElementById(`client-state[${i}]`).innerHTML = client._state; document.getElementById(`socket-state[${i}]`).innerHTML = socketState; }); } // 挂断 function termCon(i, client) { document.getElementById(`term-con[${i}]`).disabled = true; client.term(); client._remoteStream && client._remoteStream.stop(); client._localStream && client._localStream.stop(); var username = client.clientInfo.username; console.log('【挂断】 用户名:' + username + '组号:' + groupNumber); } //开启本地视频 function openLocalStream(i, client) { document.getElementById(`local-stream-btn[${i}]`).disabled = true; document.getElementById(`local-stream[${i}]`).style.display = "inline-block"; client.requestVideo(null, '0x100') .catch(reason => console.error(reason)); client.startCameraVideo() .then(stream => { stream.start(`local-stream[${i}]`); }) .catch(err => { switch (err.type) { case 'userMediaRequestReject': alert('用户拒绝了程序获取媒体设备的请求'); break; case 'userMediaAbort': alert('媒体设备硬件异常'); break; case 'userMediaOverConstrained': alert('用户媒体设备硬件不支持'); break; case 'userMediaNotFound': alert('找不到满足请求参数的媒体类型'); break; case 'userMediaNotReadable': alert('媒体设备被占用'); break; case 'userMediaNotSupport': alert(err.constraint + '无法被满足'); break; case 'userMediaPermissionDenied': alert('用户禁止在此界面使用媒体设备'); break; } }); } //开启远端视频 function openRemoteStream(i, client) { document.getElementById(`remote-stream-btn[${i}]`).disabled = true; document.getElementById(`remote-stream[${i}]`).style.display = "inline-block"; client.startVideo() .then(stream => { stream.start(`remote-stream[${i}]`) .then(dom => { dom.muted = false; }); }); } //设置socketState的状态 function setSocketState(i) { switch (clientList[i].socket.state) { case 0: socketState = '正在连接' break; case 1: socketState = '连接已打开' break; case 2: socketState = '正在关闭' break; case 3: socketState = '已关闭' break; case 4: socketState = '正在重连' break; } } function callConAll() { callConAllBtn.disabled = true; for (let i = 0; i < tokenList.length; i++) { callCon(i, clientList[i]); } } function termConAll() { termConAllBtn.disabled = true; for (let i = 0; i < tokenList.length; i++) { termCon(i, clientList[i]); } } //开启全部本地视频 function openAllLocalStream() { openLocalStreamBtn.disabled = true; for (let i = 0; i < tokenList.length; i++) { openLocalStream(i, clientList[i]); } } //开启全部远端视频 function openAllRemoteStream() { openRemoteStreamBtn.disabled = true; for (let i = 0; i < tokenList.length; i++) { openRemoteStream(i, clientList[i]); } } //清空数据 function clearInfo() { callConAllBtn.disabled = termConAllBtn.disabled = openLocalStreamBtn.disabled = openRemoteStreamBtn.disabled = false; tokenList = []; clientList = []; roomNumList = []; clientListInfo.innerHTML = ''; roomMemberCountInput.value = '2'; roomCountInput.value = '1'; }