/************************** 视频业务 ******************************/ function VideoCall(callid) { this.Js_CallID = callid; //js的callid this.Ws_CallID = ""; //ws的callid this.CalledNum = ""; this.CalledType = 0; //1-终端 2-调度台 5-摄像头 6-GBT28181 this.CalledName = 0; this.CallMode = 0; //1-拉取视频 2-推送视频 this.LocalSdp = ""; this.RemoteSdp = ""; this.OnlineCallID = ""; this.Status = 0; //0-初始 1-链接中 2-响铃中 3-已接入 } VideoCallList = []; onWebWorkerMessage_Video = function (parm) { switch (parm.Msg) { case "MonitorVideoPullReq": MonitorVideoPull(parm); break case "MonitorVideoHangupReq": MonitorVideoHangup(parm); break case "MonitorVideoHandleIncomingCallReq": MonitorVideoHandleIncomingCall(parm); break case "MonitorVideoPushReq": MonitorVideoPush(parm); break case "MonitorVideoPtzReq": MonitorVideoPtz(parm); break case "MonitorVideoControlReq": MonitorVideoRemoteControl(parm); break } } MonitorVideoPull = function (parm) { var call = new VideoCall(parm.CallID); call.CalledNum = parm.Number; call.CalledType = parm.Type; call.CalledName = parm.Name; call.CallMode = 1; call.LocalSdp = parm.OfferSdp; call.Ws_CallID = guid(); VideoCallList.push(call); msg = new WsBaseMsg("Video_Call_Req", 701); msg.onRspFail = function (reason) { var msgData = { Msg: "MonitorVideoStatusNotify", CallID: parm.CallID, Status: 4, Reason: "timeout", }; postMessage(msgData); } msg.Set("nCallMode", 1); msg.Set("nCalledType", parm.Type); msg.Set("cCalledUserNum", parm.Number); msg.Set("cCalledUserName", parm.Name); msg.Set("cCallID", call.Ws_CallID); msg.Set("nPushMode", 0); msg.Set("cCallingUserNum", DcInfo.Number); msg.Set("cCallingUserName", DcInfo.Name); msg.Set("nCallingUserType", 2); msg.Set("cSdp", parm.OfferSdp); msg.Set("cOnlineCallID", ""); msg.Send("Video_Call_Rsp"); } MonitorVideoHangup = function (parm) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Js_CallID == parm.CallID) { if (call.Status < 3) { msg = new WsBaseMsg("Video_Call_Cancel", 704); msg.Set("cCallID", call.Ws_CallID); msg.Send(); } else { msg = new WsBaseMsg("Video_Call_Bye_Req", 705); msg.Set("cCallID", call.Ws_CallID); msg.Send(); } VideoCallList.splice(i, 1); break; } } } MonitorVideoHandleIncomingCall = function (parm) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Js_CallID == parm.CallID) { if (call.Status < 3 && call.CallMode == 2) //推送且还未接入 { if (parm.Handle == 1) { call.LocalSdp = parm.OfferSdp; msg = new WsBaseMsg("Video_Call_Rsp", 702); msg.Set("cCallID", call.Ws_CallID); msg.Set("nRetCode", 200); msg.Set("cSdp", parm.OfferSdp); msg.Set("cOnlineCallID", ""); msg.Send(); } else { msg = new WsBaseMsg("Video_Call_Rsp", 702); msg.Set("cCallID", call.Ws_CallID); msg.Set("nRetCode", 486); msg.Set("cSdp", ""); msg.Set("cOnlineCallID", ""); msg.Send(); VideoCallList.splice(i, 1); } } break; } } } MonitorVideoPush = function (parm) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Js_CallID == parm.CallID) { msg = new WsBaseMsg("Video_Call_Forward_Req", 707); msg.Set("cOnlineCallID", call.OnlineCallID); msg.Set("nRequsetID", i); msg.Set("nCalledType", 1); msg.Set("cCalledUserNum", parm.Number); msg.Send("Video_Call_Forward_Rsp"); break; } } } MonitorVideoPtz = function (parm) { msg = new WsBaseMsg("Video_Ipc_Ptz", 709); msg.Set("nCalledType", 5); msg.Set("cCalledUserNum", parm.Number); msg.Set("nCommandID", parm.Command); msg.Set("nDirection", parm.Direction); msg.Set("nSpeed", parm.Speed); msg.Send(); } MonitorVideoRemoteControl = function (parm) { msg = new WsBaseMsg("Video_Control_Req", 710); msg.Set("nCalledType", 1); msg.Set("cCalledUserNum", parm.Number); msg.Set("nResolution", parm.Resolution); msg.Set("nCamera", parm.Camera); msg.Send(); } VideoOffline = function() { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call) { var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 3, Reason: "server offline", }; postMessage(msgData); } } VideoCallList = [] } VideoOnline = function() { } var VideoIncomingCallID = 14560; //——————————————————————————————————————— weboscket 接收 ——————————————————————————————————————————— onWs_Video_Call_Req = function (data) { //推送来电 VideoIncomingCallID++; var call = new VideoCall(VideoIncomingCallID); call.CalledNum = data.cCallingUserNum; call.CalledType = data.nCallingUserType; call.CalledName = data.cCallingUserName; call.CallMode = 2; call.Ws_CallID = data.cCallID; call.OnlineCallID = data.cOnlineCallID; call.Status = 2; VideoCallList.push(call); msg = new WsBaseMsg("Video_Call_Rsp", 702); msg.Set("cCallID", call.Ws_CallID); msg.Set("nRetCode", 101); msg.Set("cSdp", ""); msg.Set("cOnlineCallID", ""); msg.Send(); msg = new WsBaseMsg("Video_Call_Rsp", 702); msg.Set("cCallID", call.Ws_CallID); msg.Set("nRetCode", 180); msg.Set("cSdp", ""); msg.Set("cOnlineCallID", ""); msg.Send(); var msgData = { Msg: "MonitorVideoIncomingCallNotify", CallID: call.Js_CallID, Number: call.CalledNum, Name: call.CalledName, }; postMessage(msgData); } onWs_Video_Call_Rsp = function (data) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Ws_CallID == data.cCallID) { switch (data.nRetCode) { case 101: if (call.Status == 0) { call.Status = 1; var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 1, Reason: "trying", }; if (data.cOnlineCallID) { call.OnlineCallID = data.cOnlineCallID; } postMessage(msgData); } break; case 180: if (call.Status <= 1) { call.Status = 2; var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 1, Reason: "ringing", }; if (data.cOnlineCallID) { call.OnlineCallID = data.cOnlineCallID; } postMessage(msgData); } break; case 200: if (call.Status <= 2) { call.Status = 3; if (data.cOnlineCallID) { call.OnlineCallID = data.cOnlineCallID; } call.RemoteSdp = data.cSdp; var WebrtcSdpNotify = { Msg: "WebrtcSdpNotify", CallID: call.Js_CallID, WebrtcSdp: call.RemoteSdp, CallType: 0, }; postMessage(WebrtcSdpNotify); var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 2, Reason: "ok", }; postMessage(msgData); msg = new WsBaseMsg("Video_Call_Ack", 703); msg.Set("cCallID", call.Ws_CallID); msg.Set("cSdp", ""); msg.Set("cOnlineCallID", ""); msg.Send(); } break; case 404: var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 9, Reason: "offline", }; postMessage(msgData); VideoCallList.splice(i, 1); break; case 408: var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 6, Reason: "timeout", }; postMessage(msgData); VideoCallList.splice(i, 1); break; case 486: var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 8, Reason: "busy", }; postMessage(msgData); VideoCallList.splice(i, 1); break; case 603: var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 5, Reason: "busy", }; postMessage(msgData); VideoCallList.splice(i, 1); break; default: if (data.nRetCode >= 400) { var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 7, Reason: "fail", }; postMessage(msgData); VideoCallList.splice(i, 1); } break; } break; } } } onWs_Video_Call_Ack = function (data) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Ws_CallID == data.cCallID) { if (call.Status <= 2) { call.Status = 3; if (data.cOnlineCallID) { call.OnlineCallID = data.cOnlineCallID; } call.RemoteSdp = data.cSdp; var WebrtcSdpNotify = { Msg: "WebrtcSdpNotify", CallID: call.Js_CallID, WebrtcSdp: call.RemoteSdp, CallType: 0, }; postMessage(WebrtcSdpNotify); var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 2, Reason: "ok", }; postMessage(msgData); } } } } onWs_Video_Call_Cancel = function (data) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Ws_CallID == data.cCallID) { if (call.Status <= 2) { var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 3, Reason: "cancel", }; postMessage(msgData); } VideoCallList.splice(i, 1); break; } } } onWs_Video_Call_Bye_Req = function (data) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Ws_CallID == data.cCallID) { if (call.Status == 3) { var msgData = { Msg: "MonitorVideoStatusNotify", CallID: call.Js_CallID, Status: 3, Reason: "hangup", }; postMessage(msgData); } VideoCallList.splice(i, 1); break; } } } onWs_Video_Call_Bye_Rsp = function (data) { for (var i = 0; i < VideoCallList.length; i++) { var call = VideoCallList[i]; if (call.Ws_CallID == data.cCallID) { break; } } } onWs_Video_Call_Forward_Rsp = function (data) { var call = VideoCallList[data.nRequsetID]; if (typeof call != 'undefined') { //call.Js_CallID } } onWs_Video_Query_CallMember_Rsp = function (data) { } onWsTextMessage_Video = function (msg) { switch (msg.msg) { case "Video_Call_Req": onWs_Video_Call_Req(msg.data) break; case "Video_Call_Rsp": onWs_Video_Call_Rsp(msg.data) break; case "Video_Call_Ack": onWs_Video_Call_Ack(msg.data) break; case "Video_Call_Cancel": onWs_Video_Call_Cancel(msg.data) break; case "Video_Call_Bye_Req": onWs_Video_Call_Bye_Req(msg.data) break; case "Video_Call_Bye_Rsp": onWs_Video_Call_Bye_Rsp(msg.data) break; case "Video_Call_Forward_Rsp": onWs_Video_Call_Forward_Rsp(msg.data) break; case "Video_Query_CallMember_Rsp": onWs_Video_Query_CallMember_Rsp(msg.data) break; } }