海康威视摄像头程序

来源:互联网 发布:和女生聊天 知乎 编辑:程序博客网 时间:2024/04/29 21:29

我的资源里有写好的程序http://download.csdn.net/source/3538901


using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


using System.Runtime.InteropServices;
using PreviewDemo;
using System.Configuration;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        protected override void Dispose(bool disposing)
        {
            if (m_lRealHandle >= 0)
            {
                CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
            }
            if (m_lUserID >= 0)
            {
                CHCNetSDK.NET_DVR_Logout_V30(m_lUserID);
            }
            if (m_bInitSDK == true)
            {
                CHCNetSDK.NET_DVR_Cleanup();
            }
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }


        //海康
        private Int32 m_lUserID = -1;
        private bool m_bInitSDK = false;
        private Int32 m_lRealHandle = -1;
        private Int32 m_iPreviewType = 0;
        private IntPtr m_ptrRealHandle;
        private CHCNetSDK.REALDATACALLBACK m_fRealData = null;
        private Int32 m_lPort = -1;
        private HKPlayCtrl.DISPLAYCBFUN m_fDisplayFun = null;
        private bool m_bJpegCapture = false;
        private int hk = 0;
        private int inithk = 0;//初始化 海康
        private CHCNetSDK.NET_DVR_CLIENTINFO lpClientInfo;


        public Form1()
        {
            InitializeComponent();
            
        }


        private void button1_Click(object sender, EventArgs e)
        {
            if (hk == 1 && inithk == 1)
            { }
            else if (hk == 0)//没点击过摄像头
            {
                hk = 1;
                initHK();
                play();


            }
            else
            {
                play();


            }
        }
        //=================================================================================海康设备
        private void initHK()
        {
            m_bInitSDK = CHCNetSDK.NET_DVR_Init();
            if (m_bInitSDK == false)
            {
                MessageBox.Show("NET_DVR_Init error!");
                return;
            }
            else
            {
                string DVRIPAddress = ConfigurationManager.AppSettings["incar"].ToString();//"192.168.5.64";
                Int16 DVRPortNumber = Int16.Parse(ConfigurationManager.AppSettings["dvrport"].ToString());
                string DVRUserName = ConfigurationManager.AppSettings["username"].ToString();
                string DVRPassword = ConfigurationManager.AppSettings["pwd"].ToString();




                //海康
                CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();
                m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo);


                if (m_lUserID == -1)
                {
                    MessageBox.Show("login error!");
                    hk = 0;
                }
                else
                {
                    inithk = 1;
                    lpClientInfo = new CHCNetSDK.NET_DVR_CLIENTINFO();
                }
            }


        }
        private void play()
        {
            if (inithk == 1)//初始化成功
            {
                lpClientInfo.lChannel = 1;
                lpClientInfo.lLinkMode = 0x0000;
                lpClientInfo.sMultiCastIP = "";
                if (m_iPreviewType == 0) // use by callback
                {
                    lpClientInfo.hPlayWnd = IntPtr.Zero;// todo!!! 这边应该做2中情况考虑去编写代码
                    
                    m_ptrRealHandle = RealPlayWnd.Handle;
                    m_fRealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);
                    IntPtr pUser = new IntPtr();
                    m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref lpClientInfo, m_fRealData, pUser, 1);


                }
                else if (1 == m_iPreviewType)
                {
                    lpClientInfo.hPlayWnd = RealPlayWnd.Handle;
                    IntPtr pUser = new IntPtr();
                    m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref lpClientInfo, null, pUser, 1);
                }
                if (m_lRealHandle == -1)
                {
                    uint nError = CHCNetSDK.NET_DVR_GetLastError();
                    DebugInfo("NET_DVR_RealPlay fail %d!");
                    //return;
                }
            }
            else//初始化 失败,因为已经初始化了
            {
                //MessageBox.Show("初始化失败!");
            }


        }
        public delegate void MyDebugInfo(string str);
        public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, ref byte pBuffer, UInt32 dwBufSize, IntPtr pUser)
        {
            MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo);
            switch (dwDataType)
            {
                case CHCNetSDK.NET_DVR_SYSHEAD:     // sys head
                    if (!HKPlayCtrl.PlayM4_GetPort(ref m_lPort))
                    {
                        MessageBox.Show("Get Port Fail");
                    }


                    if (dwBufSize > 0)
                    {
                        //set as stream mode, real-time stream under preview
                        if (!HKPlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, HKPlayCtrl.STREAME_REALTIME))
                        {
                            this.BeginInvoke(AlarmInfo, "PlayM4_SetStreamOpenMode fail");
                        }
                        //start player
                        if (!HKPlayCtrl.PlayM4_OpenStream(m_lPort, ref pBuffer, dwBufSize, 1024 * 1024))
                        {
                            m_lPort = -1;
                            this.BeginInvoke(AlarmInfo, "PlayM4_OpenStream fail");
                            break;
                        }
                        //set soft decode display callback function to capture
                        m_fDisplayFun = new HKPlayCtrl.DISPLAYCBFUN(RemoteDisplayCBFun);
                        if (!HKPlayCtrl.PlayM4_SetDisplayCallBack(m_lPort, m_fDisplayFun))
                        {
                            this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail");
                        }


                        //start play, set play window
                        this.BeginInvoke(AlarmInfo, "About to call PlayM4_Play");


                        if (!HKPlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle))
                        {
                            m_lPort = -1;
                            this.BeginInvoke(AlarmInfo, "PlayM4_Play fail");
                            break;
                        }


                        //set frame buffer number


                        if (!HKPlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15))
                        {
                            this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayBuf fail");
                        }


                        //set display mode
                        if (!HKPlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0/* COLORREF(0)*/))//play off screen // todo!!!
                        {
                            this.BeginInvoke(AlarmInfo, " PlayM4_SetOverlayMode fail");
                        }
                    }


                    break;
                case CHCNetSDK.NET_DVR_STREAMDATA:     // video stream data
                    if (dwBufSize > 0 && m_lPort != -1)
                    {
                        if (!HKPlayCtrl.PlayM4_InputData(m_lPort, ref pBuffer, dwBufSize))
                        {
                            this.BeginInvoke(AlarmInfo, " PlayM4_InputData fail");
                        }
                    }
                    break;


                case CHCNetSDK.NET_DVR_AUDIOSTREAMDATA:     //  Audio Stream Data
                    if (dwBufSize > 0 && m_lPort != -1)
                    {
                        if (!HKPlayCtrl.PlayM4_InputVideoData(m_lPort, ref pBuffer, dwBufSize))
                        {
                            this.BeginInvoke(AlarmInfo, "PlayM4_InputVideoData Fail");
                        }
                    }


                    break;
                default:
                    break;
            }
        }
        public void DebugInfo(string str)
        {
            if (str.Length > 0)
            {
                str += "\n";
                //TextBoxInfo.AppendText(str);
            }


        }
        public void RemoteDisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReserved)
        {
            MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo);
            if (!m_bJpegCapture)
            {
                return;
            }
            else
            {
                uint nLastErr = 100;
                // save picture as you want
                if (!HKPlayCtrl.PlayM4_ConvertToJpegFile(pBuf, nSize, nWidth, nHeight, nType, "C:/Capture.jpg"))
                {
                    //Debug.WriteLine("PlayM4_ConvertToJpegFile fail");
                    nLastErr = HKPlayCtrl.PlayM4_GetLastError(m_lPort);
                    this.BeginInvoke(AlarmInfo, "Jpeg Capture fail");
                }
                else
                {
                    this.BeginInvoke(AlarmInfo, "Jpeg Capture Succ");
                    //Debug.WriteLine("PlayM4_ConvertToJpegFile Succ");
                }


            }


            m_bJpegCapture = false;
        }


        private void button2_Click(object sender, EventArgs e)
        {
            if (inithk == 1)
            {
                CloseDVR();//关闭视频
                inithk = 0;
            }
        }


        private void CloseDVR()//关闭视频
        {
            ////bool cao= CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);//停止预览


            ////CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle);
            ////CHCNetSDK.NET_DVR_Logout_V30(m_lUserID);
            //CHCNetSDK.NET_DVR_Logout(m_lUserID);
            //CHCNetSDK.NET_DVR_Cleanup();


            bool logoutRtn = CHCNetSDK.NET_DVR_Logout_V30(m_lUserID);
            bool cleanupRtn = CHCNetSDK.NET_DVR_Cleanup();
            //Console.WriteLine("The error number is:" + CHCNetSDK.NET_DVR_GetLastError());
            //if (cleanupRtn && logoutRtn)
            //    MessageBox.Show("Cleanup SDK resource and logout the current device.");
            //this.Close();


            
        }


        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            CloseDVR();//关闭视频
        }


        private void button4_Click(object sender, EventArgs e)
        {
            HKPlayCtrl.PlayM4_Stop(m_lPort);//暂停
        }


        private void button5_Click(object sender, EventArgs e)
        {
            HKPlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle);//继续
        }
    }
}
原创粉丝点击