zoukankan      html  css  js  c++  java
  • C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览

    前言

      一直没有稳定的DVS供我测试用,朋友那边也是频频宕掉,所以延误至今,所幸还是出来了。此外非常遗憾的是没能用WPF实践成功,关键是IntPtr句柄设置不对,没法显示出来,为了保证进度也只好暂时放弃用WPF做显示。

    提醒
      欢迎转载,但请保留博客园(www.cnblogs.com)、农民伯伯(over140.cnblogs.com)的出处,谢谢合作:)

    系列
      1.  C# 海康DVR客户端开发系列(1)—— 准备
      2.  C# 海康DVR客户端开发系列(2)—— 封装API
      3.  C# 海康DVR客户端开发系列(3)—— 连接DVR和图像预览


    正文

      一、截图

      

      二、代码

            #region Member Variable

            
    //登录标识
            private int lUserID = -1;
            
    //预览标识
            private int lRealHandle = -1;

            
    #endregion

            
    #region Form

            
    public frmMain()
            {
                InitializeComponent();
            }

            
    private void frmMain_Load(object sender, EventArgs e)
            {
                HCNetSDK.NET_DVR_Init();
                HCNetSDK.NET_DVR_SetConnectTime(
    50001);
            }

            
    private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                HCNetSDK.NET_DVR_Cleanup();
            }

            
    #endregion

            
    #region 功能

            
    /// <summary>
            
    /// 登录DVS并预览
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void btnOpen_Click(object sender, EventArgs e)
            {
                
    #region New V30
                NET_DVR_DEVICEINFO_V30 dev 
    = new NET_DVR_DEVICEINFO_V30();
                lUserID 
    = HCNetSDK.NET_DVR_Login_V30("192.168.1.1"8000"admin""12345"out dev);
                
    if (lUserID == -1)
                {
                    MessageBox.Show(
    string.Format("登录DVS失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()), "登录DVS失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    
    return;
                }

                NET_DVR_CLIENTINFO clientinfo 
    = new NET_DVR_CLIENTINFO();
                clientinfo.hPlayWnd 
    = this.panel1.Handle;//视频窗口
                clientinfo.lChannel = 2// 通道号
                clientinfo.lLinkMode = 0;
                clientinfo.sMultiCastIP 
    = "234.5.6.7";

                lRealHandle 
    = HCNetSDK.NET_DVR_RealPlay_V30(lUserID, ref clientinfo, null1false);
                
    if (lRealHandle == -1)
                {
                    MessageBox.Show(
    string.Format("播放失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()));
                    
    return;
                }
                
    #endregion
                
    #region Old
                
    //NET_DVR_DEVICEINFO dev = new NET_DVR_DEVICEINFO();
                
    //lUserID = HCNetSDK.NET_DVR_Login("125.119.30.175", 8000, "admin", "12345", out dev);
                
    //if (lUserID == -1)
                
    //{
                
    //    MessageBox.Show(string.Format("登录DVS失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()), "登录DVS失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
    //    return;
                
    //}

                
    //NET_DVR_CLIENTINFO clientinfo = new NET_DVR_CLIENTINFO();
                
    //clientinfo.hPlayWnd = this.panel1.Handle;//视频窗口
                
    //clientinfo.lChannel = 2; // 通道号
                
    //clientinfo.lLinkMode = 0;
                
    //clientinfo.sMultiCastIP = "234.5.6.7";

                
    //lRealHandle = HCNetSDK.NET_DVR_RealPlay(lUserID, ref clientinfo);
                
    //if (lRealHandle == -1)
                
    //{
                
    //    MessageBox.Show(string.Format("播放失败,错误码: {0}", HCNetSDK.NET_DVR_GetLastError()));
                
    //    return;
                
    //}
                #endregion
            }

            
    /// <summary>
            
    /// 停止预览并退出登录
            
    /// </summary>
            
    /// <param name="sender"></param>
            
    /// <param name="e"></param>
            private void btnClose_Click(object sender, EventArgs e)
            {
                HCNetSDK.NET_DVR_StopRealPlay(lRealHandle);

                
    #region New V30
                HCNetSDK.NET_DVR_Logout_V30(lUserID);
                
    #endregion
                
    #region Old
                
    //如果不退出登录,下次开启拾音将失效
                
    //HCNetSDK.NET_DVR_Logout(lUserID);
                #endregion

                
    this.panel1.Invalidate(false);
            }

            
    #endregion

        代码说明:

          1.  [#region New]与[#region Old]代码块分别是新旧版本的API,这里均测试通过。

          2.  需要把HCNetSDK.dll(这里事例使用版本为3.0.3.3)直接拷贝到bin\Debug下去,或者拷贝到项目工程根目录下,然后选中右键属性->复制到输出目录 选中始终复活或者如果较新则复制,重新编译即可。

      三、提醒

        提醒大家API有变动,请立即更新!

      五、后期维护

        1.  2009-11-2

          也需要把PlayCtrl.dll加到的项目中来,否则可能出现登录成功,播放报错,显示错误代码64。

    结束语
      困难重重,坚持做伴。

  • 相关阅读:
    Eclipse连接MySQL数据库(傻瓜篇)
    JMeter监控内存及CPU ——plugin插件监控被测系统资源方法
    fiddler抓取手机端的数据流量包
    python 字典(dictionary)一些方法
    python 循环语句
    Charles 抓 HTTPS 包
    python RSA 加密与签名
    从零开始做一个Jmeter性能测试
    [python之路]变量和字符编码
    [python之路]简单介绍
  • 原文地址:https://www.cnblogs.com/over140/p/1588343.html
Copyright © 2011-2022 走看看