123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519 |
- var Meeting = function Meeting() {
- this.localUserInfo = {
- //创建会议的参数对象
- name: "", //会议名称
- masterId: "", //主持人用户ID
- masterName: "", //主持人名字
- masterNumber: "", //主持人号码
- region: "", //号码对应的PAAS域ID
- record: true, //是否录像录音true:录像录音 false:不录
- type: "video", //会议类型“audio”: 音频会议 “video”: 音视频会议
- mode: "group", //会议模式“p2p”:点对点“group”:群聊
- };
- this.InvitedMembers = {
- //邀请会议的参数对象
- id: "", //会议id
- inviteId: "", //邀请人ID
- inviteName: "", //邀请人名字
- inviteNumber: "", //邀请人号码
- member: [],
- };
- this.InvitedMembersSingle = {
- //单兵
- id: "", //会议id
- inviteId: "", //邀请人ID
- inviteName: "", //邀请人名字
- inviteNumber: "", //邀请人号码
- member: [],
- };
- this.InvitedMembersVehicle = {
- //车载
- id: "", //会议id
- inviteId: "", //邀请人ID
- inviteName: "", //邀请人名字
- inviteNumber: "", //邀请人号码
- member: [],
- };
- this.InvitedMembersUav = {
- //无人机
- id: "", //会议id
- inviteId: "", //邀请人ID
- inviteName: "", //邀请人名字
- inviteNumber: "", //邀请人号码
- member: [],
- };
- this.InvitedMembersTalkie = {
- //对讲机
- id: "", //会议id
- inviteId: "", //邀请人ID
- inviteName: "", //邀请人名字
- inviteNumber: "", //邀请人号码
- member: [],
- };
- this.inviteSelf = {
- userName: "",
- department: "",
- userId: "",
- region: "",
- number: "",
- type: "client",
- };
- this.meetingInfoback = ""; //各个接口返回信息
- this.$Message = {
- warning: (data) => {
- console.log(data);
- }
- }
- };
- Meeting.prototype = {
- initSocket(userCode, callback) {
- const self = this;
- //初始websocket实例,保存在window中方便调用。一个浏览器tab页面只能初始化一次。所有的控件窗口,通过该websocket实例去生成不同的窗口实例,不同的控件窗口通过自己的窗口实例去调用初始化、关闭、隐藏等
- window.theSocket = this.theSocket = new InitWebSocketClass(
- userCode,
- localStorage.getItem("token"), {
- //客户端登陆成功通知;
- loginSuccess: (v) => {
- console.log("loginSuccess-->", v);
- self.initWnd();
- },
- //客户端窗口被拉起通知
- onCreateVideoSuccess: (v) => {
- console.log("客户端onCreateVideoSuccess-----", v);
- },
- //重点:统一分发客户端ws消息;vue 可以统一用$bus分发.第三方消息分发自定
- onSocketBackInfos: (data) => {
- //视频窗口创建成功通知
- if (
- data &&
- data.method === "createVideoDialogReuslt" &&
- data.params.result === 0
- ) {
- if (data.params.handleName === "#vPlayArea") {
- //客户端窗口创建好后,界面显示窗口;
- callback && callback()
- self.vPlayArea.resize();
- this.$Message.warning("视频窗口创建成功!");
- }
- }
- },
- }
- );
- //socket实例初始化websocket回调方法;
- this.theSocket
- .initWebSocket()
- .then((v) => {
- if (v) {
- this.$Message.warning("视频插件登陆完成!");
- }
- })
- .catch((v) => {
- this.$Message.warning("若要观看实时视频,请先安装视频插件");
- });
- },
- //初始化视频窗口实例,先获取自己用户code,再初始化窗口,严格按照封装参数传,别漏了
- getUserCode(callback) {
- let self = this;
- $.ajax({
- type: "GET",
- url: setting.URL + "/ras/user/info",
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- beforeSend: (xhr) => {
- xhr.setRequestHeader("X-Subject-Token", localStorage.getItem("token"));
- xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
- },
- success: (res) => {
- //obj
- if (res && res.userCode) {
- let {
- userCode
- } = res;
- //初始化websocket;
- return self.initSocket(userCode, callback);
- }
- },
- });
- },
- //初始化视频窗口-dom
- initWnd() {
- //左边窗口类型参数 分割 2行2列
- const typeObj = {
- rows: 1,
- cols: 1,
- wndSpaceing: 10,
- embedVideoMode: true,
- playerCtrlBarEnable: false,
- displayMode: 1,
- playMode: 0,
- playParams: {},
- webControlExpend :true
- };
- //左边窗口实例
- window.vPlayArea = this.vPlayArea = new VideoPlay(
- "#vPlayArea",
- window.theSocket.websocket, //一个浏览器tab页面公用一个
- window.theSocket.socketCode, //一个浏览器tab页面公用一个
- typeObj
- );
- //左边窗口初始化
- this.vPlayArea.init();
- },
- //播放视频
- playVideo(item) {
- console.log('++++++', 'playVideo');
- if (!this.theSocket.websocket) {
- this.$Message.warning("请先打开视频插件");
- return;
- }
- if (item.type == "client") {
- this.slectOptionmini(item.userId).then((arr) => {
- if (arr) {
- this.vPlayArea.openAppVideo(arr);
- }
- });
- } else if (item.type == "single") {
- //播放单兵视频
- this.pullFlow(item.channelId);
- } else if (item.type == "vehicle") {
- //播放车载视频
- this.pullFlow(item.channelId);
- } else if (item.type == "uav_dev") {
- //播放无人机视频
- this.pullFlow(item.channelId);
- }
- },
- // setDesignDivision(rows, cols) {
- // // console.log(this.localUserInfo);
- // const params = JSON.stringify({
- // loginIp: setting.URL,
- // method: "SetDesignDivision",
- // userCode: this.localUserInfo.masterId,
- // params: {
- // handleName:'#vPlayArea',
- // rows: Number(rows),
- // cols: Number(cols)
- // },
- // socketCode: window.theSocket.socketCode
- // });
- // console.log(params);
- // this.webSocketSend(params);
- // },
- //设备视频拉流
- pullFlow(chinnelId) {
- if (chinnelId) {
- window.vPlayArea && window.vPlayArea.realTimeVideo && window.vPlayArea.realTimeVideo([{
- "channelId": chinnelId
- }]);
- }
- },
- /* 创建会商 */
- async creatMeeting() {
- let _this = this;
- if (!_this.localUserInfo.name) {
- _this.$Message.warning("请创建会商名称");
- return;
- }
- await $.ajax({
- type: "POST",
- url: setting.URL + "/mcu/meeting",
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- data: JSON.stringify(_this.localUserInfo),
- beforeSend: function (xhr) {
- xhr.setRequestHeader("X-Subject-Token", localStorage.getItem("token"));
- xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
- //xhr.setRequestHeader("Origin",null);
- },
- success: function (res) {
- //obj
- _this.InvitedMembers.id = res.id; //创建了会议id,保存起来,为了邀请成员;
- _this.InvitedMembersSingle.id = res.id; //单兵;
- _this.InvitedMembersVehicle.id = res.id; //车载;
- _this.InvitedMembersUav.id = res.id; //无人机;
- _this.InvitedMembersTalkie.id = res.id; //单兵;
- _this.meetingId = res.id;
- localStorage.setItem("meetingId", res.id);
- _this._debug("创建会商返回的信息", res);
- // _this.searchMeetingMember(); //add创建会商然后,开始查会议成员显示在列表中;
- },
- error: function (data) {},
- });
- },
- /* 邀请会商成员 */
- startInvite(member) {
- let _this = this;
- _this.InvitedMembers.member = [
- _this.inviteSelf,
- ...([member] || []),
- // {
- // type: "tandemPhone",
- // number: _this.outLinenum,
- // userName: _this.outLinenum,
- // region: _this.paasId,
- // },
- ];
- $.ajax({
- type: "POST",
- url: setting.URL + "/mcu/meeting/member",
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- data: JSON.stringify(_this.InvitedMembers),
- beforeSend: function (xhr) {
- xhr.setRequestHeader("X-Subject-Token", localStorage.getItem("token"));
- xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
- },
- success: function (res) {
- //obj
- _this._debug("邀请会商成后的信息", res);
- //_this.searchMeetingMember(); //add创建会商然后,开始查会议成员显示在列表中;
- },
- error: function (data) {
- if (data.responseJSON.code == "mcuIdNotExist") {
- _this.$Message.warning("未创建会商");
- } else if (data.responseJSON.code == "mcuIdInvalid") {
- _this.$Message.warning("会议ID无效");
- } else if (data.responseJSON.code == "mcuMeetingMemMax") {
- _this.$Message.warning("会议用户数满");
- }
- },
- });
- },
- /* 关闭会商操作 */
- deleteMeeting() {
- let _this = this;
- let deleteMeetingId = _this.meetingId;
- if (!deleteMeetingId) {
- _this.$Message.warning("未创建会商");
- _this._debug("未创建会商", "");
- return;
- }
- $.ajax({
- type: "DELETE",
- url: setting.URL + "/mcu/meeting/" + deleteMeetingId,
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- data: JSON.stringify(_this.localUserInfo),
- beforeSend: function (xhr) {
- xhr.setRequestHeader("X-Subject-Token", localStorage.getItem("token"));
- xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
- },
- success: function (res) {
- //obj
- _this._debug("关闭会议成功", res);
- localStorage.removeItem("meetingId");
- _this.meetingId = ""; //置空
- _this.meetMemberList = []; //置空
- _this.meetMemberList2 = []; //置空
- },
- error: function (data) {
- //obj
- _this._debug("关闭会议错误提示", data);
- if (data.responseJSON.code === "mcuIdNotExist") {
- _this.$Message.warning("未创建会商");
- }
- },
- });
- },
- /* 通过deviceCode查询设备channelId */
- searchChinnelId(deviceCode, deviceType) {
- let _this = this;
- return new Promise((resolve) => {
- $.ajax({
- type: "GET",
- url: setting.URL + "/videoService/devicesManager/devices/" + deviceCode,
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- beforeSend: function (xhr) {
- xhr.setRequestHeader(
- "X-Subject-Token",
- localStorage.getItem("token")
- );
- xhr.setRequestHeader(
- "Content-Type",
- "application/json;charset=UTF-8"
- );
- //xhr.setRequestHeader("Origin",null);
- },
- success: function (res) {
- //obj
- if (res) {
- if (deviceType == "single") {
- //单兵
- _this.channelId = res.encoderUnit.channels[0].channelId;
- resolve(res.encoderUnit.channels[0].channelId);
- _this._debug(
- "单兵channelId",
- res.encoderUnit.channels[0].channelId
- );
- } else if (deviceType == "vehicle") {
- //车载
- _this.channelId = res.encoderUnit.channels[0].channelId;
- resolve(res.encoderUnit.channels[0].channelId);
- _this._debug(
- "车载channelId",
- res.encoderUnit.channels[0].channelId
- );
- } else if (deviceType == "uav") {
- //无人机
- _this.channelId = res.encoderUnit.channels[0].channelId;
- resolve(res.encoderUnit.channels[0].channelId);
- _this._debug(
- "无人机channelId",
- res.encoderUnit.channels[0].channelId
- );
- } else if (deviceType == "talkie") {
- //对讲机
- if (res.encoderUnit.channels[0].channelId) {
- _this.channelId = res.encoderUnit.channels[0].channelId;
- resolve(res.encoderUnit.channels[0].channelId);
- }
- _this._debug(
- "对讲机channelId",
- res.devAudioUnit.channels[0].channelId
- );
- }
- }
- },
- error: function (data) {
- //
- },
- });
- });
- },
- queryUser(userCode) {
- let _this = this;
- return new Promise((resolve) => {
- $.ajax({
- type: "GET",
- url: setting.URL + "/ras/user/" + userCode,
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- beforeSend: function (xhr) {
- xhr.setRequestHeader(
- "X-Subject-Token",
- localStorage.getItem("token")
- );
- xhr.setRequestHeader(
- "Content-Type",
- "application/json;charset=UTF-8"
- );
- },
- success: function (res) {
- //obj
- if (res && res.chnId) {
- resolve(res);
- }
- },
- error: function (data) {},
- });
- });
- },
- /* app拉流 */
- slectOptionmini(userCode) {
- let _this = this;
- return new Promise((resolve) => {
- $.ajax({
- type: "GET",
- url: setting.URL + "/ras/user/" + userCode,
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- beforeSend: function (xhr) {
- xhr.setRequestHeader(
- "X-Subject-Token",
- localStorage.getItem("token")
- );
- xhr.setRequestHeader(
- "Content-Type",
- "application/json;charset=UTF-8"
- );
- },
- success: function (res) {
- //obj
- if (res && res.chnId) {
- let arr = [{
- channelId: res.chnId,
- userCode: res.userCode,
- regionId: res.paasId,
- domainId: "",
- }, ];
- resolve(arr);
- }
- },
- error: function (data) {},
- });
- });
- },
- /* 打开客户端 */
- async openClient(callback) {
- return this.getUserCode(callback);
- },
- closeClient() {
- this.theSocket && this.theSocket.closeClient && this.theSocket.closeClient();
- },
- closeVideo() {
- this.theSocket.closeAllVideo && this.theSocket.closeAllVideo();
- },
- /* 获取群聊fromName */
- async getLocalUserInfo() {
- let _this = this;
- await $.ajax({
- type: "GET",
- url: setting.URL + "/ras/user/info",
- contentType: "application/json", //如果提交的是json数据类型,则必须有此参数,表示提交的数据类型
- dateType: "json",
- beforeSend: function (xhr) {
- xhr.setRequestHeader("X-Subject-Token", localStorage.getItem("token"));
- xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
- },
- success: function (res) {
- //obj
- _this.loginPassword = res.loginPassword; //获取登录为密码.为登录用户话机注册做准备(需要res解密)
- _this.localUserInfo.masterName = res.userName;
- _this.localUserInfo.masterId = res.userCode;
- _this.localUserInfo.masterNumber = res.userPhone;
- _this.localUserInfo.region = res.paasId;
- _this.InvitedMembers.inviteId = res.userCode;
- _this.InvitedMembers.inviteName = res.userName;
- _this.InvitedMembers.inviteNumber = res.userPhone;
- _this.inviteSelf = {
- userName: res.userName + "(系统APP接入)",
- department: res.deptName,
- userId: res.userCode,
- region: res.paasId,
- number: res.userPhone,
- type: "client",
- };
- //单兵
- _this.InvitedMembersSingle.inviteId = res.userCode;
- _this.InvitedMembersSingle.inviteName = res.userName;
- _this.InvitedMembersSingle.inviteNumber = res.userPhone;
- //车载
- _this.InvitedMembersVehicle.inviteId = res.userCode;
- _this.InvitedMembersVehicle.inviteName = res.userName;
- _this.InvitedMembersVehicle.inviteNumber = res.userPhone;
- //无人机
- _this.InvitedMembersUav.inviteId = res.userCode;
- _this.InvitedMembersUav.inviteName = res.userName;
- _this.InvitedMembersUav.inviteNumber = res.userPhone;
- //对讲机
- _this.InvitedMembersTalkie.inviteId = res.userCode;
- _this.InvitedMembersTalkie.inviteName = res.userName;
- _this.InvitedMembersTalkie.inviteNumber = res.userPhone;
- },
- error: function (data) {},
- });
- },
- _debug(tip, res) {
- let _this = this;
- _this.meetingInfoback += tip + "--》 " + JSON.stringify(res) + "\n\n";
- // let container = _this.$el.querySelector("#meetResBack textarea");
- // container.scrollTop = container.scrollHeight;
- },
- };
|