Example #1
0
        /// <summary>
        /// 开启录像
        /// </summary>
        /// <param name="strDeviceID"></param>
        /// <returns></returns>
        public static int Rec(string strDeviceID)
        {
            Guid DeviceID = new Guid(strDeviceID);

            Client.Entities.CameraList device = Class1.cameraList.Find(
                delegate(Client.Entities.CameraList camera)
            {
                return(camera.DeviceID.Equals(DeviceID));
            }
                );
            if (device == null)
            {
                return(-1);
            }

            Client.Entities.StreamMediaList streamMedia = Class1.streamMediaList.Find(
                delegate(Client.Entities.StreamMediaList sm)
            {
                return(sm.DeviceID.Equals(device.StreamMedia_DeviceID));
            });
            if (streamMedia == null)
            {
                return(-1);
            }
            string IP      = streamMedia.VideoIP;
            int    Channel = device.VideoChannel;

            CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
            //lpPreviewInfo.hPlayWnd = handle;//预览窗口
            lpPreviewInfo.lChannel        = Channel;                                                //预te览的设备通道
            lpPreviewInfo.dwStreamType    = 0;                                                      //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
            lpPreviewInfo.dwLinkMode      = 0;                                                      //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
            lpPreviewInfo.bBlocked        = true;                                                   //0- 非阻塞取流,1- 阻塞取流
            lpPreviewInfo.dwDisplayBufNum = 15;                                                     //播放库播放缓冲区最大缓冲帧数

            CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack); //预览实时流回调函数
            IntPtr pUser = new IntPtr();                                                            //用户数据

            if (!userIDList.ContainsKey(IP))
            {
                return(-1);
            }
            int m_lUserID = userIDList[IP];
            //打开预览 Start live view
            int m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, pUser);

            if (m_lRealHandle < 0)
            {
            }
            else
            {
                //录像保存路径和文件名 the path and file name to save
                string   sVideoFileName;
                DateTime dt = DateTime.Now;
                sVideoFileName = IP + "_" + Channel + dt.ToString("yyyyMMddHHmmss") + "报警.mp4";
                //预览成功
                //强制I帧 Make a I frame
                int lChannel = Channel; //通道号 Channel number
                CHCNetSDK.NET_DVR_MakeKeyFrame(m_lUserID, lChannel);

                //开始录像 Start recording
                if (CHCNetSDK.NET_DVR_SaveRealData(m_lRealHandle, path + sVideoFileName))
                {
                    RealHandleList.Add(IP + "," + Channel + "_3", m_lRealHandle);
                    RecInfo info = new RecInfo(sVideoFileName, dt, "报警录像");
                    RecDataClass.recInfo.Add(IP + "," + Channel + "_3", info);

                    //写入数据库
                    RecFileList recFileList = new RecFileList();
                    recFileList.CameraID     = strDeviceID;
                    recFileList.RecName      = sVideoFileName;
                    recFileList.RecRecFile   = path + sVideoFileName;
                    recFileList.RecStartDate = dt.ToString("yyyy-MM-dd");
                    recFileList.RecStartTime = dt.ToString("HH:mm:ss");
                    recFileList.RecType      = "3";
                    RecFileClass.AddStartTime(recFileList);
                }
                else
                {
                    return(-1);
                }
            }
            return(m_lRealHandle);
        }
Example #2
0
        private void btnPreview_Click(object sender, EventArgs e)
        {
            if (m_lUserID < 0)
            {
                MessageBox.Show("请先登录设备");
                return;
            }

            if (m_lRealHandle < 0)
            {
                CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                lpPreviewInfo.hPlayWnd        = pictureBox1.Handle; //预览窗口
                lpPreviewInfo.lChannel        = Int16.Parse("1");   //预te览的设备通道
                lpPreviewInfo.dwStreamType    = 0;                  //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
                lpPreviewInfo.dwLinkMode      = 0;                  //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
                lpPreviewInfo.bBlocked        = true;               //0- 非阻塞取流,1- 阻塞取流
                lpPreviewInfo.dwDisplayBufNum = 1;                  //播放库播放缓冲区最大缓冲帧数
                lpPreviewInfo.byProtoType     = 0;
                lpPreviewInfo.byPreviewMode   = 0;


                //流ID
                //if (textBoxID.Text != "")
                //{
                //    lpPreviewInfo.lChannel = -1;
                //    byte[] byStreamID = System.Text.Encoding.Default.GetBytes(textBoxID.Text);
                //    lpPreviewInfo.byStreamID = new byte[32];
                //    byStreamID.CopyTo(lpPreviewInfo.byStreamID, 0);
                //}


                if (RealData == null)
                {
                    RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数
                }

                IntPtr pUser = new IntPtr();//用户数据

                //打开预览 Start live view
                m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, pUser);
                if (m_lRealHandle < 0)
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    var str = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号
                    MessageBox.Show(str);
                    return;
                }
                else
                {
                    //预览成功
                    btnPreview.Text = "Stop Live View";
                }
            }
            else
            {
                //停止预览 Stop live view
                if (!CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle))
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    var str = "NET_DVR_StopRealPlay failed, error code= " + iLastErr;
                    MessageBox.Show(str);
                    return;
                }
                m_lRealHandle   = -1;
                btnPreview.Text = "Live View";
            }
            return;
        }
Example #3
0
        public void OpenCamera(int lChannel)
        {
            _Channel = lChannel;
            IsOpen   = false;
            if (IPAddress == "")
            {
                return;
            }
            if (_Port <= 0)
            {
                return;
            }

            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
            if (user < 0)
            {
                string DVRIPAddress  = IPAddress; //设备IP地址或者域名
                Int32  DVRPortNumber = _Port;     //设备服务端口号
                string DVRUserName   = Account;   //设备登录用户名
                string DVRPassword   = Password;  //设备登录密码

                CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();

                //登录设备 Login the device
                user = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo);
                if (user < 0)
                {
                    //iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    //str = "NET_DVR_Login_V30 failed, error code= " + iLastErr; //登录失败,输出错误号
                    //MessageBox.Show(str);
                    return;
                }
                else
                {
                    //登录成功
                    if (playHandle < 0)
                    {
                        CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                        lpPreviewInfo.hPlayWnd        = this.Handle; //预览窗口
                        lpPreviewInfo.lChannel        = lChannel;    //预te览的设备通道
                        lpPreviewInfo.dwStreamType    = 0;           //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
                        lpPreviewInfo.dwLinkMode      = 0;           //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
                        lpPreviewInfo.bBlocked        = true;        //0- 非阻塞取流,1- 阻塞取流
                        lpPreviewInfo.dwDisplayBufNum = 15;          //播放库播放缓冲区最大缓冲帧数
                        lpPreviewInfo.byProtoType     = 0;
                        lpPreviewInfo.byPreviewMode   = 0;

                        CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack); //预览实时流回调函数
                        IntPtr pUser = new IntPtr();                                                            //用户数据

                        //打开预览 Start live view
                        playHandle = CHCNetSDK.NET_DVR_RealPlay_V40(user, ref lpPreviewInfo, null /*RealData*/, pUser);
                        if (playHandle < 0)
                        {
                            //iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                            //str = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号
                            //MessageBox.Show(str);
                            return;
                        }
                        else
                        {
                            //预览成功
                            IsOpen = true;
                        }
                    }
                }
            }


            //bool tag = HikSDK.NET_DVR_Init();
            //ushort uPort = (ushort)_Port;
            //HikSDK.LPNET_DVR_DEVICEINFO_V301 dev = new HikSDK.LPNET_DVR_DEVICEINFO_V301();
            //user = HikSDK.NET_DVR_Login_V30(IPAddress, uPort, Account, Password, out dev);

            //uint dwReturned = 0; //初始化实际接收的数据长度指针
            //IntPtr lptr;
            //HikSDK.NET_DVR_COMPRESSIONCFG_V30 PICCFG = new HikSDK.NET_DVR_COMPRESSIONCFG_V30();
            //int size = Marshal.SizeOf(PICCFG);//返回对象的大小
            //lptr = Marshal.AllocHGlobal(size);//根据大小分配内存
            //if (HikSDK.NET_DVR_GetDVRConfig(user, 1040, 5, lptr, (uint)size, ref dwReturned))
            //{
            //    PICCFG = (HikSDK.NET_DVR_COMPRESSIONCFG_V30)Marshal.PtrToStructure(lptr, typeof(HikSDK.NET_DVR_COMPRESSIONCFG_V30));
            //}
            ////根据实际设置网络子码流
            //Marshal.FreeHGlobal(lptr);
            //PICCFG.struNetPara.byPicQuality = 0;
            //PICCFG.struNetPara.dwVideoBitrate = 12;
            //PICCFG.struNetPara.byBitrateType = 0;

            ////根据实际设置 主码流
            ////PICCFG.struNormHighRecordPara.byPicQuality = 0;
            ////PICCFG.struNormHighRecordPara.dwVideoBitrate = 12;
            ////PICCFG.struNormHighRecordPara.byBitrateType = 0;

            ////网传子码流 主码流
            //byte[] bytes1;
            //int size2 = Marshal.SizeOf(PICCFG);
            //IntPtr buffer = Marshal.AllocHGlobal(size);
            //try
            //{
            //    Marshal.StructureToPtr(PICCFG, buffer, false);
            //    bytes1 = new byte[size];
            //    Marshal.Copy(buffer, bytes1, 0, size);

            //}
            //finally
            //{
            //    Marshal.FreeHGlobal(buffer);
            //}

            //HikSDK.NET_DVR_CLIENTINFO cl = new HikSDK.NET_DVR_CLIENTINFO();
            //cl.hPlayWnd = this.Handle;
            //cl.lChannel = lChannel;
            //cl.lLinkMode = 1;
            ////return;  /////////*******************************************************如果下载或回放,必须先停止播放
            ////playHandle = HikSDK.NET_DVR_RealPlay(user, ref cl);
            //playHandle = HikSDK.NET_DVR_RealPlay_V30(user, ref cl, null, 1, false);
            //if (playHandle >= 0)
            //{
            //    IsOpen = true;
            //}
        }
Example #4
0
        private void btnPreview_Click(object sender, System.EventArgs e)//ʵʱÏÔʾ
        {
            if (m_lUserID[m_lUserID_flag] < 0)
            {
                MessageBox.Show("Please login the device firstly");
                return;
            }

            if (m_lRealHandle[m_lRealHandle_flag] < 0)
            {
                CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                if (m_lRealHandle_flag == 0)
                {
                    lpPreviewInfo.hPlayWnd = RealPlayWnd1.Handle;//Ô¤ÀÀ´°¿Ú
                }
                else if (m_lRealHandle_flag == 1)
                {
                    lpPreviewInfo.hPlayWnd = RealPlayWnd2.Handle;//Ô¤ÀÀ´°¿Ú
                }
                else if (m_lRealHandle_flag == 2)
                {
                    lpPreviewInfo.hPlayWnd = RealPlayWnd3.Handle;//Ô¤ÀÀ´°¿Ú
                }
                else if (m_lRealHandle_flag == 3)
                {
                    lpPreviewInfo.hPlayWnd = RealPlayWnd4.Handle;//Ô¤ÀÀ´°¿Ú
                }

                lpPreviewInfo.lChannel        = Int16.Parse(textBoxChannel.Text); //Ô¤teÀÀµÄÉ豸ͨµÀ
                lpPreviewInfo.dwStreamType    = 0;                                //ÂëÁ÷ÀàÐÍ£º0-Ö÷ÂëÁ÷£¬1-×ÓÂëÁ÷£¬2-ÂëÁ÷3£¬3-ÂëÁ÷4£¬ÒÔ´ËÀàÍÆ
                lpPreviewInfo.dwLinkMode      = 0;                                //Á¬½Ó·½Ê½£º0- TCP·½Ê½£¬1- UDP·½Ê½£¬2- ¶à²¥·½Ê½£¬3- RTP·½Ê½£¬4-RTP/RTSP£¬5-RSTP/HTTP
                lpPreviewInfo.bBlocked        = false;                            //0- ·Ç×èÈûÈ¡Á÷£¬1- ×èÈûÈ¡Á÷
                lpPreviewInfo.dwDisplayBufNum = 15;                               //²¥·Å¿â²¥·Å»º³åÇø×î´ó»º³åÖ¡Êý

                IntPtr pUser = new IntPtr();                                      //Óû§Êý¾Ý

                //´ò¿ªÔ¤ÀÀ Start live view
                m_lRealHandle[m_lRealHandle_flag] = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID[m_lUserID_flag], ref lpPreviewInfo, null /*RealData*/, pUser);
                if (m_lRealHandle[m_lRealHandle_flag] < 0)
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str      = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //Ô¤ÀÀʧ°Ü£¬Êä³ö´íÎóºÅ
                    MessageBox.Show(str);
                    return;
                }
                else
                {
                    //Ô¤ÀÀ³É¹¦
                    btnPreview.Text = "¹Ø±ÕÔ¤ÀÀ";
                }
            }
            else
            {
                //Í£Ö¹Ô¤ÀÀ Stop live view
                if (!CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle[m_lRealHandle_flag]))
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str      = "NET_DVR_StopRealPlay failed, error code= " + iLastErr;
                    MessageBox.Show(str);
                    return;
                }
                m_lRealHandle[m_lRealHandle_flag] = -1;
                btnPreview.Text = "´ò¿ªÔ¤ÀÀ";
            }
            return;
        }
Example #5
0
        private void Initvedio()
        {
            //this.Invoke((MethodInvoker)delegate
            //{
            if (FireControlRoomVideoFrameDto == null)
            {
                MessageBox.Show("获取视频连接信息失败,无法使用视频功能");
                //this.Invoke((MethodInvoker) delegate
                //{
                //    this.Text += "\t视频连接失败";
                //});
            }
            //停止预览 Stop live view
            if (m_lRealHandle >= 0)
            {
                CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
                //panel1.Invalidate();//刷新窗口 refresh the window
                m_lRealHandle = -1;

                //注销登录 Logout the device
                if (m_lUserID >= 0)
                {
                    CHCNetSDK.NET_DVR_Logout(m_lUserID);
                    m_lUserID = -1;
                }
                CHCNetSDK.NET_DVR_Cleanup();
                //btnOpenVideo.Text = "打开视频";
            }
            else
            {
                var m_bInitSDK = CHCNetSDK.NET_DVR_Init();
                if (m_bInitSDK == false)
                {
                    MessageBox.Show("视频初始化失败");
                    //this.Invoke((MethodInvoker) delegate
                    //{
                    //    this.Text += "\t视频初始化失败";
                    //});
                    return;
                }
                //修改为获取摄像头IP   PORT UNAME UPASSEORD 信息  2015.06.12  LEO
                //var cameraInfo = AppPara.getCameraInfoBySiteId(site.SID);

                string DVRIPAddress  = string.IsNullOrEmpty(FireControlRoomVideoFrameDto.VideoIP) ? "" : FireControlRoomVideoFrameDto.VideoIP;; ////DevicePoint.SiteIp; //设备IP地址或者域名 Device IP
                Int32  DVRPortNumber = Convert.ToInt32(FireControlRoomVideoFrameDto.VideoPort);                                                 //Convert.ToInt16(DevicePoint.SPPORT); //设备服务端口号 Device Port
                string DVRUserName   = FireControlRoomVideoFrameDto.VideoUserName;                                                              //DevicePoint.SPNAME; //设备登录用户名 User name to login
                string DVRPassword   = FireControlRoomVideoFrameDto.VideoPassword;                                                              // DevicePoint.SPPASSWORD; //设备登录密码 Password to login

                //string DVRIPAddress = "192.168.1.64"; ;////DevicePoint.SiteIp; //设备IP地址或者域名 Device IP
                //Int16 DVRPortNumber = 8000; //Convert.ToInt16(DevicePoint.SPPORT); //设备服务端口号 Device Port
                //string DVRUserName = "******"; //DevicePoint.SPNAME; //设备登录用户名 User name to login
                //string DVRPassword = "******";// DevicePoint.SPPASSWORD; //设备登录密码 Password to login


                //登录设备 Login the device
                m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword,
                                                        ref DeviceInfo);
                if (m_lUserID < 0)
                {
                    var iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    var str      = "NET_DVR_Login_V30 failed, error code= " + iLastErr;
                    //this.Invoke((MethodInvoker) delegate
                    //{
                    //    this.Text += "\t登录视频失败";
                    //});
                    //登录失败,输出错误号 Failed to login and output the error code
                    //DebugInfo(str);
                    //MessageBox.Show(str);
                    //labelControl1.Text = "登录视频失败";
                    return;
                }
                else
                {
                    //登录成功
                    //DebugInfo("NET_DVR_Login_V30 succ!");
                    //btnLogin.Text = "Logout";

                    var dwAChanTotalNum = (int)DeviceInfo.byChanNum;
                    //this.Invoke((MethodInvoker) delegate
                    //{
                    //    this.Text += "\t登录视频成功";
                    //});
                    //if (!IsAudio)
                    //    btnRecord.Visible = true;
                }


                if (m_lRealHandle < 0)
                {
                    CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                    this.Invoke((MethodInvoker) delegate
                    {
                        lpPreviewInfo.hPlayWnd = panel1.Handle;                                        //预览窗口 live view window
                    });
                    lpPreviewInfo.lChannel = Convert.ToInt32(FireControlRoomVideoFrameDto.VideoAisle); //iChannelNum[(int)iSelIndex];//预览的设备通道 the device channel number
                    //lpPreviewInfo.lChannel = 1; //iChannelNum[(int)iSelIndex];//预览的设备通道 the device channel number
                    lpPreviewInfo.dwStreamType = 0;                                                    //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
                    lpPreviewInfo.dwLinkMode   = 0;                                                    //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
                    lpPreviewInfo.bBlocked     = true;                                                 //0- 非阻塞取流,1- 阻塞取流

                    IntPtr pUser = IntPtr.Zero;                                                        //用户数据 user data

                    //打开预览 Start live view
                    m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, pUser);


                    if (m_lRealHandle < 0)
                    {
                        var iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                        var str      = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 failed to start live view, and output the error code.
                        //DebugInfo(str);
                        this.Invoke((MethodInvoker) delegate
                        {
                            //this.Text += "\t预览视频失败";
                        });
                        return;
                    }
                    //btnOpenVideo.Text = "关闭视频";
                }
            }
            //});
        }
Example #6
0
        private void btnPreview_Click(object sender, EventArgs e)
        {
            if (m_lUserID < 0)
            {
                MessageBox.Show("Please login the device firstly!");
                return;
            }

            if (m_bRecord)
            {
                MessageBox.Show("Please stop recording firstly!");
                return;
            }

            if (m_lRealHandle < 0)
            {
                CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                lpPreviewInfo.hPlayWnd        = RealPlayWnd.Handle;          //预览窗口 live view window
                lpPreviewInfo.lChannel        = iChannelNum[(int)iSelIndex]; //预览的设备通道 the device channel number
                lpPreviewInfo.dwStreamType    = 0;                           //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
                lpPreviewInfo.dwLinkMode      = 0;                           //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
                lpPreviewInfo.bBlocked        = true;                        //0- 非阻塞取流,1- 阻塞取流
                lpPreviewInfo.dwDisplayBufNum = 15;                          //播放库显示缓冲区最大帧数

                IntPtr pUser = IntPtr.Zero;                                  //用户数据 user data

                if (comboBoxView.SelectedIndex == 0)
                {
                    //打开预览 Start live view
                    m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, pUser);
                }
                else
                {
                    lpPreviewInfo.hPlayWnd = IntPtr.Zero;                             //预览窗口 live view window
                    m_ptrRealHandle        = RealPlayWnd.Handle;
                    RealData      = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack); //预览实时流回调函数 real-time stream callback function
                    m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, RealData, pUser);
                }

                if (m_lRealHandle < 0)
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str      = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 failed to start live view, and output the error code.
                    DebugInfo(str);
                    return;
                }
                else
                {
                    //预览成功
                    DebugInfo("NET_DVR_RealPlay_V40 succ!");
                    btnPreview.Text = "Stop View";
                }
            }
            else
            {
                //停止预览 Stop live view
                if (!CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle))
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str      = "NET_DVR_StopRealPlay failed, error code= " + iLastErr;
                    DebugInfo(str);
                    return;
                }

                if ((comboBoxView.SelectedIndex == 1) && (m_lPort >= 0))
                {
                    if (!PlayCtrl.PlayM4_Stop(m_lPort))
                    {
                        iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort);
                        str      = "PlayM4_Stop failed, error code= " + iLastErr;
                        DebugInfo(str);
                    }
                    if (!PlayCtrl.PlayM4_CloseStream(m_lPort))
                    {
                        iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort);
                        str      = "PlayM4_CloseStream failed, error code= " + iLastErr;
                        DebugInfo(str);
                    }
                    if (!PlayCtrl.PlayM4_FreePort(m_lPort))
                    {
                        iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort);
                        str      = "PlayM4_FreePort failed, error code= " + iLastErr;
                        DebugInfo(str);
                    }
                    m_lPort = -1;
                }

                DebugInfo("NET_DVR_StopRealPlay succ!");
                m_lRealHandle   = -1;
                btnPreview.Text = "Live View";
                RealPlayWnd.Invalidate();//刷新窗口 refresh the window
            }
            return;
        }
Example #7
0
        /// <summary>
        /// 视频预览
        /// </summary>
        /// <param name="strDeviceID"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public static int Open(string strDeviceID, int index, ref string IP, ref int nChannel, ref int m_lUserID, ref int m_lRealHandle)
        {
            if (Form1.videoboxs[index].InvokeRequired)
            {
                ControlDelegate d = Open;
                Form1.videoboxs[index].Invoke(d, strDeviceID, index, IP, nChannel, m_lUserID, m_lRealHandle);
            }
            else
            {
                Guid DeviceID = new Guid(strDeviceID);
                Entities.CameraList device = Class1.cameraList.Find(
                    delegate(Entities.CameraList camera)
                {
                    return(camera.DeviceID.Equals(DeviceID));
                }
                    );
                if (device == null)
                {
                    return(-1);
                }
                Entities.StreamMediaList streamMedia = Class1.streamMediaList.Find(
                    delegate(Entities.StreamMediaList sm)
                {
                    return(sm.DeviceID.Equals(device.StreamMedia_DeviceID));
                });
                if (streamMedia == null)
                {
                    return(-1);
                }
                IP       = streamMedia.VideoIP;
                nChannel = device.VideoChannel;
                string mediaMedia = System.Configuration.ConfigurationManager.AppSettings["MediaStream"];
                if (mediaMedia == "1")
                {
                    #region 流媒体预览
                    Entities.StreamServerList server = Class1.streamServerList.Find(
                        delegate(Entities.StreamServerList ss)
                    {
                        return(ss.DeviceID.Equals(streamMedia.StreamServerID));
                    }
                        );
                    if (server == null)
                    {
                        return(-1);
                    }
                    //视频预览
                    VMSdk.VM_CLIENT_CONFIG_VMSTREAMINGSER config = new VMSdk.VM_CLIENT_CONFIG_VMSTREAMINGSER();
                    config.sSID           = device.Stream_MainID.ToString();
                    config.sDeviceAddress = server.StreamServerIP;
                    if (SearchRealPlayVideo(config.sSID, index))
                    {
                        //流媒体预览视频
                        //Form1.hwnd[index] = VMSdk.VM_CLIENT_RealPlay(Form1.videoboxs[index].pictureBox1.Handle.ToInt32(), ref config, (int)VMSdk.VM_CLIENT_DEV_TYPE.VM_CLIENT_DEV_RTSP_VMSTREAMINGSER);

                        Form1.hwnd[index] = CMSSdk.VM_CMS_RealPlay(0, Form1.videoboxs[index].pictureBox1.Handle, config.sSID);
                        //存储视频信息
                        Form1.SID[index] = config.sSID;
                    }
                    #endregion
                }
                else
                {
                    if (SearchRealPlayVideo2(strDeviceID, index))
                    {
                        CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                        lpPreviewInfo.hPlayWnd        = Form1.videoboxs[index].pictureBox1.Handle;              //预览窗口
                        lpPreviewInfo.lChannel        = device.VideoChannel;                                    //预te览的设备通道
                        lpPreviewInfo.dwStreamType    = 0;                                                      //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
                        lpPreviewInfo.dwLinkMode      = 0;                                                      //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
                        lpPreviewInfo.bBlocked        = true;                                                   //0- 非阻塞取流,1- 阻塞取流
                        lpPreviewInfo.dwDisplayBufNum = 15;                                                     //播放库播放缓冲区最大缓冲帧数
                        CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack); //预览实时流回调函数
                        IntPtr pUser = new IntPtr();                                                            //用户数据
                        if (streamMedia.VideoIP == null)
                        {
                            return(-1);
                        }
                        if (!RecDll.ManualRec.userIDList.ContainsKey(streamMedia.VideoIP))
                        {
                            return(-1);
                        }
                        int UserID = RecDll.ManualRec.userIDList[streamMedia.VideoIP];
                        m_lUserID         = UserID;
                        Form1.hwnd[index] = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, pUser);
                        m_lRealHandle     = Form1.hwnd[index];
                        if (Form1.hwnd[index] == -1)
                        {
                            uint temp = CHCNetSDK.NET_DVR_GetLastError();
                            MessageBox.Show("视频预览失败!");
                        }
                        else
                        {
                            //Form1.SID[index] = config.sSID;
                            Form1.DeviceIDs[index] = strDeviceID;
                            Form1.videoboxs[index].SetVideoInfo(IP, nChannel, m_lUserID, m_lRealHandle, strDeviceID, device.VideoName);
                        }
                    }
                }
            }
            return(Form1.hwnd[index]);
        }
Example #8
0
        /// <summary>
        /// 启动实时播放
        /// </summary>
        /// <returns></returns>
        private Boolean StartRealPlay()
        {
            mOnReceived = (Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser) => {
                if ((dwDataType == CHCNetSDK.NET_DVR_STREAMDATA) && (dwBufSize > 0))
                {
                    CHCNetSDK.STREAM_FRAME_INFO_S st_frame_info = (CHCNetSDK.STREAM_FRAME_INFO_S)Marshal.PtrToStructure(pBuffer, typeof(CHCNetSDK.STREAM_FRAME_INFO_S));

                    Boolean hasHeader = false;
                    int     iIndex    = 0;
                    if (st_frame_info.u32MagicNo == 0x70827773)
                    {
                        iIndex    = (int)st_frame_info.u32HeaderSize;
                        hasHeader = true;
                    }

                    lock (mTempBuffer) {
                        Int32 length = (Int32)dwBufSize - iIndex;
                        if (((!mHasHeader) && (!hasHeader)) || ((mBufferUsed + length) > mBufferLength))
                        {
                            mBufferUsed = 0;
                            mHasHeader  = false;
                            return;
                        }

                        if (hasHeader)
                        {
                            mHasHeader = true;
                        }

                        Marshal.Copy(pBuffer + iIndex, mTempBuffer, mBufferUsed, length);
                        mBufferUsed += length;

                        if (mBufferUsed == mBufferLength)
                        {
                            lock (mFrameBuffer) {
                                Array.Copy(mTempBuffer, mFrameBuffer, mBufferLength);
                            }
                            mBufferUsed = 0;
                            mHasHeader  = false;
                        }
                    }
                }
            };

            CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
            lpPreviewInfo.hPlayWnd          = IntPtr.Zero; // 预览窗口
            lpPreviewInfo.lChannel          = 1;           // 预览的设备通道
            lpPreviewInfo.dwStreamType      = 0;           // 码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
            lpPreviewInfo.dwLinkMode        = 0;           // 连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
            lpPreviewInfo.bBlocked          = true;        // 0- 非阻塞取流,1- 阻塞取流
            lpPreviewInfo.byVideoCodingType = 1;

            mRealPlayHandle = CHCNetSDK.NET_DVR_RealPlay_V40(mUserId, ref lpPreviewInfo, mOnReceived, IntPtr.Zero);
            if (mRealPlayHandle < 0)
            {
                Tracker.LogE("NET_DVR_RealPlay_V40 failed, error code= " + CHCNetSDK.NET_DVR_GetLastError());
                return(false);
            }

            return(true);
        }
Example #9
0
        /// <summary>
        /// 2.显示视频
        /// </summary>
        /// <param name="error">输出错误代码</param>
        /// <returns></returns>
        public bool Preview(out string error)
        {
            error = "";

            #region 检验状态

            if (!m_bInitSDK)
            {
                error = $"error: 设备尚未初始化,请检查是否缺少海康威视所需的SDK";
                controlHost.SetText(error);
                return(false);
            }
            if (m_lUserID < 0)
            {
                error = $"error: 设备未登录,请先登录.";
                controlHost.SetText(error);
                return(false);
            }
            if (m_lRealHandle >= 0)
            {
                error = $"error: 视频已经开始预览.";
                controlHost.SetText(error);
                return(false);
            }

            #endregion

            controlHost.SetText($"设备连接成功,正在加载视频...");

            #region 显示视频

            CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
            lpPreviewInfo.hPlayWnd        = controlHost.Handle; //预览窗口
            lpPreviewInfo.lChannel        = VideoChannel;       //预te览的设备通道
            lpPreviewInfo.dwStreamType    = 0;                  //码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
            lpPreviewInfo.dwLinkMode      = 0;                  //连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP
            lpPreviewInfo.bBlocked        = true;               //0- 非阻塞取流,1- 阻塞取流
            lpPreviewInfo.dwDisplayBufNum = 15;                 //播放库播放缓冲区最大缓冲帧数

            //CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数
            //IntPtr pUser = new IntPtr();//用户数据

            //打开预览 Start live view
            m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, IntPtr.Zero);
            if (m_lRealHandle < 0)
            {
                error = "error: 加载视频失败, 错误代号:" + CHCNetSDK.NET_DVR_GetLastError();
                controlHost.SetText(error);
                return(false);
            }

            #endregion

            Thread.Sleep(1000);

            controlHost.SetText($"由于网络不稳定导致摄像头连接失败.{Environment.NewLine}" +
                                $"  请按照以下顺序重新连接:{Environment.NewLine}" +
                                $"    1.重启摄像头;{Environment.NewLine}" +
                                $"    2.重启路由器,检查网络.;{Environment.NewLine}" +
                                $"    3.重启程序;{Environment.NewLine}" +
                                $"    4.重启电脑。");

            return(true);
        }
Example #10
0
        private void btnPreview_Click(object sender, EventArgs e)
        {
            if (m_lUserID < 0)
            {
                MessageBox.Show("Please login the device firstly!");
                return;
            }

            if (m_bRecord)
            {
                MessageBox.Show("Please stop recording firstly!");
                return;
            }

            if (m_lRealHandle < 0)
            {
                CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
                lpPreviewInfo.hPlayWnd        = RealPlayWnd.Handle;
                lpPreviewInfo.lChannel        = iChannelNum[(int)iSelIndex];
                lpPreviewInfo.dwStreamType    = 0;
                lpPreviewInfo.dwLinkMode      = 0;
                lpPreviewInfo.bBlocked        = true;
                lpPreviewInfo.dwDisplayBufNum = 15;

                IntPtr pUser = IntPtr.Zero;



                m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null /*RealData*/, pUser);



                if (m_lRealHandle < 0)
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str      = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr;
                    DebugInfo(str);
                    return;
                }
                else
                {
                    DebugInfo("NET_DVR_RealPlay_V40 succ!");
                    btnPreview.Text = "Stop View";
                }
            }
            else
            {
                if (!CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle))
                {
                    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                    str      = "NET_DVR_StopRealPlay failed, error code= " + iLastErr;
                    DebugInfo(str);
                    return;
                }



                DebugInfo("NET_DVR_StopRealPlay succ!");
                m_lRealHandle   = -1;
                btnPreview.Text = "Live View";
                RealPlayWnd.Invalidate();
            }
            return;
        }