Exemple #1
0
        public bool StartDynamicDecode(CameraConf camera, int iWnd)
        {
            CHCNetSDK.NET_DVR_PU_STREAM_CFG_V41 struStreamCfgV41 = new CHCNetSDK.NET_DVR_PU_STREAM_CFG_V41();
            CHCNetSDK.NET_DVR_DEC_STREAM_DEV_EX struStreamDev    = new CHCNetSDK.NET_DVR_DEC_STREAM_DEV_EX();

            struStreamCfgV41.dwSize                       = (uint)Marshal.SizeOf(struStreamCfgV41);
            struStreamCfgV41.byStreamMode                 = 1; //取流模式
            struStreamDev.struDevChanInfo.byChanType      = 0; //通道类型
            struStreamDev.struDevChanInfo.byChannel       = 0; //该参数无效,通道号见dwChannel
            struStreamDev.struDevChanInfo.byTransProtocol = 0; //传输协议类型0-TCP,1-UDP
            struStreamDev.struDevChanInfo.byFactoryType   = 0; //前端设备厂家类型,通过接口获取

            struStreamDev.struDevChanInfo.byAddress   = camera.CameraIP;
            struStreamDev.struDevChanInfo.wDVRPort    = (ushort)camera.CameraPort;
            struStreamDev.struDevChanInfo.dwChannel   = (uint)camera.DwChannel; //通道号
            struStreamDev.struDevChanInfo.byTransMode = (byte)camera.Mllx;      //传输码流模式
            struStreamDev.struDevChanInfo.sUserName   = camera.RasUser;
            struStreamDev.struDevChanInfo.sPassword   = camera.RasPassword;

            if (!string.IsNullOrEmpty(camera.MediaIP))                    //流媒体 IP 不为空
            {
                struStreamDev.struStreamMediaSvrCfg.byValid        = 1;   //启用流媒体
                struStreamDev.struStreamMediaSvrCfg.wDevPort       = 554; //端口
                struStreamDev.struStreamMediaSvrCfg.byTransmitType = 0;   //TCP
                struStreamDev.struStreamMediaSvrCfg.byAddress      = camera.MediaIP;
            }

            uint   dwUnionSize    = (uint)Marshal.SizeOf(struStreamCfgV41.uDecStreamMode);
            IntPtr ptrStreamUnion = Marshal.AllocHGlobal((Int32)dwUnionSize);

            Marshal.StructureToPtr(struStreamDev, ptrStreamUnion, false);
            struStreamCfgV41.uDecStreamMode = (CHCNetSDK.NET_DVR_DEC_STREAM_MODE)Marshal.PtrToStructure(ptrStreamUnion, typeof(CHCNetSDK.NET_DVR_DEC_STREAM_MODE));
            Marshal.FreeHGlobal(ptrStreamUnion);

            if (!CHCNetSDK.NET_DVR_MatrixStartDynamic_V41(m_userId, m_deChannel[iWnd], ref struStreamCfgV41))
            {
                uint errorCode = CHCNetSDK.NET_DVR_GetLastError();
                Log.GetLogger().ErrorFormat("NET_DVR_MatrixStartDynamic_V41 failed, error code = {0}", errorCode);
                return(false);
            }

            Log.GetLogger().InfoFormat("开启动态解码,考车{0},ecode={1},子窗口={2},mediaIP={3},码流={4}(0主码流,1子码流),{5}_{6}",
                                       m_kch, camera.CameraBH, m_deChannel[iWnd], camera.MediaIP, camera.Mllx, camera.CameraIP, camera.DwChannel);
            return(true);
        }
Exemple #2
0
        private bool HandleM17C52(int kch, int bh)
        {
            string key = string.Format("{0}_{1}", kch, bh);

            if (!m_dicCameras.ContainsKey(key))
            {
                Log.GetLogger().ErrorFormat("摄像头配置 {0} 不存在,请检查配置", key);
                return(false);
            }

            CameraConf camera = m_dicCameras[key];

            if (!m_dicCars[kch].StartDynamicDecode(camera, 1))
            {
                Log.GetLogger().ErrorFormat("HandleM17C52 画面切换失败,{0}", key);
                return(false);
            }

            Log.GetLogger().InfoFormat("HandleM17C52 画面切换,{0}", key);
            return(true);
        }
Exemple #3
0
        /// <summary>
        /// 项目完成
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="strZkzmbh">准考证明</param>
        /// <param name="strXmbh">项目编号</param>
        /// <returns></returns>
        private bool HandleM17C55(int kch, string strZkzmbh, string strXmbh)
        {
            //项目开始编号与项目完成编号不一样,车载没有把完成编号传过来,这里需要根据开始编号进行转换
            int xmBeginCode = string.IsNullOrEmpty(strXmbh) ? 0 : int.Parse(strXmbh);
            int xmEndCode   = 0;

            int kskm = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_ENV, BaseDefine.CONFIG_SECTION_CONFIG,
                                                 BaseDefine.CONFIG_KEY_KSKM, 0); //考试科目

            if (BaseDefine.CONFIG_VALUE_KSKM_3 == kskm)                          //科目三
            {
                string key = string.Format("考车{0}_2", kch);
                if (!m_dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("找不到 {0} 摄像头配置,请检查配置", key);
                    //return false;
                }
                else
                {
                    CameraConf camera = m_dicCameras[key];
                    m_dicCars[kch].StartDynamicDecode(camera, 1);   //车载视频动态,第二画面车外
                }

                //科目三的项目完成编号为,开始编号+700
                //218 --> 918
                if (xmBeginCode < BaseDefine.XMBH_700)
                {
                    xmEndCode = xmBeginCode + BaseDefine.XMBH_700;
                }
                else
                {
                    xmEndCode = xmBeginCode;
                }
            }
            else  //科目二
            {
                //项目编号转换,科目二专用,数据库升级后可以不需要这段代码
                xmBeginCode = GetKM2NewXmBh(xmBeginCode);

                //e.g. 201500 --> 201990
                // 201500 先除以 1000,得到 201。再乘以 1000,得到 201000。再加上 990,得到 201990。
                xmEndCode = (xmBeginCode / 1000) * 1000 + 990;

                //科目二切换到场地远景视频
                string key = BaseDefine.STRING_KM2_PUBLIC_VIDEO;
                if (!m_dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("找不到 {0} 摄像头配置,请检查配置", key);
                    //return false;
                }
                else
                {
                    CameraConf camera = m_dicCameras[key];
                    m_dicCars[kch].StartDynamicDecode(camera, 1);
                }
            }

            //获取项目类型
            if (!m_dicJudgeRules.ContainsKey(xmEndCode.ToString()))
            {
                Log.GetLogger().ErrorFormat("ErrorData 表不存在 {0} 记录,请检查配置", xmEndCode);
                return(false);
            }
            string xmlx = m_dicJudgeRules[xmEndCode.ToString()].JudgementType;

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("m_dicExamProcedures 字典找不到考车号 : {0}", kch);
                return(false);
            }
            ExamProcedure examProcedure = m_dicExamProcedures[kch];

            if (!examProcedure.Handle17C55(xmBeginCode, xmlx))
            {
                Log.GetLogger().ErrorFormat("examProcedure.Handle17C55 failed, kch={0}", kch);
                return(false);
            }

            return(true);
        }
Exemple #4
0
        /// <summary>
        /// 项目开始
        /// </summary>
        /// <param name="kch">考车号</param>
        /// <param name="zkzmbh">准考证明编号</param>
        /// <param name="xmbh">项目编号</param>
        /// <returns></returns>
        private bool HandleM17C52(int kch, string zkzmbh, string xmbh)
        {
            int xmCode = string.IsNullOrEmpty(xmbh) ? 0 : int.Parse(xmbh);
            int nWnd2  = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_DISPLAY, BaseDefine.CONFIG_SECTION_CONFIG,
                                                   BaseDefine.CONFIG_KEY_WND2, 1); //画面二状态

            Log.GetLogger().DebugFormat("nWnd2 = {0}", nWnd2);

            if (1 == nWnd2)     //值为1时进行项目动态切换
            {
                string key = string.Format("{0}_1", xmbh);
                Log.GetLogger().DebugFormat("camera key = {0}", key);
                if (!m_dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("摄像头 {0} 未配置,请检查配置文件。", key);
                    return(false);
                }

                CameraConf camera = m_dicCameras[key];
                m_dicCars[kch].StartDynamicDecode(camera, 1);   //第二画面进项目

                ////处理定点
                ////半坡停车时,车载会发 15010 摄像头编号过来,切换摄像头后,另外开一个线程,休眠几秒时间后,切换为原来的摄像头
                //if ((BaseDefine.XMBH_15010 == xmCode) || (BaseDefine.XMBH_15020 == xmCode) || (BaseDefine.XMBH_15030 == xmCode))
                //{
                //    Log.GetLogger().InfoFormat("定点:{0}", xmCode);

                //    if (BaseMethod.IsExistFile(BaseDefine.CONFIG_FILE_PATH_ZZIPChannel))
                //    {
                //        XmInfo xmInfo = new XmInfo(kch, xmCode);

                //        Thread QHThread = new Thread(new ParameterizedThreadStart(QHThreadProc));
                //        QHThread.Start(xmInfo);
                //    }

                //    return true;
                //}
            }

            //项目编号转换,科目二专用,数据库升级后可以不需要这段代码
            int xmCodeNew = GetKM2NewXmBh(xmCode);

            Log.GetLogger().DebugFormat("xmCodeNew = {0}", xmCodeNew);

            //获取项目类型(因为数据库里扣分类型和项目类型存在同一张表,所以这里参考C++代码,全部存在同一张字典里)
            if (!m_dicJudgeRules.ContainsKey(xmbh))
            {
                Log.GetLogger().ErrorFormat("扣分类型 {0} 未配置,请检查配置", xmbh);
                return(false);
            }
            string xmlx = m_dicJudgeRules[xmbh].JudgementType;  //项目类型

            if (!m_dicExamProcedures.ContainsKey(kch))
            {
                Log.GetLogger().ErrorFormat("m_dicExamProcedures 字典找不到考车号 : {0}", kch);
                return(false);
            }
            ExamProcedure examProcedure = m_dicExamProcedures[kch];

            if (!examProcedure.Handle17C52(xmCodeNew, xmlx))
            {
                Log.GetLogger().ErrorFormat("examProcedure.Handle17C52 failed, kch={0}", kch);
                return(false);
            }

            //try
            //{
            //    //使用 C++ dll 进行绘制
            //    Log.GetLogger().DebugFormat("kch={0}, zkzmbh={1}, xmCode={2}, kflx={3}", kch, zkzmbh, xmCodeNew, kflx);
            //    BaseMethod.TF17C52(kch, zkzmbh, xmCodeNew, kflx);
            //}
            //catch (Exception e)
            //{
            //    Log.GetLogger().ErrorFormat("TF17C52 catch an error : {0}, kch = {1}, zkzmbh = {2}, xmCodeNew = {3}, kflx = {4}",
            //        e.Message, kch, zkzmbh, xmCodeNew, kflx);
            //    return false;
            //}

            Log.GetLogger().InfoFormat("HandleM17C52 end, kch={0}, zkzmbh={1}", kch, zkzmbh);
            return(true);
        }
Exemple #5
0
        //开始运行
        private bool RunMap()
        {
            string     key        = string.Empty;
            CameraConf cameraConf = new CameraConf();

            //地图
            Image imgMap   = null;
            int   nLoadMap = BaseMethod.INIGetIntValue(BaseDefine.CONFIG_FILE_PATH_ENV, BaseDefine.CONFIG_SECTION_CONFIG,
                                                       BaseDefine.CONFIG_KEY_LOADMAP, 0);

            if (1 == nLoadMap)
            {
                try
                {
                    imgMap = Image.FromFile(BaseDefine.IMG_PATH_MAPN);
                }
                catch (Exception e)
                {
                    Log.GetLogger().ErrorFormat("Image.FromFile catch an error : {0}", e.Message);
                }
            }

            foreach (int iKch in dicCars.Keys)
            {
                Thread.Sleep(10);

                CarManager carManager = dicCars[iKch];

                //动态解码
                key = string.Format("考车{0}_1", iKch);
                if (!dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("{0} 摄像头未配置,请检查", key);
                }
                else
                {
                    cameraConf = dicCameras[key];
                    carManager.StartDynamicDecode(cameraConf, 0);
                }

                key = string.Format("考车{0}_2", iKch);
                if (!dicCameras.ContainsKey(key))
                {
                    Log.GetLogger().ErrorFormat("{0} 摄像头未配置,请检查", key);
                }
                else
                {
                    cameraConf = dicCameras[key];
                    carManager.StartDynamicDecode(cameraConf, 1);
                }

                try
                {
                    //被动解码
                    int thirdPH  = -1;
                    int fourthPH = -1;
                    if (carManager.StartPassiveDecode(2, ref thirdPH) && carManager.StartPassiveDecode(3, ref fourthPH))
                    {
                        ExamProcedure examProcedure = new ExamProcedure();
                        if (examProcedure.Init(m_userId, iKch, thirdPH, fourthPH, imgMap))
                        {
                            dicExamProcedures.Add(iKch, examProcedure);
                        }
                    }
                    else
                    {
                        Log.GetLogger().ErrorFormat("被动解码失败,kch={0}", iKch);
                    }
                }
                catch (Exception e)
                {
                    Log.GetLogger().ErrorFormat("catch an error : {0}", e.Message);
                }
            }

            return(true);
        }
Exemple #6
0
        /// <summary>
        /// 获取摄像头配置
        /// </summary>
        /// <returns></returns>
        private bool GetCameraConf()
        {
            dicCameras.Clear();

            string sql = string.Format("select {0},{1},{2},{3},{4},{5},{6},{7},{8} from {9} order by {10}",
                                       BaseDefine.DB_FIELD_BH,
                                       BaseDefine.DB_FIELD_SBIP,
                                       BaseDefine.DB_FIELD_YHM,
                                       BaseDefine.DB_FIELD_MM,
                                       BaseDefine.DB_FIELD_DKH,
                                       BaseDefine.DB_FIELD_TDH,
                                       BaseDefine.DB_FIELD_TRANSMODE,
                                       BaseDefine.DB_FIELD_MEDIAIP,
                                       BaseDefine.DB_FIELD_NID,
                                       BaseDefine.DB_TABLE_TBKVIDEO,
                                       BaseDefine.DB_FIELD_BH);

            try
            {
                DataSet ds = sqlDataProvider.RetriveDataSet(sql);
                if (null != ds)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        string bh        = (null == ds.Tables[0].Rows[i][0]) ? string.Empty : ds.Tables[0].Rows[i][0].ToString();
                        string sbip      = (null == ds.Tables[0].Rows[i][1]) ? string.Empty : ds.Tables[0].Rows[i][1].ToString();
                        string yhm       = (null == ds.Tables[0].Rows[i][2]) ? string.Empty : ds.Tables[0].Rows[i][2].ToString();
                        string mm        = (null == ds.Tables[0].Rows[i][3]) ? string.Empty : ds.Tables[0].Rows[i][3].ToString();
                        string dkh       = (null == ds.Tables[0].Rows[i][4]) ? string.Empty : ds.Tables[0].Rows[i][4].ToString();
                        string tdh       = (null == ds.Tables[0].Rows[i][5]) ? string.Empty : ds.Tables[0].Rows[i][5].ToString();
                        string transmode = (null == ds.Tables[0].Rows[i][6]) ? string.Empty : ds.Tables[0].Rows[i][6].ToString();
                        string mediaip   = (null == ds.Tables[0].Rows[i][7]) ? string.Empty : ds.Tables[0].Rows[i][7].ToString();
                        string nid       = (null == ds.Tables[0].Rows[i][8]) ? string.Empty : ds.Tables[0].Rows[i][8].ToString();

                        int iDkh       = string.IsNullOrEmpty(dkh) ? 8000 : int.Parse(dkh);          //端口号
                        int iTdh       = string.IsNullOrEmpty(tdh) ? -1 : int.Parse(tdh);            //通道号
                        int iTransmode = string.IsNullOrEmpty(transmode) ? 1 : int.Parse(transmode); //码流类型

                        CameraConf camera = new CameraConf(bh, sbip, yhm, mm, mediaip, iDkh, iTdh, iTransmode);

                        string key = bh + "_" + nid;
                        if (!dicCameras.ContainsKey(key))
                        {
                            dicCameras.Add(key, camera);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.GetLogger().ErrorFormat("catch an error : {0}", e.Message);
                return(false);
            }

            if (0 == dicCameras.Count)
            {
                Log.GetLogger().ErrorFormat("初始化摄像头信息失败,数据库摄像头表解析结果为空");
                return(false);
            }

            Log.GetLogger().InfoFormat("初始化摄像头信息成功");
            return(true);
        }