C#编写的IP摄像头源码

在研发期间,把做工程过程中比较常用的一些内容片段做个收藏,如下的内容内容是关于C#编写的IP摄像头的内容,希望能对码农有些用。

#region IP摄像头代码

    private IntPtr m_hChannel;

    private IntPtr m_hServer, phPlay;

    public delegate void MyInvoke(string str);


    public void BeforeRecordFrame(IntPtr hChannel, ref RECORD_INFO pRecordInfo, ref FRAME_HEADER pFrameHeader, IntPtr pcontext)

    {

    }

    public void FileSearchCallback(IntPtr hSearch, ref DVSNET_FILE_TIME pFileTime, ref DVSNET_FILE_INFO pFileInfo, IntPtr pcontext)

    {

        OutText(hSearch, pFileTime, pFileInfo, pcontext);           

    }

    public void OutText(IntPtr hSearch, DVSNET_FILE_TIME pFileTime, DVSNET_FILE_INFO pFileInfo, IntPtr pcontext)

    {

        if (lvVideo.InvokeRequired)

        {

            OutDelegate outdelegate = new OutDelegate(OutText);

            this.BeginInvoke(outdelegate, new object[] { hSearch, pFileTime, pFileInfo, pcontext });

            return;

        }

        lvVideo.View = View.Details;

        lvVideo.FullRowSelect = true;

        for (int i = 0; i < pFileInfo.sFileName.Count(); i++)

        {

            ListViewItem item1 = new ListViewItem(pFileInfo.sFileName, i);

            lvVideo.Items.AddRange(new ListViewItem[] { item1 });

        }

    }

    private void pb_del_video_Click(object sender, EventArgs e)

    {

        this.Close();

    }

    public void SearchNotify(int nDevType, string sServName, string sServSerial, string sUrl, IntPtr MacAddr, ushort wWebPort, ushort wDataPort, string sSubNetMask, string sGateWay, string sMultiIp, string sDNS, ushort wMultiPort, int nChCount, uint bDHCP, IntPtr pcontext)

    {

        string str = Convert.ToString(wDataPort);

        string str2 = sUrl;

        this.AddText(str2);

    }

    private void AddText(string str)

    {

        MyInvoke method = new MyInvoke(this.AddTextToCmb);

        base.BeginInvoke(method, new object[] { str });

    }

    public void AddTextToCmb(string str)

    {

        this.CmbIP.Items.Add(str);

    }

    private void btnVideoSearck_Click(object sender, EventArgs e)

    {



            this.CmbIP.Items.Clear();

            errornum errornum = DVSNETClient.DVSNET_SearchServers(0xbb8, 1, new DVSNETClient.SearchNotify(this.SearchNotify), base.Handle, IntPtr.Zero);

            if (errornum == errornum.DVSNET_ERR_OK)

            {

              timerVideo.Enabled = true;

              btnVideoSearck.Enabled = false;

            }

            else

            {

            }

    }

    private void btnVideoOpen_Click(object sender, EventArgs e)

    {

        string text = this.CmbIP.Text;

        string sServIp = text;

        int index = text.IndexOf('(');

        if (index != -1)

        {

            string str3 = new string(text.ToCharArray(), 0, index);

            sServIp = str3;

        }

        errornum errornum = DVSNETClient.DVSNET_OpenServer(this.EdtName.Text, sServIp, Convert.ToUInt16(this.EdtPort.Text), this.EdtUser.Text, this.EdtPassword.Text, ref this.m_hServer, 0, 0);

        if (errornum == errornum.DVSNET_ERR_OK)

        {

            DVSNET_SERVER_INFO dvsnet_server_info = new DVSNET_SERVER_INFO();

            MessageBox.Show("打开链接成功!");

            dvsnet_server_info = new DVSNET_SERVER_INFO

            {

                lStructSize = Marshal.SizeOf(dvsnet_server_info)

            };

            DVSNETClient.DVSNET_GetServerInfo(this.m_hServer, ref dvsnet_server_info);

            for (int i = 0; i < dvsnet_server_info.nChnNum; i++)

            {

                int num3 = i + 1;

            }

        }

        else

        {

            MessageBox.Show("打开链接失败,错误码为:" + errornum.ToString());

        }

    }

    private void btnVideoClose_Click(object sender, EventArgs e)

    {

        if (this.m_hChannel != IntPtr.Zero)

        {

            MessageBox.Show("请关闭通道!再关闭链接");

        }

        else

        {

            if (this.m_hServer != IntPtr.Zero)

            {

                DVSNETClient.DVSNET_CloseServer(this.m_hServer);

                this.m_hServer = IntPtr.Zero;

            }

        }

    }

    IntPtr selServer = IntPtr.Zero;

    private void btnVideoOpenChnnel_Click(object sender, EventArgs e)

    {

        this.panelVideo.Visible = true;

        this.pannelVideoTwo.Visible = false;

        if (this.m_hServer != IntPtr.Zero)

        {

            DVSNET_CHANNEL_INFO dvsnet_channel_info = new DVSNET_CHANNEL_INFO();

            MessageBox.Show("打开通道成功!请稍候");

            dvsnet_channel_info = new DVSNET_CHANNEL_INFO

            {

                lStructSize = Marshal.SizeOf(dvsnet_channel_info),

                nProtocol = 0,

                hWndDisplay = this.panelVideo.Handle,

                bPlayStart = 1,

                dwStreamNo = 0

            };

            DVSNETClient.DVSNET_OpenChannel(this.m_hServer, Convert.ToUInt16(0), ref dvsnet_channel_info, ref this.m_hChannel);

        }

        else

        {

            MessageBox.Show("请打开链接!");

        }

    }

    private void btnVideoCloseChnnel_Click(object sender, EventArgs e)

    {

        if (this.m_hChannel != IntPtr.Zero)

        {


            DVSNETClient.DVSNET_CloseChannel(this.m_hChannel);

            MessageBox.Show("关闭通道成功!请稍候");

            this.m_hChannel = IntPtr.Zero;

        }

    }

    private void btnVideoOn_Click(object sender, EventArgs e)

    {

        try

        {

            string ss = DateTime.Now.ToString().Replace(":", "-").Replace(" ", "-").Replace("/", "-") + ".asf";     

            if (this.panelVideo.Visible == false)

            {

                MessageBox.Show("请切换到打开通道");

            }

            else

            {

                if (this.m_hChannel != IntPtr.Zero)

                {

                    DVSNETClient.DVSNET_StartRecord(this.m_hChannel, 1, FILETYPE.FILETYPE_ASF, ss,Before_RecordFrame, base.Handle);

                }

                else

                {

                    MessageBox.Show("请打开通道!");

                }

            }

        }

        catch (Exception ex)

        {

            MessageBox.Show(ex.ToString());

        }     

    }

    private void btnStopRec_Click(object sender, EventArgs e)

    {

        DVSNETClient.DVSNET_StopRecord(this.m_hChannel);

        MessageBox.Show("已停止录像!");

    }

    IntPtr phPlayer;

    private void btnsearch_Click(object sender, EventArgs e)

    {

        try

        {

            if (m_hServer != IntPtr.Zero)

            {

                string fName = "";

                OpenFileDialog openFileDialog = new OpenFileDialog();

                openFileDialog.RestoreDirectory = true;

                openFileDialog.FilterIndex = 1;

                if (openFileDialog.ShowDialog() == DialogResult.OK)

                {

                    this.panelVideo.Visible = false;

                    this.pannelVideoTwo.Visible = true;

                    this.btnsearch.Enabled = false;

                    fName = openFileDialog.FileName;

                    IntPtr hDisplayWnd = pannelVideoTwo.Handle;

                    phPlayer = (IntPtr)0;

                    errornum aa = DVSNETClient.DVSPLAYER_CreateInstance(hDisplayWnd, ref phPlayer, 0);                     

                    aa = DVSNETClient.DVSPLAYER_OpenFile(phPlayer,ref fName, 1);

                    DVSNETClient.DVSPLAYER_Start(phPlayer);

                }

                else

                {

                    this.panelVideo.Visible = true;

                    this.pannelVideoTwo.Visible = false;

                }

            }

            else

            {

                MessageBox.Show("请打开通道!");

            }

        }

        catch (Exception)

        {


            throw;

        }           

    }

    private void btnhf_Click(object sender, EventArgs e)

    {

        this.panelVideo.Visible = true;

        this.pannelVideoTwo.Visible = false;

        IntPtr phPlayer = (IntPtr)0;

        DVSNETClient.DVSPLAYER_Stop(phPlayer);

        MessageBox.Show("已停止回放录像!");

        this.btnsearch.Enabled = true; ;     

    }

    private void btnSearchbyName_Click(object sender, EventArgs e)

    {

        if (m_hServer == IntPtr.Zero)

        {

            MessageBox.Show("请先打开链接登录服务器!");

            return;

        }

        this.btnSearchbyName.Enabled = false;

        DVSNET_FILE_TIME pStartTime = new DVSNET_FILE_TIME();

        pStartTime.lYear = (uint)this.dateTimePicker1.Value.Year;

        pStartTime.lMonth = (uint)this.dateTimePicker1.Value.Month;

        pStartTime.lDay = (uint)this.dateTimePicker1.Value.Day;

        pStartTime.nHour = 0;

        pStartTime.nMinute = 0;

        DVSNET_FILE_TIME pEndTime = new DVSNET_FILE_TIME();

        pEndTime.lYear = (uint)this.dateTimePicker1.Value.Year;

        pEndTime.lMonth = (uint)this.dateTimePicker1.Value.Month;

        pEndTime.lDay = (uint)this.dateTimePicker1.Value.Day;

        pEndTime.nHour = 23;

        pEndTime.nMinute = 59;

        IntPtr phSearch = IntPtr.Zero;

        errornum bak = DVSNETClient.DVSNET_ServerFindFile(m_hServer, 0, 0, (char)0xff, ref pStartTime, ref pEndTime, File_SearchCallback, (IntPtr)0, ref phSearch);

        if (bak != errornum.DVSNET_ERR_OK)

        {

            MessageBox.Show("查找远程视频失败!");

        }         

        this.btnSearchbyName.Enabled = true;

    }

    private void lvVideo_MouseDoubleClick(object sender, MouseEventArgs e)

    {

        this.panelVideo.Visible = false;

        this.pannelVideoTwo.Visible = true;         

        string sa = "";

        IntPtr hWnd = pannelVideoTwo.Handle;

        if (lvVideo.SelectedItems.Count > 0)

            sa = lvVideo.SelectedItems[0].Text.ToString();

        }



        phPlay = IntPtr.Zero;

        errornum bak = DVSNETClient.DVSNET_PlayFileByName(m_hServer, sa, 1, hWnd, ref phPlay);

        if (bak == errornum.DVSNET_ERR_OK)

        {

            UInt32 value = 0;

            DVSNETClient.DVSNET_ControlPlayFile(phPlay, 1, 0, ref value);

        }

        else

        {

            MessageBox.Show("回放远程文件 失败,错误码为" + bak.ToString());

        }

    }

    #endregion

    private void timerVideo_Tick(object sender, EventArgs e)

    {

        int nStatus = 0;

        errornum errnum = DVSNETClient.DVSNET_GetSearchStatus(ref nStatus);

        if (errnum == errornum.DVSNET_ERR_OK)

        {

            if (nStatus == 1)

            {

                btnVideoSearck.Enabled = true;

                timerVideo.Enabled = false;

                MessageBox.Show("没有启动搜索");

            }

            if (nStatus == 2)

            {

            }

            if (nStatus == 3)

            {

                timerVideo.Enabled = false;

                btnVideoSearck.Enabled = true;

                if (this.CmbIP.Items.Count == 0)

                {

                    MessageBox.Show("没有找到设备!请接上设备");

                }

                else

                {

                    MessageBox.Show("已找到设备,请选择IP地址");

                }

            }

        }

        else

        {

            MessageBox.Show("DVSNET_GetSearchStatus 失败,错误码为" + errnum.ToString());

        }

    }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 右击工具箱->选择项 -> 显示"选择工具箱项" -> COM组件 -> Windows Media Player...
    颜渊若水阅读 7,016评论 0 0
  • 昨晚月儿和涵涵为了一条裙子争执不休,而我的角色就是充当裁判和灭火器。 其实我很不喜欢给她们当裁判,因为结果我可以预...
    月知寒秋阅读 576评论 0 1
  • 背负挣扎中浮沉 时移势易谓生活 生活虐我千万遍 我待生活如初恋 柴米油盐琴书画 多少...
    雨中听荷萍阅读 361评论 0 1
  • 天很蓝,片片白云漂浮在天空,河畔低垂的枝叶随风摇摆,平静的河面不时泛起涟漪!微微的风,和煦的暖,我透过阳光的间隙...
    姑苏雪舞阅读 1,534评论 6 2
  • 大多数的人肯定有过这样的经历:你养成了每天七点按时醒来的习惯,可是如果第二天有事,你想五点起床,于是第二天即使没有...
    指尖传奇阅读 446评论 0 0

友情链接更多精彩内容