/// <summary> /// 停止预览摄像头视频,并清理命名管道 /// </summary> /// <param name="cameraNo"></param> /// <returns></returns> public SmcErr StopReceiveVideoByPipe(string cameraNo) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().StopReceiveVideo(cameraNo); VideoPipe videoPipe = VideoPipeManage.Instance().DeleteVideoPipe(cameraNo); if (videoPipe == null) { logEx.Error("MonitorManageService StopReceiveVideoByPipe failed,VideoPipe is null,cameraNo = {0}", cameraNo); err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); } else { videoPipe.Stop(); } } if (err.IsSuccess()) { logEx.Info("MonitorManageService StopReceiveVideoByPipe Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService StopReceiveVideoByPipe failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 获取监控摄像头列表刷新状态,返回结果为0是表示刷新完毕,为1是刷新操作中。当查询刷新状态为0时,可调用获取监控摄像头列表接口,获取刷新后监控摄像头列表 /// </summary> /// <param name="refreshStatus"></param> /// <returns></returns> public SmcErr GetRefreshStatus(out SmcErr refreshStatus) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); refreshStatus = new SmcErr(); refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END; err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().GetRefreshStatus(out refreshStatus); } else { refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_FAILED; } if (err.IsSuccess()) { logEx.Info("MonitorManageService GetRefreshStatus Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService GetRefreshStatus failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 获取监控摄像头列表刷新状态,返回结果为0是表示刷新完毕,为1是刷新操作中。当查询刷新状态为0时,可调用获取监控摄像头列表接口,获取刷新后监控摄像头列表 /// </summary> /// <param name="refreshStatus">刷新状态</param> /// <returns></returns> public SmcErr GetRefreshStatus(out SmcErr refreshStatus) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.GetRefreshStatus"); SmcErr err = new CgwError(); refreshStatus = new SmcErr(); refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END; if (refreshMonitorCameraOperateLock.TryEnterWriteLock(CgwConst.EFRESH_MONITOR_CAMERA_WAIT_TIME)) { try { if (loadResult) { refreshStatus.ErrNo = isRefreshSucess ? CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END : CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_FAILED; } else { refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_EXECUTING; } } finally { refreshMonitorCameraOperateLock.ExitWriteLock(); } } else { refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_EXECUTING; } logEx.Info("GetRefreshStatus success."); return(err); }
/// <summary> /// 检查Session /// </summary> /// <returns></returns> private SmcErr CheckSession() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); CGWSession CgwSession = null; if (OperationContext.Current != null) { string strSessionId = OperationContext.Current.SessionId; err = SessionManage.Instance().GetSessionsBySessionId(strSessionId, out CgwSession); if (err.IsSuccess() == false || CgwSession == null) { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_SESSION_NULL); } else { //更新Session最后访问时间 CgwSession.LastVisitedTime = DateTime.Now; logEx.Trace("Current SessionId is:{0}, LastVisitedTime is :{1}", strSessionId, CgwSession.LastVisitedTime.ToLongTimeString()); } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); } return(err); }
/// <summary> /// 开启PTZ控制 /// </summary> /// <param name="cameraNo">摄像头NO</param> /// <param name="ptzCommand">操作类型</param> /// <param name="param">命令参数</param> /// <returns></returns> public SmcErr StartControlPtz(string cameraNo, Common.PtzCommandType ptzCommand, int param) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); if (serviceControl.MonitorServiceRun()) { err = CgwMonitorManageAdapter.Instance().StartControlPtz(cameraNo, ptzCommand, param); } else { err.SetErrorNo(Cgw.SmcError.CgwError.ERR_MONITOR_MANAGE_SERVICE_RESTARTING); } //日志记录 if (err.IsSuccess()) { logEx.Trace("StartControlPtz Successful"); } else { logEx.Error("StartControlPtz failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 同步通道信息 /// </summary> /// <param name="ChannelInfoList">通道列表</param> /// <returns></returns> public SmcErr SyncMonitorChannel(List <ChannelInfo> ChannelInfoList) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { if (ChannelInfoList != null) { err = MonitorChannelBll.Instance().SyncMonitorChannel(ChannelInfoList); } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CHANNELLIST_NULL); } } if (err.IsSuccess()) { logEx.Trace("SyncMonitorChannel Successful"); } else { logEx.Error("SyncMonitorChannel failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 注销T28181监控平台资源 /// </summary> /// <returns></returns> public SmcErr Unload() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: T28181IvsVideoMonitor.Unload()."); SmcErr err = new CgwError(); //停止定时器 this.updateCameraTimer.Stop(); int result = sipStack.SIP_SDK_UNREGISTER(); //释放所有实况通道,释放NETSOURCE资源 result += sipStack.IVS_NETSOURCE_UnInit(); result += sipStack.SIP_SDK_UnInit(); result += rtpAdapter.ESDK_RTP_UnInit(); if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Unload T28181video monitor success.Monitor id:{0}.", this.monitorId); } else { err.SetErrorNo(CgwError.MONITOR_UDLOAD_FAILED); logEx.Error("Unload T28181video monitor failed.Monitor id:{0}.", this.monitorId); } return(err); }
/// <summary> /// 分配监控通道 /// </summary> public SmcErr UpdateMonitorChannel(List <ChannelInfo> channelInfoList) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(); if (err.IsSuccess()) { if (channelInfoList != null) { err = MonitorChannelBll.Instance().AssignMonitorChannel(channelInfoList); } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CHANNELLIST_NULL); } } if (err.IsSuccess()) { logEx.Info("SMC AssignMonitorChannel Successful,Current SMC IP is : {0}", CgwConst.SmcIp); } else { logEx.Error("SMC AssignMonitorChannel failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 开始云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommandType">命令类型</param> /// <param name="param">命令参数,速度或倍数</param> /// <returns></returns> public SmcErr StartControlPtz(string cameraNo, PtzCommandType ptzCommand, int param) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: T28181VideoMonitor.StartControlPtz({0},{1},{2}).", cameraNo, ptzCommand, param); SmcErr err = new CgwError(); //将ptz命令转换成T28181的命令 T28181PTZCmd cmd = new T28181PTZCmd(ptzCommand, param); string ptzCmd = cmd.ToString(); logEx.Trace("Call T28181VideoMonitor.StartPtzControl({0},{1},{2}).", cameraNo, Enum.GetName(typeof(PtzCommandType), (int)ptzCommand), param); //控制权限级别设为1 int result = sipStack.PtzControl(cameraNo, ptzCmd, "1"); //如果为0,表示成功 if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Start control ptz success.Camera No:{0}.", cameraNo); } else { err.SetErrorNo(CgwError.START_CONTROL_PTZ_FAILED); logEx.Error("Start control ptz failed.Camera No:{0}.T28181VideoMonitor error code:{1}.", cameraNo, result); return(err); } return(err); }
/// <summary> /// 停止云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommandType">命令类型</param> /// <returns></returns> public SmcErr StopControlPtz(string cameraNo, PtzCommandType ptzCommandType) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: T28181VideoMonitor.StopControlPtz({0}).", cameraNo); SmcErr err = new CgwError(); //将ptz命令转换成T28181的命令 T28181PTZCmd cmd = new T28181PTZCmd(ptzCommandType, 0); string ptzCmd = cmd.ToString(); //控制权限级别设为1 int result = sipStack.PtzControl(cameraNo, ptzCmd, "1"); //如果为0,表示成功 if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Stop control ptz success.Camera No:{0}.", cameraNo); } else { //直接将IVS的错误码返回 err.SetErrorNo(CgwError.STOP_CONTROL_PTZ_FAILED); logEx.Error("Stop control ptz failed.Camera No:{0}.Ivs sdk error code:{1}.", cameraNo, result); return(err); } return(err); }
/// <summary> /// 设置麦克风状态,非物理状态,通过软件控制,该状态只针对该融合网关。软件重启,状态丢失 /// </summary> /// <param name="cameraNo"></param> /// <param name="isOn">麦克风是否开启</param> /// <returns></returns> public SmcErr SetMic(string cameraNo, bool isOn) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.SetMic({0},{1}).", cameraNo, isOn); SmcErr err = new CgwError(); if (this.micOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraMicStatusDic.ContainsKey(cameraNo)) { this.cameraMicStatusDic[cameraNo] = isOn; } else { this.cameraMicStatusDic.Add(cameraNo, isOn); } } finally { this.micOperateLock.ExitWriteLock(); } } logEx.Info("Set Mic status success.Camera no:{0},isOn:{1}).", cameraNo, isOn); return(err); }
/// <summary> /// 获取监控摄像头列表刷新状态,返回结果为0是表示刷新完毕,为1是刷新操作中。当查询刷新状态为0时,可调用获取监控摄像头列表接口,获取刷新后监控摄像头列表 /// </summary> /// <param name="refreshStatus"></param> /// <returns></returns> public SmcErr GetRefreshStatus(out SmcErr refreshStatus) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: CgwService.GetRefreshStatus"); refreshStatus = new SmcErr(); refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END; SmcErr err = new CgwError(); err = CheckSession(); if (err.IsSuccess()) { err = MonitorChannelBll.Instance().GetRefreshStatus(out refreshStatus); } else { refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_FAILED; } if (err.IsSuccess()) { logEx.Info("SMC GetRefreshStatus Success,Current SMC IP is : {0}, refreshStatus : {1}", CgwConst.SmcIp, refreshStatus.ErrNo); } else { logEx.Error("SMC GetRefreshStatus Failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 获取监控平台配置 /// </summary> /// <param name="monitorElement"></param> /// <returns></returns> private SmcErr GetMonitorConfig(XmlElement monitorElement, out string monitorId, out string className) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: VideoMonitorManage.GetMonitorConfig()."); SmcErr err = new CgwError(); monitorId = CommonFunction.GetSingleNodeValue(monitorElement, CgwConst.ID_TAG); className = CommonFunction.GetSingleNodeValue(monitorElement, CgwConst.CLASS_TAG); if (string.IsNullOrEmpty(monitorId)) { //监控平台id不能为空 err.SetErrorNo(CgwError.MONITOR_CONFIG_FILE_INVALID_ID_NULL); logEx.Error("Monitor id can not be null."); return(err); } if (string.IsNullOrEmpty(className)) { //监控平台 {0}的class不能为空 err.SetErrorNo(CgwError.MONITOR_CONFIG_FILE_INVALID_CLASS_NULL); logEx.Error("The class of Monitor is null. Monitor id:{0}.", monitorId); return(err); } return(err); }
/// <summary> /// 刷新监控摄像头列表 /// </summary> /// <returns></returns> public SmcErr RefreshMonitorCamera() { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { Thread th = new Thread(new ThreadStart(() => { VideoMonitorManage.Instance().RefreshMonitorCamera(); })); th.Start(); } if (err.IsSuccess()) { logEx.Info("MonitorManageService RefreshMonitorCamera Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService RefreshMonitorCamera failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 断开融合网关 /// </summary> /// <returns></returns> public SmcErr DisConnect() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); if (OperationContext.Current != null) { string strSessionId = OperationContext.Current.SessionId; if (!string.IsNullOrEmpty(strSessionId)) { err = SessionManage.Instance().RemoveSessionBySessionId(strSessionId); logEx.Trace("DisConnect Successful,Current.SessionId is : ", strSessionId); } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); logEx.Warn("Current SessionId is null ! "); } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); logEx.Warn("Current SessionId is null ! "); } return(err); }
/// <summary> /// 获取摄像头列表及分组信息 /// </summary> /// <param name="fromMonitorSys">如果该值为true,则实时从监控平台获取,否则从融合网关缓存获取</param> /// <param name="cameraList">摄像头列表</param> /// <param name="groupList">组信息</param> /// <param name="nodeRelationList">分组关系</param> /// <returns></returns> public SmcErr GetAllCameras(PlatformType platformType, PagesParam pageParam, out List <Camera> cameraList, out List <CameraGroup> groupList, out List <NodeRelation> nodeRelationList, out PageInfo pagesInfo, PlatformLicenseInfo licenseInfo = null) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); cameraList = null; groupList = null; nodeRelationList = null; pagesInfo = null; err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().GetAllCameras(pageParam, out cameraList, out groupList, out nodeRelationList, out pagesInfo, licenseInfo); } if (err.IsSuccess()) { logEx.Info("MonitorManageService QueryMonitorCamera Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService QueryMonitorCamera failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 注销IVS监控平台资源 /// </summary> /// <returns></returns> public SmcErr Unload() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Info("Enter: IvsVideoMonitor.Unload()."); SmcErr err = new CgwError(); loadResult = true; //停止定时器 this.updateCameraTimer.Stop(); logEx.Trace("Call ivsSdkClient.Logout()."); int result = this.ivsSdkClient.Logout(); logEx.Trace("Call ivsSdkClient.Cleanup()."); result = this.ivsSdkClient.Cleanup(); if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Unload video monitor success.Monitor id:{0}.", this.monitorId); } else { err.SetErrorNo(CgwError.MONITOR_UDLOAD_FAILED); logEx.Error("Unload video monitor failed.Monitor id:{0}.", this.monitorId); } return(err); }
/// <summary> /// 获取监控摄像头列表刷新状态,返回结果为0是表示刷新完毕,为1是刷新操作中。当查询刷新状态为0时,可调用获取监控摄像头列表接口,获取刷新后监控摄像头列表 /// </summary> /// <param name="refreshStatus"></param> /// <returns></returns> public SmcErr GetRefreshStatus(out SmcErr refreshStatus) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); refreshStatus = new SmcErr(); refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END; if (serviceControl.MonitorServiceRun()) { err = CgwMonitorManageAdapter.Instance().GetRefreshStatus(out refreshStatus); } else { err.SetErrorNo(Cgw.SmcError.CgwError.ERR_MONITOR_MANAGE_SERVICE_RESTARTING); } //日志记录 if (err.IsSuccess()) { logEx.Trace("GetRefreshStatus Successful"); } else { logEx.Error("GetRefreshStatus failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 断开监控管理连接 /// </summary> /// <returns></returns> public SmcErr Disconnect() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); if (OperationContext.Current != null) { //string strSessionId = OperationContext.Current.SessionId; string strSessionId = currentSessionID; if (!string.IsNullOrEmpty(strSessionId)) { err = SessionManage.Instance().RemoveSessionBySessionId(strSessionId); logEx.Info("Client DisConnect MonitorManageService Successful,Current.Cgw IP is : {0}", CgwConst.ClientIp); } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); logEx.Warn("Current SessionId is null ! "); } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); logEx.Warn("Current SessionId is null ! "); } return(err); }
/// <summary> /// 连接融合网关 /// </summary> /// <param name="cgwPwd">连接字符串</param> /// <returns></returns> public SmcErr Connect(string cgwPwd) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); if (isLoadSuccess == false) { err.SetErrorNo(CgwError.ERR_CGW_IS_LOADING); return(err); } //if (false == string.IsNullOrEmpty(cgwPwd)) //{ ////进行SHA256加密 //string newPassword = CommonFunction.SHA256Encrypt(strPwd); //保存当前会话 //if (newPassword == cgwPwd) //{ //获取SessionManage中Session个数 if (SessionManage.Instance().GetSessionsCount() == 0) { Guid sessionGuid = Guid.NewGuid(); //保存至CGW的session管理中 CgwSession CgwSession = new CgwSession(sessionGuid, OperationContext.Current.SessionId); isChangeLic = false; MessageProperties properties = OperationContext.Current.IncomingMessageProperties; //获取传进的消息属性 RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; //获取消息发送的远程终结点IP和端口 if (endpoint != null) { CgwConst.SmcIp = endpoint.Address; // 获取发送消息的客户端的 IP 地址。 logEx.Info("SMC Connect CgwService Successful,Current.SMC IP is : {0}", CgwConst.SmcIp); } else { logEx.Info("SMC Connect CgwService Successful,Current.SMC IP is null."); } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_SESSION_COUNT_MAX); logEx.Warn("Session Count is Top Of Max number !"); } //} //else //{ // err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_PASSWORD_INCORRECT); // logEx.Error("Connect Password is Incorrect !"); //} //} //else //{ // err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_PASSWORD_NULL); // logEx.Error("Connect Password is null !"); //} return(err); }
/// <summary> /// 查询Lisence控制项(暂无) /// </summary> public SmcErr QueryLisence(out int numLisence) { SmcErr err = new CgwError(); numLisence = 0; err = CheckSession(); return(err); }
/// <summary> /// 重发I帧(暂不支持) /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns></returns> public SmcErr MakeIFrame(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.MakeIFrame({0}).", cameraNo); SmcErr err = new CgwError(); return(err); }
/// <summary> /// 摄像头闭音(暂无) /// </summary> public SmcErr MuteCamera() { SmcErr err = new CgwError(); err = CheckSession(); if (err.IsSuccess()) { } return(err); }
/// <summary> /// 停止预览 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns>成功返回0,失败返回错误码</returns> public SmcErr StopReceiveVideo(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: T28181VideoMonitor.StopReceiveVideo({0}).", cameraNo); SmcErr err = new CgwError(); //需要停止的预览句柄 uint needToStopChannel = 0; if (this.handelOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraVideoChannelDic.ContainsKey(cameraNo)) { needToStopChannel = this.cameraVideoChannelDic[cameraNo]; this.videoChannelDataSenderDic.Remove(needToStopChannel); this.cameraVideoChannelDic.Remove(cameraNo); //关闭rtp回调 rtpAdapter.ESDK_RTP_CloseChannel(needToStopChannel); } else { logEx.Warn("Stop Receive camera video data failed. Don't need to end the preview.Camera No:{0}.", cameraNo); //如果预览句柄不存在,不需要处理,直接返回 return(err); } } catch (Exception ex) { err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Error("Stop Receive camera video data failed.Execption message:{0}", ex.Message); return(err); } finally { this.handelOperateLock.ExitWriteLock(); } } //调用sdk的停止方法,放在handelOperateLock外面,防止长时间占用锁 if (needToStopChannel != 0) { int result = sipStack.StopRecvStream(needToStopChannel); //如果不为0,表示预览失败 if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Error("Stop Receive camera video data failed. error code:{0}", result); return(err); } logEx.Info("Stop Receive camera video data success.Camera No:{0},Handle:{1}.", cameraNo, needToStopChannel); } return(err); }
/// <summary> /// 重发I帧 /// 2013-7-15,监控平台自动定时发I帧,默认是4S内,因此重发I帧作用不大,还有可能造成内存泄露 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns></returns> public SmcErr MakeIFrame(string cameraNo) { //NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); //logEx.Trace("Enter: TiandyVideoMonitor.MakeIFrame({0}).", cameraNo); SmcErr err = new CgwError(); //TiandyCamera camera = null; //Host host = null; //if (this.cameraOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME)) //{ // try // { // if (!this.tiandyCameraDictionary.ContainsKey(cameraNo)) // { // err.SetErrorNo(CgwError.CAMERA_NOT_FOUND); // logEx.Error("Make I frame failed.Camera No is not found.Camera No:{0}.", cameraNo); // return err; // } // camera = this.tiandyCameraDictionary[cameraNo]; // host = this.hostDictionary[camera.HostNo]; // } // catch (Exception e) // { // err.SetErrorNo(CgwError.MAKE_I_FRAME_FAILED); // logEx.Error("Make I frame failed.Camera No:{0},Execption message:{1}", cameraNo, e.Message); // return err; // } // finally // { // this.cameraOperateLock.ExitReadLock(); // } //} //if (camera == null) //{ // err.SetErrorNo(CgwError.MAKE_I_FRAME_FAILED); // logEx.Error("Make I frame failed.Camera No is not found.Camera No:{0}", cameraNo); // return err; //} //if (this.sdkClient.MakeIFrame(host.No, camera.Channel, host.MediaServerNo)) //{ // logEx.Info("Make I frame success.Camera No:{0}", cameraNo); //} //else //{ // err.SetErrorNo(CgwError.MAKE_I_FRAME_FAILED); // logEx.Error("Make I frame failed.Camera No:{0}", cameraNo); //} return(err); }
/// <summary> /// 获取摄像头列表及分组信息 /// </summary> /// <param name="fromMonitorSys">如果该值为true,则实时从监控平台获取,否则从融合网关缓存获取</param> /// <param name="cameraList">摄像头列表</param> /// <param name="groupList">组信息</param> /// <param name="nodeRelationListT">分组关系</param> /// <returns></returns> public SmcErr GetAllCameras(out List <Camera> cameraList, out List <CameraGroup> groupList, out List <NodeRelation> nodeRelationListT) { monitorManageServiceGetCameraList.Stop(); isGetDevicesFinish = false; NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.GetAllCameras()."); SmcErr err = new CgwError(); cameraList = new List <Camera>(); groupList = new List <CameraGroup>(); nodeRelationListT = new List <NodeRelation>(); if (this.cameraOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { #region 深度克隆数据 foreach (KeyValuePair <string, TiandyCamera> tiandyCameraKeyValue in this.tiandyCameraDictionary) { TiandyCamera tiandyCamera = tiandyCameraKeyValue.Value; //从缓存获取 Camera camera = new Camera(tiandyCamera.No, tiandyCamera.Name); cameraList.Add(camera); } foreach (KeyValuePair <string, CameraGroup> groupDicKeyValue in this.groupDic) { CameraGroup cameraGroupTemp = new CameraGroup(groupDicKeyValue.Value.No, groupDicKeyValue.Value.Name); groupList.Add(cameraGroupTemp); } foreach (NodeRelation nodeRelation in this.nodeRelationList) { NodeRelation nodeRelationTemp = new NodeRelation(nodeRelation.No, nodeRelation.Path, nodeRelation.Type); nodeRelationListT.Add(nodeRelationTemp); } #endregion } catch (Exception e) { err.SetErrorNo(CgwError.GET_ALL_CAMERAS_FAILED); logEx.Error("Get all cameras failed.Execption message:{0}", e.Message); return(err); } finally { this.cameraOperateLock.ExitReadLock(); } } monitorManageServiceGetCameraList.Start(); logEx.Info("Get all cameras success."); return(err); }
/// <summary> /// 停止预览 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns>成功返回0,失败返回错误码</returns> public SmcErr StopReceiveVideo(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.StopReceiveVideo({0}).", cameraNo); SmcErr err = new CgwError(); //需要停止的预览句柄 int needToStopHandel = CgwConst.START_RECEIVE_VIDEO_DATA_FAILED; if (this.handelOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraVideoHandeDic.ContainsKey(cameraNo)) { needToStopHandel = this.cameraVideoHandeDic[cameraNo]; this.videoHandleCameraDic.Remove(needToStopHandel); this.cameraVideoHandeDic.Remove(cameraNo); } else { logEx.Warn("Stop Receive camera video data failed. Don't need to end the preview.Camera No:{0}.", cameraNo); //如果预览句柄不存在,不需要处理,直接返回 return(err); } } catch (Exception ex) { err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Error("Stop Receive camera video data failed.Execption message:{0}", ex.Message); return(err); } finally { this.handelOperateLock.ExitWriteLock(); } } //调用sdk的停止方法,放在handelOperateLock外面,防止长时间占用锁 if (needToStopHandel != CgwConst.START_RECEIVE_VIDEO_DATA_FAILED) { int result = this.ivsSdkClient.StopRealPlay(needToStopHandel); //如果不为0,表示预览失败 if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Error("Stop Receive camera video data failed.Ivs sdk error code:{0}", result); return(err); } logEx.Info("Stop Receive camera video data success.Camera No:{0},Handle:{1}.", cameraNo, needToStopHandel); } return(err); }
/// <summary> /// 初始化天地伟业监控平台 /// </summary> /// <param name="monitorConfigElement">监控平台配置节点</param> /// <returns></returns> public SmcErr Load(XmlElement monitorConfigElement) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.Load()."); SmcErr err = new CgwError(); string userLevel = ""; //解析xml节点,获取所需参数 try { #region Tiandy视频监控平台(Easy7)连接信息 this.monitorId = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.ID_TAG); userLevel = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PTZCONTROLLEVEL_TAG); string httpUser = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PLATFORM_USER_TAG); string httpPassword = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PLATFORM_PASSWORD_TAG); string httpUrl = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PLATFORM_URL_TAG); string mediaServerId = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.MEDIASERVER_SERVERID_TAG); #endregion this.httpClient = new TiandyHttpClient(httpUrl, httpUser, httpPassword); //使用线程轮询加载监控平台 Thread loaderThread = new Thread(LoaderThread); loaderThread.Start(mediaServerId); } catch (Exception e) { err.SetErrorNo(CgwError.MONITOR_CONFIG_FILE_INVALID); logEx.Error("Load Tiandy monitor failed.Execption message:{0}.", e.Message); return(err); } this.sdkClient = new TiandySdkClient(); //如果控制级别配置错误,只记录错误日志,不向外报错 try { this.sdkClient.PtzControlLevel = int.Parse(userLevel); } catch (Exception e) { logEx.Error("Ptz Control Level is invalid.Execption message:{0}.", e.Message); this.sdkClient.PtzControlLevel = CgwConst.PTZ_CONTROL_LEVEL; } logEx.Info("Load video monitor success.Monitor id:{0}.", this.monitorId); return(err); }
/// <summary> /// 获取软终端被叫sip端口号 /// </summary> /// <param name="sipPort"></param> /// <returns></returns> public SmcErr GetSipPort(out uint sipPort) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: CgwService.GetSipPort"); SmcErr err = new CgwError(); sipPort = (uint)ConfigSettings.CgwChanelCallPort; logEx.Debug("sipPort = {0}", sipPort); if (0 == sipPort) { err.SetErrorNo(CgwError.ERR_CGW_CONFIGURE_FORMAT); } return(err); }
/// <summary> /// 保持连接 /// </summary>] public SmcErr KeepAliver(string sessionID) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(sessionID); if (err.IsSuccess()) { logEx.Trace("KeepAlive Successful"); } else { logEx.Error("KeepAlive failed,ErrNo :{0}", err.ErrNo); } return(err); }
/// <summary> /// 设置麦克风状态 /// </summary> /// <param name="cameraNo"></param> /// <param name="isOn">麦克风是否开启</param> /// <returns></returns> public SmcErr SetMic(string cameraNo, bool isOn) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.SetMic({0},{1}).", cameraNo, isOn); SmcErr err = new CgwError(); if (this.micOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraMicStatusDic.ContainsKey(cameraNo)) { this.cameraMicStatusDic[cameraNo] = isOn; } else { this.cameraMicStatusDic.Add(cameraNo, isOn); } } finally { this.micOperateLock.ExitWriteLock(); } } logEx.Info("Set Mic status success.Camera no:{0},isOn:{1}).", cameraNo, isOn); return err; }
/// <summary> /// 重发I帧 /// 2013-7-15,监控平台自动定时发I帧,默认是4S内,因此重发I帧作用不大,还有可能造成内存泄露 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns></returns> public SmcErr MakeIFrame(string cameraNo) { //NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); //logEx.Trace("Enter: TiandyVideoMonitor.MakeIFrame({0}).", cameraNo); SmcErr err = new CgwError(); //TiandyCamera camera = null; //Host host = null; //if (this.cameraOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME)) //{ // try // { // if (!this.tiandyCameraDictionary.ContainsKey(cameraNo)) // { // err.SetErrorNo(CgwError.CAMERA_NOT_FOUND); // logEx.Error("Make I frame failed.Camera No is not found.Camera No:{0}.", cameraNo); // return err; // } // camera = this.tiandyCameraDictionary[cameraNo]; // host = this.hostDictionary[camera.HostNo]; // } // catch (Exception e) // { // err.SetErrorNo(CgwError.MAKE_I_FRAME_FAILED); // logEx.Error("Make I frame failed.Camera No:{0},Execption message:{1}", cameraNo, e.Message); // return err; // } // finally // { // this.cameraOperateLock.ExitReadLock(); // } //} //if (camera == null) //{ // err.SetErrorNo(CgwError.MAKE_I_FRAME_FAILED); // logEx.Error("Make I frame failed.Camera No is not found.Camera No:{0}", cameraNo); // return err; //} //if (this.sdkClient.MakeIFrame(host.No, camera.Channel, host.MediaServerNo)) //{ // logEx.Info("Make I frame success.Camera No:{0}", cameraNo); //} //else //{ // err.SetErrorNo(CgwError.MAKE_I_FRAME_FAILED); // logEx.Error("Make I frame failed.Camera No:{0}", cameraNo); //} return err; }
/// <summary> /// 获取监控摄像头列表刷新状态,返回结果为0是表示刷新完毕,为1是刷新操作中。当查询刷新状态为0时,可调用获取监控摄像头列表接口,获取刷新后监控摄像头列表 /// </summary> /// <param name="refreshStatus">刷新状态</param> /// <returns></returns> public SmcErr GetRefreshStatus(out SmcErr refreshStatus) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.GetRefreshStatus"); SmcErr err = new CgwError(); refreshStatus = new SmcErr(); refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END; if (refreshMonitorCameraOperateLock.TryEnterWriteLock(CgwConst.EFRESH_MONITOR_CAMERA_WAIT_TIME)) { try { refreshStatus.ErrNo = isRefreshSucess ? CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END : CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_FAILED; } finally { refreshMonitorCameraOperateLock.ExitWriteLock(); } } else { refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_EXECUTING; } logEx.Info("GetRefreshStatus success."); return err; }
/// <summary> /// 停止预览 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns>成功返回0,失败返回错误码</returns> public SmcErr StopReceiveVideo(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.StopReceiveVideo({0}).", cameraNo); SmcErr err = new CgwError(); //需要停止的预览句柄 int needToStopHandel = CgwConst.START_RECEIVE_VIDEO_DATA_FAILED; if (this.handelOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraVideoHandeDic.ContainsKey(cameraNo)) { needToStopHandel = this.cameraVideoHandeDic[cameraNo]; this.videoHandleCameraDic.Remove(needToStopHandel); this.cameraVideoHandeDic.Remove(cameraNo); } else { logEx.Warn("Stop Receive camera video data failed. Don't need to end the preview.Camera No:{0}.", cameraNo); //如果预览句柄不存在,不需要处理,直接返回 return err; } } catch (Exception ex) { err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Error("Stop Receive camera video data failed.Execption message:{0}", ex.Message); return err; } finally { this.handelOperateLock.ExitWriteLock(); } } //调用sdk的停止方法,放在handelOperateLock外面,防止长时间占用锁 if (needToStopHandel != CgwConst.START_RECEIVE_VIDEO_DATA_FAILED) { int result = this.ivsSdkClient.StopRealPlay(needToStopHandel); //如果不为0,表示预览失败 if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Error("Stop Receive camera video data failed.Ivs sdk error code:{0}", result); return err; } logEx.Info("Stop Receive camera video data success.Camera No:{0},Handle:{1}.", cameraNo, needToStopHandel); } return err; }
/// <summary> /// 启动摄像头预览 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns></returns> public SmcErr StartReceiveVideo(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.StartReceiveVideo({0}).", cameraNo); SmcErr err = new CgwError(); int handle; logEx.Trace("Call ivsSdkClient.StartRealPlayCBRaw({0}).", cameraNo); int result = this.ivsSdkClient.StartRealPlayCBRaw(cameraNo, out handle); //如果不为0,表示预览失败 if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { err.SetErrorNo(CgwError.START_RECEIVE_VIDEO_FAILED); logEx.Error("Start Receive camera video data failed.Camera No:{0}.Ivs sdk error code:{1}", cameraNo, result); return err; } else { logEx.Info("Start Receive camera video data success.Camera No:{0},Handle:{1}.", cameraNo, handle); } //预览成功,需要停止原来的预览,并将预览句柄添加到缓存 //需要停止的预览句柄 int needToStopHandel = CgwConst.START_RECEIVE_VIDEO_DATA_FAILED; if (this.handelOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { //如果预览句柄已经存在,删除掉原来的句柄,用新的句柄替换 if (this.cameraVideoHandeDic.ContainsKey(cameraNo)) { needToStopHandel = this.cameraVideoHandeDic[cameraNo]; this.videoHandleCameraDic.Remove(needToStopHandel); this.cameraVideoHandeDic.Remove(cameraNo); } this.cameraVideoHandeDic.Add(cameraNo, handle); MediaDataSender mediaDataSender = new MediaDataSender(cameraNo, this.dataCallBack); this.videoHandleCameraDic.Add(handle, mediaDataSender); } finally { this.handelOperateLock.ExitWriteLock(); } } //重新预览后,更新了预览句柄,需要将原来的预览停止,放在handelOperateLock外面,防止长时间占用锁 if (needToStopHandel != CgwConst.START_RECEIVE_VIDEO_DATA_FAILED) { result = this.ivsSdkClient.StopRealPlay(needToStopHandel); //如果不为0,表示停止原来的预览失败,只记录日志,不返回错误,不设置错误码 if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Error("Get a new preview success. But stop old preview failed.CameraNo:{0},Ivs sdk error code:{0}", cameraNo, result); return err; } } return err; }
/// <summary> /// 重发I帧(暂不支持) /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns></returns> public SmcErr MakeIFrame(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.MakeIFrame({0}).", cameraNo); SmcErr err = new CgwError(); return err; }
/// <summary> /// 保持连接 /// </summary>] public SmcErr KeepAliver(string sessionID) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(sessionID); if (err.IsSuccess()) { logEx.Trace("KeepAlive Successful"); } else { logEx.Error("KeepAlive failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 获取摄像头列表及分组信息 /// </summary> /// <param name="fromMonitorSys">如果该值为true,则实时从监控平台获取,否则从融合网关缓存获取</param> /// <param name="cameraList">摄像头列表</param> /// <param name="groupList">组信息</param> /// <param name="nodeRelationList">分组关系</param> /// <returns></returns> public SmcErr GetAllCameras(PlatformType platformType, PagesParam pageParam, out List<Camera> cameraList, out List<CameraGroup> groupList, out List<NodeRelation> nodeRelationList, out PageInfo pagesInfo, PlatformLicenseInfo licenseInfo = null) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); cameraList = null; groupList = null; nodeRelationList = null; pagesInfo = null; err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().GetAllCameras(pageParam, out cameraList, out groupList, out nodeRelationList, out pagesInfo, licenseInfo); } if (err.IsSuccess()) { logEx.Info("MonitorManageService QueryMonitorCamera Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService QueryMonitorCamera failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 停止云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommandType">命令类型</param> /// <returns></returns> public SmcErr StopControlPtz(string cameraNo, PtzCommandType ptzCommandType) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().StopControlPtz(cameraNo, ptzCommandType); } if (err.IsSuccess()) { logEx.Info("MonitorManageService StopControlPtz Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService StopControlPtz failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 启动摄像头预览 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns></returns> public SmcErr StartReceiveVideo(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.StartReceiveVideo({0}).", cameraNo); SmcErr err = new CgwError(); TiandyCamera camera = null; Host host = null; //摄像头所连接的流媒体服务器 MediaServer cameraMediaServer = null; if (this.cameraOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (!this.tiandyCameraDictionary.ContainsKey(cameraNo)) { err.SetErrorNo(CgwError.CAMERA_NOT_FOUND); logEx.Error("Start Receive camera video data failed.Camera No is not found.Camera No:{0}", cameraNo); return err; } camera = this.tiandyCameraDictionary[cameraNo]; host = this.hostDictionary[camera.HostNo]; cameraMediaServer = this.mediaServerDictionary[host.MediaServerNo]; } catch (Exception e) { err.SetErrorNo(CgwError.START_RECEIVE_VIDEO_FAILED); logEx.Error("Start Receive camera video data failed.Camera No:{0},Execption message:{1}", cameraNo, e.Message); return err; } finally { this.cameraOperateLock.ExitReadLock(); } } if (camera == null) { err.SetErrorNo(CgwError.START_RECEIVE_VIDEO_FAILED); logEx.Error("Start Receive camera video data failed.Camera No is not found.Camera No:{0}", cameraNo); return err; } RealPlayInfo real = new RealPlayInfo(); real.ch = camera.Channel; real.data_type = (int)TiandyDateType.PRIMARY; real.hPlayWnd = null; int result = this.sdkClient.StartReceiveVideo(host.No, cameraMediaServer, ref real); //如果为负数,表示预览失败 if (result < 0) { err.SetErrorNo(CgwError.START_RECEIVE_VIDEO_FAILED); logEx.Error("Start Receive camera video data failed.Camera No:{0}.", cameraNo); return err; } else { //需要停止的预览句柄 int needToStopHandel = CgwConst.START_RECEIVE_VIDEO_DATA_FAILED; if (this.handelOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { //如果预览句柄已经存在,删除掉原来的句柄,用新的句柄替换 if (this.cameraVideoHandeDic.ContainsKey(cameraNo)) { needToStopHandel = this.cameraVideoHandeDic[cameraNo]; this.videoHandleCameraDic.Remove(needToStopHandel); this.cameraVideoHandeDic.Remove(cameraNo); } this.cameraVideoHandeDic.Add(cameraNo, result); this.videoHandleCameraDic.Add(result, cameraNo); } finally { this.handelOperateLock.ExitWriteLock(); } } logEx.Info("Start Receive camera video data success.Camera No:{0},Handle:{1}.", cameraNo, result); //重新预览后,更新了预览句柄,需要将原来的预览停止,放在handelOperateLock外面,防止长时间占用锁 if (needToStopHandel != CgwConst.START_RECEIVE_VIDEO_DATA_FAILED) { this.sdkClient.StopReceiveVideo(needToStopHandel); } } return err; }
/// <summary> /// 设置摄像头麦克风状态 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="isOn">麦克风是否开启</param> /// <returns></returns> public SmcErr SetMic(string cameraNo, bool isOn) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().SetMic(cameraNo, isOn); } if (err.IsSuccess()) { logEx.Info("MonitorManageService SetMic Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService SetMic failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 连接融合网关 /// </summary> /// <param name="password">连接字符串</param> /// <returns></returns> public SmcErr Connect(out string sessionID) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); sessionID = ""; if (isLoadSuccess == false) { err.SetErrorNo(CgwError.ERR_CGW_IS_LOADING); return err; } //获取SessionManage中Session个数 if (SessionManage.Instance().GetSessionsCount() == 0) { Guid sessionGuid = Guid.NewGuid(); sessionID = OperationContext.Current.SessionId; currentSessionID = sessionID; //保存至CGW的session管理中 CgwSession CgwSession = new CgwSession(sessionGuid, OperationContext.Current.SessionId); MessageProperties properties = OperationContext.Current.IncomingMessageProperties; //获取传进的消息属性 RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; //获取消息发送的远程终结点IP和端口 if (endpoint != null) { CgwConst.ClientIp = endpoint.Address; // 获取发送消息的客户端的 IP 地址。 logEx.Info("Client Connect MonitorManageService Successful,Current.Client IP is : {0}", CgwConst.ClientIp); } else { logEx.Info("Client Connect MonitorManageService Successful,Current.Client IP is null."); } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_SESSION_COUNT_MAX); logEx.Warn("Session Count is Top Of Max number !"); } return err; }
/// <summary> /// 开始云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommand">命令类型</param> /// <param name="param">命令参数(速度、倍数)</param> /// <returns></returns> public SmcErr StartControlPtz(string cameraNo, PtzCommandType ptzCommand, int param) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.StartControlPtz({0},{1},{2}).", cameraNo, ptzCommand, param); SmcErr err = new CgwError(); //将ptz命令转换成IVS的命令 string name = Enum.GetName(typeof(PtzCommandType), ptzCommand); if (Enum.IsDefined(typeof(IvsPtzCommandType), name)) { IvsPtzCommandType ivsPtzCommandType = (IvsPtzCommandType)Enum.Parse(typeof(IvsPtzCommandType), name); logEx.Trace("Call ivsSdkClient.StartPtzControl({0},{1},{2}).", cameraNo, (int)ivsPtzCommandType, param); int result = this.ivsSdkClient.StartPtzControl(cameraNo, (int)ivsPtzCommandType, param.ToString()); //如果为0,表示成功 if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Start control ptz success.Camera No:{0}.", cameraNo); } else { err.SetErrorNo(CgwError.START_CONTROL_PTZ_FAILED); logEx.Error("Start control ptz failed.Camera No:{0}.Ivs sdk error code:{1}.", cameraNo, result); return err; } } else { err.SetErrorNo(CgwError.START_CONTROL_PTZ_FAILED); logEx.Error("The ivs monitor is not support the command.ptzCommand:{0}.", ptzCommand); return err; } return err; }
/// <summary> /// 断开监控管理连接 /// </summary> /// <returns></returns> public SmcErr Disconnect() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); if (OperationContext.Current != null) { //string strSessionId = OperationContext.Current.SessionId; string strSessionId = currentSessionID; if (!string.IsNullOrEmpty(strSessionId)) { err = SessionManage.Instance().RemoveSessionBySessionId(strSessionId); logEx.Info("Client DisConnect MonitorManageService Successful,Current.Cgw IP is : {0}", CgwConst.ClientIp); } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); logEx.Warn("Current SessionId is null ! "); } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); logEx.Warn("Current SessionId is null ! "); } return err; }
/// <summary> /// 停止云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommand">命令类型</param> /// <returns></returns> public SmcErr StopControlPtz(string cameraNo, PtzCommandType ptzCommand) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: IvsVideoMonitor.StopControlPtz({0}).", cameraNo); SmcErr err = new CgwError(); logEx.Trace("Call ivsSdkClient.StopPtzControl({0}).", cameraNo); int result = this.ivsSdkClient.StopPtzControl(cameraNo); //如果为0,表示成功 if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Stop control ptz success.Camera No:{0}.", cameraNo); } else { //直接将IVS的错误码返回 err.SetErrorNo(CgwError.STOP_CONTROL_PTZ_FAILED); logEx.Error("Stop control ptz failed.Camera No:{0}.Ivs sdk error code:{1}.", cameraNo, result); return err; } return err; }
/// <summary> /// 停止云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommand">命令类型</param> /// <returns></returns> public SmcError.SmcErr StopControlPtz(string cameraNo, PtzCommandType ptzCommandType) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: eLTEVideoMonitor.StopControlPtz({0}).", cameraNo); SmcErr err = new CgwError(); ELTE_RESULT result = (ELTE_RESULT)lteSdkClient.PTZControl(Convert.ToInt32(cameraNo), (uint)eLTEPTZControlCode.STOP_SEQ, 1); if (result != ELTE_RESULT.RET_SUCCESS) { err.SetErrorNo(CgwError.START_CONTROL_PTZ_FAILED); logEx.Error("StopControlPtz failed.eLTE sdk error code:{0}", result); return err; } else { logEx.Debug("StopControlPtz Success"); } return err; }
/// <summary> /// 注销IVS监控平台资源 /// </summary> /// <returns></returns> public SmcErr Unload() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Info("Enter: IvsVideoMonitor.Unload()."); SmcErr err = new CgwError(); loadResult = true; //停止定时器 this.updateCameraTimer.Stop(); logEx.Trace("Call ivsSdkClient.Logout()."); int result = this.ivsSdkClient.Logout(); logEx.Trace("Call ivsSdkClient.Cleanup()."); result = this.ivsSdkClient.Cleanup(); if (result == CgwConst.IVS_SDK_SUCCESS_TAG) { logEx.Info("Unload video monitor success.Monitor id:{0}.", this.monitorId); } else { err.SetErrorNo(CgwError.MONITOR_UDLOAD_FAILED); logEx.Error("Unload video monitor failed.Monitor id:{0}.", this.monitorId); } return err; }
/// <summary> /// 停止预览摄像头视频,并清理命名管道 /// </summary> /// <param name="cameraNo"></param> /// <returns></returns> public SmcErr StopReceiveVideoByPipe(string cameraNo) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().StopReceiveVideo(cameraNo); VideoPipe videoPipe = VideoPipeManage.Instance().DeleteVideoPipe(cameraNo); if (videoPipe == null) { logEx.Error("MonitorManageService StopReceiveVideoByPipe failed,VideoPipe is null,cameraNo = {0}", cameraNo); err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); } else { videoPipe.Stop(); } } if (err.IsSuccess()) { logEx.Info("MonitorManageService StopReceiveVideoByPipe Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService StopReceiveVideoByPipe failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 获取摄像头列表及分组信息 /// </summary> /// <param name="fromMonitorSys">如果该值为true,则实时从监控平台获取,否则从融合网关缓存获取</param> /// <param name="cameraList">摄像头列表</param> /// <param name="groupList">组信息</param> /// <param name="nodeRelationListT">分组关系</param> /// <returns></returns> public SmcErr GetAllCameras(out List<Camera> cameraList, out List<CameraGroup> groupList, out List<NodeRelation> nodeRelationListT) { monitorManageServiceGetCameraList.Stop(); isGetDevicesFinish = false; NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.GetAllCameras()."); SmcErr err = new CgwError(); cameraList = new List<Camera>(); groupList = new List<CameraGroup>(); nodeRelationListT = new List<NodeRelation>(); if (this.cameraOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { #region 深度克隆数据 foreach (KeyValuePair<string, TiandyCamera> tiandyCameraKeyValue in this.tiandyCameraDictionary) { TiandyCamera tiandyCamera = tiandyCameraKeyValue.Value; //从缓存获取 Camera camera = new Camera(tiandyCamera.No, tiandyCamera.Name); cameraList.Add(camera); } foreach (KeyValuePair<string, CameraGroup> groupDicKeyValue in this.groupDic) { CameraGroup cameraGroupTemp = new CameraGroup(groupDicKeyValue.Value.No, groupDicKeyValue.Value.Name); groupList.Add(cameraGroupTemp); } foreach (NodeRelation nodeRelation in this.nodeRelationList) { NodeRelation nodeRelationTemp = new NodeRelation(nodeRelation.No, nodeRelation.Path, nodeRelation.Type); nodeRelationListT.Add(nodeRelationTemp); } #endregion } catch (Exception e) { err.SetErrorNo(CgwError.GET_ALL_CAMERAS_FAILED); logEx.Error("Get all cameras failed.Execption message:{0}", e.Message); return err; } finally { this.cameraOperateLock.ExitReadLock(); } } monitorManageServiceGetCameraList.Start(); logEx.Info("Get all cameras success."); return err; }
/// <summary> /// 预览摄像头视频,使用命名管道方式接收数据 /// </summary> /// <param name="cameraNo"></param> /// <param name="pipeName"></param> /// <returns></returns> public SmcErr StartReceiveVideoByPipe(string cameraNo, out string pipeName) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); pipeName = string.Empty; err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().StartReceiveVideo(cameraNo); //开始监控平台成功、开始通过管道发送数据 if (err.IsSuccess()) { VideoPipeManage.Instance().DeleteVideoPipe(cameraNo); VideoPipe videoPipe = VideoPipeManage.Instance().AddVideoPipe(cameraNo); if (videoPipe != null) { pipeName = videoPipe.PipeName; videoPipe.Run(); logEx.Info("MonitorManageService StartReceiveVideoByPipe Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService AddVideoPipe failed.cameraNo = {0}", cameraNo); err.SetErrorNo(CgwError.START_RECEIVE_VIDEO_FAILED); StopReceiveVideoByPipe(cameraNo); } } else { logEx.Error("MonitorManageService StartReceiveVideoByPipe failed,ErrNo :{0}", err.ErrNo); } } else { logEx.Error("MonitorManageService StartReceiveVideoByPipe failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 初始化天地伟业监控平台 /// </summary> /// <param name="monitorConfigElement">监控平台配置节点</param> /// <returns></returns> public SmcErr Load(XmlElement monitorConfigElement) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.Load()."); SmcErr err = new CgwError(); string userLevel = ""; //解析xml节点,获取所需参数 try { #region Tiandy视频监控平台(Easy7)连接信息 this.monitorId = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.ID_TAG); userLevel = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PTZCONTROLLEVEL_TAG); string httpUser = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PLATFORM_USER_TAG); string httpPassword = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PLATFORM_PASSWORD_TAG); string httpUrl = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PLATFORM_URL_TAG); string mediaServerId = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.MEDIASERVER_SERVERID_TAG); #endregion this.httpClient = new TiandyHttpClient(httpUrl, httpUser, httpPassword); //使用线程轮询加载监控平台 Thread loaderThread = new Thread(LoaderThread); loaderThread.Start(mediaServerId); } catch (Exception e) { err.SetErrorNo(CgwError.MONITOR_CONFIG_FILE_INVALID); logEx.Error("Load Tiandy monitor failed.Execption message:{0}.", e.Message); return err; } this.sdkClient = new TiandySdkClient(); //如果控制级别配置错误,只记录错误日志,不向外报错 try { this.sdkClient.PtzControlLevel = int.Parse(userLevel); } catch (Exception e) { logEx.Error("Ptz Control Level is invalid.Execption message:{0}.", e.Message); this.sdkClient.PtzControlLevel = CgwConst.PTZ_CONTROL_LEVEL; } logEx.Info("Load video monitor success.Monitor id:{0}.", this.monitorId); return err; }
/// <summary> /// 停止预览 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <returns>成功返回0,失败返回错误码</returns> public SmcErr StopReceiveVideo(string cameraNo) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.StopReceiveVideo({0}).", cameraNo); SmcErr err = new CgwError(); //需要停止的预览句柄 int needToStopHandel = CgwConst.START_RECEIVE_VIDEO_DATA_FAILED; if (this.handelOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraVideoHandeDic.ContainsKey(cameraNo)) { needToStopHandel = this.cameraVideoHandeDic[cameraNo]; this.videoHandleCameraDic.Remove(needToStopHandel); this.cameraVideoHandeDic.Remove(cameraNo); } else { //不存在,表示已经删除,不返回错误 //err.SetErrorNo(CgwError.STOP_RECEIVE_VIDEO_FAILED); logEx.Warn("Stop Receive camera video data failed. Don't need to end the preview.Camera No:{0}.", cameraNo); } } finally { this.handelOperateLock.ExitWriteLock(); } } //调用sdk的停止方法,放在handelOperateLock外面,防止长时间占用锁 if (needToStopHandel != CgwConst.START_RECEIVE_VIDEO_DATA_FAILED) { this.sdkClient.StopReceiveVideo(needToStopHandel); } logEx.Info("Stop Receive camera video data success.Camera No:{0},Handle:{1}.", cameraNo, needToStopHandel); return err; }
/// <summary> /// 刷新监控摄像头列表 /// </summary> /// <returns></returns> public SmcErr RefreshMonitorCamera() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.RefreshMonitorCamera"); SmcErr err = new CgwError(); if (refreshMonitorCameraOperateLock.TryEnterWriteLock(CgwConst.EFRESH_MONITOR_CAMERA_WAIT_TIME)) { try { GetAllCamerasMethod(); //重新开始计时 updateCameraTimer.Stop(); updateCameraTimer.Start(); } finally { refreshMonitorCameraOperateLock.ExitWriteLock(); } } logEx.Info("RefreshMonitorCamera success."); return err; }
/// <summary> /// 获取监控摄像头列表刷新状态,返回结果为0是表示刷新完毕,为1是刷新操作中。当查询刷新状态为0时,可调用获取监控摄像头列表接口,获取刷新后监控摄像头列表 /// </summary> /// <param name="refreshStatus"></param> /// <returns></returns> public SmcErr GetRefreshStatus(out SmcErr refreshStatus) { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); refreshStatus = new SmcErr(); refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_END; err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { err = VideoMonitorManage.Instance().GetRefreshStatus(out refreshStatus); } else { refreshStatus.ErrNo = CgwError.ERR_DEVICE_LIST_REFRESH_STATUS_FAILED; } if (err.IsSuccess()) { logEx.Info("MonitorManageService GetRefreshStatus Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService GetRefreshStatus failed,ErrNo :{0}", err.ErrNo); } return err; }
/// <summary> /// 设置扬声器状态(暂不支持) /// </summary> /// <param name="cameraNo"></param> /// <param name="isOn">扬声器是否开启</param> /// <returns></returns> public SmcErr SetSpeaker(string cameraNo, bool isOn) { SmcErr err = new CgwError(); return err; }
/// <summary> /// 初始化IVS监控平台 /// </summary> /// <param name="monitorConfigElement">监控平台配置节点</param> /// <returns></returns> public SmcErr Load(XmlElement monitorConfigElement) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Info("Enter: IvsVideoMonitor.Load()."); SmcErr err = new CgwError(); try { //解析xml节点,获取所需参数 this.monitorId = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.ID_TAG); ip = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.IP_TAG); port = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PORT_TAG); user = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.USER_TAG); //password = CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PASSWORD_TAG); pwdByte = CommonFunction.EncryptStr2Byte(CommonFunction.GetSingleNodeValue(monitorConfigElement, CgwConst.PASSWORD_TAG),CgwConst.PASSWORD_TAG); //从配置文件读取的参数要简单判断一下合法性 //初始化之前设置日志路径 logEx.Trace("Call SetLogPath:{0}", ivsLogPath); this.ivsSdkClient.SetLogPath(ivsLogPath); logEx.Trace("Call ivsSdkClient.Init()."); //初始化 int result = this.ivsSdkClient.Init(); if (result != CgwConst.IVS_SDK_SUCCESS_TAG) { //直接将IVS的错误码返回 err.SetErrorNo(CgwError.MONITOR_LOAD_FAILED); logEx.Error("Init ivs monitor failed.Monitor id:{0}.ivs sdk error code:{1}.", this.monitorId, result); return err; } else { logEx.Info("Init ivs sdk success.Monitor id:{0}", this.monitorId); } //设置监控平台id this.ivsSdkClient.SetId(this.monitorId); this.sdkCallbackFunc = IvsRealPlayCallBackRaw; this.ivsSdkClient.SetRealPlayCBRawCallBackFunc(this.sdkCallbackFunc); //sdk事件回调 this.ivsEventCallBackFunc = IvsEventCallBackFunc; this.ivsSdkClient.SetEventCallBackFunc(this.ivsEventCallBackFunc); IvsLoginInfo loginInfo = new IvsLoginInfo(); loginInfo.Ip = ip; loginInfo.Port = int.Parse(port); loginInfo.User = user; //loginInfo.Pwd = password; loginInfo.Pwd = CommonFunction.DecryptByte2Str(pwdByte,CgwConst.PASSWORD_TAG); loadResult = false; //使用线程轮询加载监控平台 Thread loaderThread = new Thread(LoginThread); loaderThread.IsBackground = true; loaderThread.Start(loginInfo); } catch (Exception e) { err.SetErrorNo(CgwError.MONITOR_CONFIG_FILE_INVALID); logEx.Error("Load ivs monitor failed.Execption message:{0}.", e.Message); return err; } logEx.Info("Load video monitor success.Monitor id:{0}.", this.monitorId); return err; }
/// <summary> /// 停止云台控制,摄像头控制 /// </summary> /// <param name="cameraNo">摄像头编号</param> /// <param name="ptzCommand">命令类型</param> /// <returns></returns> public SmcErr StopControlPtz(string cameraNo, PtzCommandType ptzCommand) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.StopControlPtz({0}).", cameraNo); SmcErr err = new CgwError(); int handel = CgwConst.START_RECEIVE_VIDEO_DATA_FAILED; if (this.handelOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME)) { try { if (this.cameraVideoHandeDic.ContainsKey(cameraNo)) { handel = this.cameraVideoHandeDic[cameraNo]; } else { logEx.Warn("The camera was not Preview.Don't need to end the control.Camera No:{0}.", cameraNo); } } finally { this.handelOperateLock.ExitReadLock(); } } if (handel != CgwConst.START_RECEIVE_VIDEO_DATA_FAILED) { Client_PTZ_Command client_ptz_command = new Client_PTZ_Command(); client_ptz_command.start = false; //将ptz命令转换成天地伟业的命令 string name = Enum.GetName(typeof(PtzCommandType), ptzCommand); if (Enum.IsDefined(typeof(TiandyPtzCommandType), name)) { TiandyPtzCommandType tiandyPtzCommandType = (TiandyPtzCommandType)Enum.Parse(typeof(TiandyPtzCommandType), name); client_ptz_command.cmd = (int)tiandyPtzCommandType; } else { err.SetErrorNo(CgwError.STOP_CONTROL_PTZ_FAILED); logEx.Error("The tiandy monitor is not support the command.ptzCommand:{0}.", ptzCommand); return err; } bool result = this.sdkClient.ControlPtz(handel, client_ptz_command); if (result) { logEx.Info("Stop control camera ptz success.Camera No:{0}.", cameraNo); } else { err.SetErrorNo(CgwError.STOP_CONTROL_PTZ_FAILED); logEx.Error("Stop control camera ptz failed.Camera No:{0}.", cameraNo); } } else { err.SetErrorNo(CgwError.STOP_CONTROL_PTZ_FAILED); logEx.Error("Handel is not found. Stop control camera ptz failed. Camera No:{0}.", cameraNo); return err; } return err; }
/// <summary> /// 检查Session /// </summary> /// <returns></returns> private SmcErr CheckSession(string sessionID) { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); SmcErr err = new CgwError(); CgwSession CgwSession = null; if (OperationContext.Current != null) { //string strSessionId = OperationContext.Current.SessionId; string strSessionId = sessionID; err = SessionManage.Instance().GetSessionsBySessionId(strSessionId, out CgwSession); if (err.IsSuccess() == false || CgwSession == null) { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_SESSION_NULL); } else { if (CgwSession != null) { //更新Session最后访问时间 CgwSession.LastVisitedTime = DateTime.Now; //logEx.Trace("Current SessionId is:{0}, LastVisitedTime is :{1}", strSessionId, CgwSession.LastVisitedTime.ToLongTimeString()); logEx.Trace("LastVisitedTime is :{0}", CgwSession.LastVisitedTime.ToLongTimeString()); if (isLoadSuccess == false) { err.SetErrorNo(CgwError.ERR_CGW_IS_LOADING); } } } } else { err.SetErrorNo(CgwError.ERR_CGW_BUSINESS_CURRENTSESSION_NULL); } return err; }
/// <summary> /// 注销天地伟业监控平台资源 /// </summary> /// <returns></returns> public SmcErr Unload() { NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); logEx.Trace("Enter: TiandyVideoMonitor.Unload()."); SmcErr err = new CgwError(); //停止定时器 this.updateCameraTimer.Stop(); if (this.sdkClient.Unload()) { logEx.Info("Unload video monitor success.Monitor id:{0}.", this.monitorId); } else { err.SetErrorNo(CgwError.UNLOAD_MONITOR_FAILED); logEx.Error("Unload video monitor failed.Monitor id:{0}.", this.monitorId); } return err; }
/// <summary> /// 刷新监控摄像头列表 /// </summary> /// <returns></returns> public SmcErr RefreshMonitorCamera() { SmcErr err = new CgwError(); NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log); err = CheckSession(currentSessionID); //调任何接口前 需要判断监控平台是否加载成功 if (err.IsSuccess()) { Thread th = new Thread(new ThreadStart(() => { VideoMonitorManage.Instance().RefreshMonitorCamera(); })); th.Start(); } if (err.IsSuccess()) { logEx.Info("MonitorManageService RefreshMonitorCamera Successful,Current Cgw IP is : {0}", CgwConst.ClientIp); } else { logEx.Error("MonitorManageService RefreshMonitorCamera failed,ErrNo :{0}", err.ErrNo); } return err; }