前言
从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释。由于工作忙也只能一天抽出那么半个小时一个小时来整理,所以对关注此系列文章的朋友说句:“抱歉,让大家久等了”。
临时决定本系列使用WPF来做例子(买了一本WPF没读 - - #,所以......),藉此学习下WPF,也进一步熟悉.Net Framework 3.5,落伍的“老兵”奋起追击下相对于“老兵”而言的新技术 :)
其实这篇文章在10月22日就写好了,但是想和视频预览文章一起发布,比较麻烦的是我这边朋友的DVR一直不稳定,一直拖延到今天还是不行,所以还是把本文先发了。因此寻求能提供DVR设备的厂家或者提供DVR远程访问地址的朋友,以支持此系列能顺利的完成,在这里先谢谢了!我的联系方式:13811821337、over140@gmail.com
提醒
欢迎转载,但请保留博客园(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
正文
一、代码截图
二、 部分代码
由于代码过长(超过1W行),这里就不贴全部了,大家直接在更新下面下载最新的SDK即可。
/// </summary>
public const int NET_DVR_SETSPEED = 24 ;
/// <summary>
/// 保持与设备的心跳(如果回调阻塞,建议2秒发送一次)
/// </summary>
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 ;
/// <summary>
/// 光圈+
/// </summary>
public const int KEY_PTZ_AP1_START = KEY_CODE_EDIT; /* 光圈+ */
public const int KEY_PTZ_AP1_STOP = 36 ;
/// <summary>
/// 光圈-
/// </summary>
public const int KEY_PTZ_AP2_START = KEY_CODE_PAN; /* 光圈- */
public const int KEY_PTZ_AP2_STOP = 37 ;
/// <summary>
/// 聚焦+
/// </summary>
public const int KEY_PTZ_FOCUS1_START = KEY_CODE_A; /* 聚焦+ */
public const int KEY_PTZ_FOCUS1_STOP = 38 ;
/// <summary>
/// 聚焦-
/// </summary>
public const int KEY_PTZ_FOCUS2_START = KEY_CODE_M; /* 聚焦- */
public const int KEY_PTZ_FOCUS2_STOP = 39 ;
/// <summary>
/// 变倍+
/// </summary>
public const int KEY_PTZ_B1_START = 40 ; /* 变倍+ */
public const int KEY_PTZ_B1_STOP = 41 ;
/// <summary>
/// 变倍-
/// </summary>
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 ;
/// <summary>
/// 获取网络应用参数 EMAIL
/// </summary>
public const int NET_DVR_GET_EMAILCFG = 228 ; //
/// <summary>
/// 设置网络应用参数 EMAIL
/// </summary>
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结构)
/// <summary>
/// 获取设备语音对讲编码参数
/// </summary>
public const int NET_DVR_GET_COMPRESSCFG_AUD = 1058 ; //
/// <summary>
/// 设置设备语音对讲编码参数
/// </summary>
public const int NET_DVR_SET_COMPRESSCFG_AUD = 1059 ; //
#endregion
/// <summary>
/// 预览异常
/// </summary>
public const int NET_DVR_REALPLAYEXCEPTION = 111 ; //
/// <summary>
/// 预览时连接断开
/// </summary>
public const int NET_DVR_REALPLAYNETCLOSE = 112 ; //
/// <summary>
/// 预览5s没有收到数据
/// </summary>
public const int NET_DVR_REALPLAY5SNODATA = 113 ; //
/// <summary>
/// 预览重连
/// </summary>
public const int NET_DVR_REALPLAYRECONNECT = 114 ; //
/// <summary>
/// 回放数据播放完毕
/// </summary>
public const int NET_DVR_PLAYBACKOVER = 101 ; //
/// <summary>
/// 回放异常
/// </summary>
public const int NET_DVR_PLAYBACKEXCEPTION = 102 ; //
/// <summary>
/// 回放时候连接断开
/// </summary>
public const int NET_DVR_PLAYBACKNETCLOSE = 103 ; //
/// <summary>
/// 回放5s没有收到数据
/// </summary>
public const int NET_DVR_PLAYBACK5SNODATA = 104 ;
#region DS-6001D/F
/// <summary>
/// DS-6001D Decoder
/// NET_DVR_DECODERINFO, *LPNET_DVR_DECODERINFO;
/// </summary>
public struct NET_DVR_DECODERINFO
{
/// <summary>
/// 解码设备连接的服务器IP
/// public byte byEncoderIP[16];
/// </summary>
public byte [] byEncoderIP;
/// <summary>
/// 解码设备连接的服务器的用户名
/// public byte byEncoderUser[16];
/// </summary>
public byte [] byEncoderUser;
/// <summary>
/// 解码设备连接的服务器的密码
/// public byte byEncoderPasswd[16];
/// </summary>
public byte [] byEncoderPasswd;
/// <summary>
/// 解码设备连接服务器的连接模式