前言

  从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释。由于工作忙也只能一天抽出那么半个小时一个小时来整理,所以对关注此系列文章的朋友说句:“抱歉,让大家久等了”。
 

  临时决定本系列使用WPF来做例子(买了一本WPF没读 - - #,所以......),藉此学习下WPF,也进一步熟悉.Net Framework 3.5,落伍的“老兵”奋起追击下相对于“老兵”而言的新技术 :)  
 

  其实这篇文章在10月22日就写好了,但是想和视频预览文章一起发布,比较麻烦的是我这边朋友的DVR一直不稳定,一直拖延到今天还是不行,所以还是把本文先发了。因此寻求能提供DVR设备的厂家或者提供DVR远程访问地址的朋友,以支持此系列能顺利的完成,在这里先谢谢了!我的联系方式:13811821337、[email protected]
 



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


系列
  1.  C# 海康DVR客户端开发系列(1)——准备
  2.  C# 海康DVR客户端开发系列(2)—— 封装API
 


更新
 

  本文会随着后续实践文章有相应的改动,请及时更新!

  2010-12-21  HCNetSDK2010-12-21.rar

    主要更新了SerialDataCallBack委托的pRecvDataBuffer参数数据类型,由string改为byte[],这里感谢badnewfish实践后指出,欢迎大家积极反馈!

  2009-10-31   HCNetSDK2009-10-31.rar

    主要更新了大部分结构体中byte[]初始大小指定,加上了[MarshalAs(UnmanagedType.ByValArray, SizeConst = HCNetSDK.SERIALNO_LEN)]类似的标记。

   2009-10-24   HCNetSDK.cs

 

正文
 

  一、代码截图

 

C# 海康DVR客户端开发系列(2)—— 封装API (1)_第1张图片 VS

 

C# 海康DVR客户端开发系列(2)—— 封装API (1)_第2张图片 

 二、 部分代码

  由于代码过长(超过1W行),这里就不贴全部了,大家直接在更新下面下载最新的SDK即可。
 

         ///  设置码流速度
        
///  
         public   const   int  NET_DVR_SETSPEED  =   24 ;
        
///  
        
///  保持与设备的心跳(如果回调阻塞,建议2秒发送一次)
        
///  

         public   const   int  NET_DVR_KEEPALIVE  =   25 ;

        
// 远程按键定义如下:
         /*  key value send to CONFIG program  */
        
public   const   int  KEY_CODE_1  =   1 ;
        
public   const   int  KEY_CODE_2  =   2 ;
        
public   const   int  KEY_CODE_3  =   3 ;
        
public   const   int  KEY_CODE_4  =   4 ;
        
public   const   int  KEY_CODE_5  =   5 ;
        
public   const   int  KEY_CODE_6  =   6 ;
        
public   const   int  KEY_CODE_7  =   7 ;
        
public   const   int  KEY_CODE_8  =   8 ;
        
public   const   int  KEY_CODE_9  =   9 ;
        
public   const   int  KEY_CODE_0  =   10 ;
        
public   const   int  KEY_CODE_POWER  =   11 ;
        
public   const   int  KEY_CODE_MENU  =   12 ;
        
public   const   int  KEY_CODE_ENTER  =   13 ;
        
public   const   int  KEY_CODE_CANCEL  =   14 ;
        
public   const   int  KEY_CODE_UP  =   15 ;
        
public   const   int  KEY_CODE_DOWN  =   16 ;
        
public   const   int  KEY_CODE_LEFT  =   17 ;
        
public   const   int  KEY_CODE_RIGHT  =   18 ;
        
public   const   int  KEY_CODE_EDIT  =   19 ;
        
public   const   int  KEY_CODE_ADD  =   20 ;
        
public   const   int  KEY_CODE_MINUS  =   21 ;
        
public   const   int  KEY_CODE_PLAY  =   22 ;
        
public   const   int  KEY_CODE_REC  =   23 ;
        
public   const   int  KEY_CODE_PAN  =   24 ;
        
public   const   int  KEY_CODE_M  =   25 ;
        
public   const   int  KEY_CODE_A  =   26 ;
        
public   const   int  KEY_CODE_F1  =   27 ;
        
public   const   int  KEY_CODE_F2  =   28 ;

        
/*  for PTZ control  */
        
public   const   int  KEY_PTZ_UP_START  =  KEY_CODE_UP;
        
public   const   int  KEY_PTZ_UP_STOP  =   32 ;

        
public   const   int  KEY_PTZ_DOWN_START  =  KEY_CODE_DOWN;
        
public   const   int  KEY_PTZ_DOWN_STOP  =   33 ;

        
public   const   int  KEY_PTZ_LEFT_START  =  KEY_CODE_LEFT;
        
public   const   int  KEY_PTZ_LEFT_STOP  =   34 ;

        
public   const   int  KEY_PTZ_RIGHT_START  =  KEY_CODE_RIGHT;
        
public   const   int  KEY_PTZ_RIGHT_STOP  =   35 ;

        
///  
        
///  光圈+
        
///  

         public   const   int  KEY_PTZ_AP1_START  =  KEY_CODE_EDIT;  /*  光圈+  */
        
public   const   int  KEY_PTZ_AP1_STOP  =   36 ;

        
///  
        
///  光圈-
        
///  

         public   const   int  KEY_PTZ_AP2_START  =  KEY_CODE_PAN;  /*  光圈-  */
        
public   const   int  KEY_PTZ_AP2_STOP  =   37 ;

        
///  
        
///  聚焦+
        
///  

         public   const   int  KEY_PTZ_FOCUS1_START  =  KEY_CODE_A;  /*  聚焦+  */
        
public   const   int  KEY_PTZ_FOCUS1_STOP  =   38 ;

        
///  
        
///  聚焦-
        
///  

         public   const   int  KEY_PTZ_FOCUS2_START  =  KEY_CODE_M; /*  聚焦-  */
        
public   const   int  KEY_PTZ_FOCUS2_STOP  =   39 ;

        
///  
        
///  变倍+
        
///  

         public   const   int  KEY_PTZ_B1_START  =   40 /*  变倍+  */
        
public   const   int  KEY_PTZ_B1_STOP  =   41 ;

        
///  
        
///  变倍-
        
///  

         public   const   int  KEY_PTZ_B2_START  =   42 /*  变倍-  */
        
public   const   int  KEY_PTZ_B2_STOP  =   43 ;

        
// 9000新增
         public   const   int  KEY_CODE_11  =   44 ;
        
public   const   int  KEY_CODE_12  =   45 ;
        
public   const   int  KEY_CODE_13  =   46 ;
        
public   const   int  KEY_CODE_14  =   47 ;
        
public   const   int  KEY_CODE_15  =   48 ;
        
public   const   int  KEY_CODE_16  =   49 ;

        
///  
        
///  获取网络应用参数 EMAIL
        
///  

         public   const   int  NET_DVR_GET_EMAILCFG  =   228 ; //
         ///  
        
///  设置网络应用参数 EMAIL
        
///  

         public   const   int  NET_DVR_SET_EMAILCFG  =   229 ;     //
        
// 对应NET_DVR_EMAILCFG结构
        
//
         public   const   int  NET_DVR_GET_ALLHDCFG  =   300 ;         //
         #region  DS9000新增命令(_V30)
        
// 设备编码类型配置(NET_DVR_COMPRESSION_AUDIO结构)
         ///  
        
///  获取设备语音对讲编码参数
        
///  

         public   const   int  NET_DVR_GET_COMPRESSCFG_AUD  =   1058 ;      //
         ///  
        
///  设置设备语音对讲编码参数
        
///  

         public   const   int  NET_DVR_SET_COMPRESSCFG_AUD  =   1059 ;       //
         #endregion
        
///  
        
///  预览异常
        
///  

         public   const   int  NET_DVR_REALPLAYEXCEPTION  =   111 ; //
         ///  
        
///  预览时连接断开
        
///  

         public   const   int  NET_DVR_REALPLAYNETCLOSE  =   112 ; //
         ///  
        
///  预览5s没有收到数据
        
///  

         public   const   int  NET_DVR_REALPLAY5SNODATA  =   113 ;     //
         ///  
        
///  预览重连
        
///  

         public   const   int  NET_DVR_REALPLAYRECONNECT  =   114 ;     //
         ///  
        
///  回放数据播放完毕
        
///  

         public   const   int  NET_DVR_PLAYBACKOVER  =   101 ; //
         ///  
        
///  回放异常
        
///  

         public   const   int  NET_DVR_PLAYBACKEXCEPTION  =   102 ; //
         ///  
        
///  回放时候连接断开
        
///  

         public   const   int  NET_DVR_PLAYBACKNETCLOSE  =   103 ; //
         ///  
        
///  回放5s没有收到数据
        
///  

         public   const   int  NET_DVR_PLAYBACK5SNODATA  =   104 ;

        
#region  DS-6001D/F
        
///  
        
///  DS-6001D Decoder
        
///      NET_DVR_DECODERINFO, *LPNET_DVR_DECODERINFO;
        
///  

         public   struct  NET_DVR_DECODERINFO
        {
            
///  
            
///  解码设备连接的服务器IP
            
///      public byte byEncoderIP[16];
            
///  

             public   byte [] byEncoderIP;
            
///  
            
///  解码设备连接的服务器的用户名
            
///      public byte byEncoderUser[16];
            
///  

             public   byte [] byEncoderUser;
            
///  
            
///  解码设备连接的服务器的密码
            
///      public byte byEncoderPasswd[16];
            
///  

             public   byte [] byEncoderPasswd;
            
///  
            
///  解码设备连接服务器的连接模式