zoukankan      html  css  js  c++  java
  • C# 海康DVR客户端开发系列(2)—— 封装API


    前言

      从上篇文章(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

    正文

      一、代码截图

      VS 

      二、 部分代码

      由于代码过长(超过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>
                
    /// 解码设备连接服务器的连接模式
                
    /// </summary>
                public byte bySendMode;
                
    /// <summary>
                
    /// 解码设备连接的服务器的通道号
                
    /// </summary>
                public byte byEncoderChannel;
                
    /// <summary>
                
    /// 解码设备连接的服务器的端口号
                
    /// </summary>
                public ushort wEncoderPort;
                
    /// <summary>
                
    /// 保留
                
    ///     public byte reservedData[4];
                
    /// </summary>
                public byte[] reservedData;
            }

            
    /// <summary>
            
    /// NET_DVR_DECODERSTATE, *LPNET_DVR_DECODERSTATE;
            
    /// </summary>
            public struct NET_DVR_DECODERSTATE
            {
                
    /// <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>
                
    /// 解码设备连接的服务器的通道号
                
    /// </summary>
                public byte byEncoderChannel;
                
    /// <summary>
                
    /// 解码设备连接的服务器的连接模式
                
    /// </summary>
                public byte bySendMode;
                
    /// <summary>
                
    /// 解码设备连接的服务器的端口号
                
    /// </summary>
                public ushort wEncoderPort;
                
    /// <summary>
                
    /// 解码设备连接服务器的状态
                
    /// </summary>
                public uint dwConnectState;
                
    /// <summary>
                
    /// 保留
                
    ///     public byte reservedData[4];
                
    /// </summary>
                public byte[] reservedData;
            }

            
    #region 解码设备控制码定义
            
    public const int NET_DEC_STARTDEC = 1;
            
    public const int NET_DEC_STOPDEC = 2;
            
    public const int NET_DEC_STOPCYCLE = 3;
            
    public const int NET_DEC_CONTINUECYCLE = 4;
            
    #endregion


            
    #endregion

            
    /// <summary>
            
    /// Email
            
    ///     NET_DVR_EMAILPARA, *LPNET_DVR_EMAILPARA;
            
    /// </summary>
            public struct NET_DVR_EMAILPARA
            {
                
    /// <summary>
                
    /// 邮件账号
                
    ///     public byte sUsername[64];
                
    /// </summary>
                public string sUsername;
                
    /// <summary>
                
    /// 邮件密码
                
    ///     public byte sPassword[64];
                
    /// </summary>
                public string sPassword;
                
    /// <summary>
                
    ///     public byte sSmtpServer[64];
                
    /// </summary>
                public string sSmtpServer;
                
    /// <summary>
                
    ///     public byte sPop3Server[64];
                
    /// </summary>
                public string sPop3Server;
                
    /// <summary>
                
    /// 邮件地址
                
    ///     public byte sMailAddr[64];
                
    /// </summary>
                public string sMailAddr;
                
    /// <summary>
                
    /// 上传报警/异常等的email
                
    ///     public byte sEventMailAddr1[64];
                
    /// </summary>
                public byte[] sEventMailAddr1;
                
    /// <summary>
                
    ///     public byte sEventMailAddr2[64];
                
    /// </summary>
                public byte[] sEventMailAddr2;
                
    /// <summary>
                
    ///     public byte res[16];
                
    /// </summary>
                public byte[] res;
            }

            
    /// <summary>
            
    /// NET_DVR_NETCFG_OTHER, *LPNET_DVR_NETCFG_OTHER;
            
    /// </summary>
            public struct NET_DVR_NETCFG_OTHER
            {
                
    public uint dwSize;
                
    /// <summary>
                
    ///     char    sFirstDNSIP[16];
                
    /// </summary>
                public string sFirstDNSIP;
                
    /// <summary>
                
    ///     char    sSecondDNSIP[16];
                
    /// </summary>
                public string sSecondDNSIP;
                
    /// <summary>
                
    /// char    sRes[32];
                
    /// </summary>
                public string sRes;
            }

            
    /// <summary>
            
    /// 连接的通道配置 2007-11-05
            
    ///     NET_DVR_MATRIX_DECCHANINFO, *LPNET_DVR_MATRIX_DECCHANINFO;
            
    /// </summary>
            public struct NET_DVR_MATRIX_DECCHANINFO
            {
                
    /// <summary>
                
    /// 是否启用 0-否 1-启用
                
    /// </summary>
                public uint dwEnable;
                
    /// <summary>
                
    /// 轮循解码通道信息
                
    /// </summary>
                public NET_DVR_MATRIX_DECINFO struDecChanInfo;
            }
            
    /// <summary>
            
    /// 压缩参数?
            
    ///     NET_DVR_COMPRESSIONCFG_NEW, *LPNET_DVR_COMPRESSIONCFG_NEW;
            
    /// </summary>
            public struct NET_DVR_COMPRESSIONCFG_NEW
            {
                
    public uint dwSize;
                
    /// <summary>
                
    /// 定时录像
                
    /// </summary>
                public NET_DVR_COMPRESSION_INFO_EX struLowCompression;
                
    /// <summary>
                
    /// 事件触发录像
                
    /// </summary>
                public NET_DVR_COMPRESSION_INFO_EX struEventCompression;
            }
            
    /// <summary>
            
    /// 抓图模式
            
    /// </summary>
            public enum CAPTURE_MODE
            {
                
    /// <summary>
                
    /// BMP模式
                
    /// </summary>
                BMP_MODE = 0,        //
                /// <summary>
                
    /// JPEG模式 
                
    /// </summary>
                JPEG_MODE = 1        //
            }
            
    /// <summary>
            
    /// 实时声音模式
            
    /// </summary>
            public enum REALSOUND_MODE
            {
                
    /// <summary>
                
    /// 独占模式
                
    /// </summary>
                MONOPOLIZE_MODE = 1,
                
    /// <summary>
                
    /// 共享模式
                
    /// </summary>
                SHARE_MODE = 2
            }
            
    /// <summary>
            
    /// 录象文件参数(带卡号)
            
    ///     NET_DVR_FINDDATA_CARD, *LPNET_DVR_FINDDATA_CARD;
            
    /// </summary>
            public struct NET_DVR_FINDDATA_CARD
            {
                
    /// <summary>
                
    /// 文件名
                
    ///     char sFileName[100];
                
    /// </summary>
                public string sFileName;
                
    /// <summary>
                
    /// 文件的开始时间
                
    /// </summary>
                public NET_DVR_TIME struStartTime;
                
    /// <summary>
                
    /// 文件的结束时间
                
    /// </summary>
                public NET_DVR_TIME struStopTime;
                
    /// <summary>
                
    /// 文件的大小
                
    /// </summary>
                public uint dwFileSize;
                
    /// <summary>
                
    /// 卡号?
                
    ///     char sCardNum[32];
                
    /// </summary>
                public char sCardNum;
            }

            
    /// <summary>
            
    /// 设置重新连接间隔
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_SetReconnect(DWORD dwInterval = 30000, BOOL bEnableRecon = TRUE);
            
    /// </summary>
            
    /// <param name="dwInterval"></param>
            
    /// <param name="bEnableRecon"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_SetReconnect(uint dwInterval, bool bEnableRecon);
            
    /// <summary>
            
    /// 通过IPSever获取设备动态IP地址[Ex]
            
    ///     NET_DVR_API BOOL  __stdcall NET_DVR_GetDVRIPByResolveSvr_EX(char *sServerIP, WORD wServerPort, unsigned char *sDVRName, WORD wDVRNameLen, BYTE *sDVRSerialNumber, WORD wDVRSerialLen, char* sGetIP, DWORD *dwPort);
            
    /// </summary>
            
    /// <param name="sServerIP"></param>
            
    /// <param name="wServerPort"></param>
            
    /// <param name="sDVRName"></param>
            
    /// <param name="wDVRNameLen"></param>
            
    /// <param name="sDVRSerialNumber"></param>
            
    /// <param name="wDVRSerialLen"></param>
            
    /// <param name="sGetIP"></param>
            
    /// <param name="dwPort"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_GetDVRIPByResolveSvr_EX(string sServerIP, ushort wServerPort, string sDVRName, ushort wDVRNameLen, string sDVRSerialNumber, ushort wDVRSerialLen, StringBuilder sGetIP, ref uint dwPort);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed_EX(LONG lRealHandle, DWORD dwPTZCommand, DWORD dwStop, DWORD dwSpeed);
            
    /// </summary>
            
    /// <param name="lRealHandle"></param>
            
    /// <param name="dwPTZCommand"></param>
            
    /// <param name="dwStop"></param>
            
    /// <param name="dwSpeed"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZControlWithSpeed_EX(int lRealHandle, uint dwPTZCommand, uint dwStop, uint dwSpeed);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack(LONG lRealHandle,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
            
    /// </summary>
            
    /// <param name="lRealHandle"></param>
            
    /// <param name="dwPTZTrackCmd"></param>
            
    /// <param name="dwTrackIndex"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZMltTrack(int lRealHandle, uint dwPTZTrackCmd, uint dwTrackIndex);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack_Other(LONG lUserID,LONG lChannel,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="dwPTZTrackCmd"></param>
            
    /// <param name="dwTrackIndex"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZMltTrack_Other(int lUserID, int lChannel, uint dwPTZTrackCmd, uint dwTrackIndex);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack_EX(LONG lRealHandle,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
            
    /// </summary>
            
    /// <param name="lRealHandle"></param>
            
    /// <param name="dwPTZTrackCmd"></param>
            
    /// <param name="dwTrackIndex"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZMltTrack_EX(int lRealHandle, uint dwPTZTrackCmd, uint dwTrackIndex);
            
    /// <summary>
            
    /// NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_Card(LONG lFindHandle, LPNET_DVR_FINDDATA_CARD lpFindData);
            
    /// </summary>
            
    /// <param name="lFindHandle"></param>
            
    /// <param name="lpFindData"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern int NET_DVR_FindNextFile_Card(int lFindHandle, NET_DVR_FINDDATA_CARD lpFindData);
            
    /// <summary>
            
    /// NET_DVR_API LONG __stdcall NET_DVR_FindFile_Card(LONG lUserID, LONG lChannel, DWORD dwFileType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="dwFileType"></param>
            
    /// <param name="lpStartTime"></param>
            
    /// <param name="lpStopTime"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern int NET_DVR_FindFile_Card(int lUserID, int lChannel, uint dwFileType, NET_DVR_TIME lpStartTime, NET_DVR_TIME lpStopTime);
            
    /// <summary>
            
    /// NET_DVR_API int    __stdcall NET_DVR_GetPlayBackPos(LONG lPlayHandle);
            
    /// </summary>
            
    /// <param name="lPlayHandle"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern int NET_DVR_GetPlayBackPos(int lPlayHandle);
            
    //解码设备DS-6001D/DS-6001F
            /// <summary>
            
    /// NET_DVR_API BOOL __stdcall NET_DVR_StartDecode(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERINFO lpDecoderinfo);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="lpDecoderinfo"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_StartDecode(int lUserID, int lChannel, NET_DVR_DECODERINFO lpDecoderinfo);
            
    /// <summary>
            
    /// NET_DVR_API BOOL __stdcall NET_DVR_StopDecode(LONG lUserID, LONG lChannel);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_StopDecode(int lUserID, int lChannel);
            
    /// <summary>
            
    /// NET_DVR_API BOOL __stdcall NET_DVR_GetDecoderState(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERSTATE lpDecoderState);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="lpDecoderState"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_GetDecoderState(int lUserID, int lChannel, NET_DVR_DECODERSTATE lpDecoderState);
            
    /// <summary>
            
    /// 保存参数
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_SaveConfig(LONG lUserID);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_SaveConfig(int lUserID);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_SetVideoEffect(LONG lUserID, LONG lChannel, DWORD dwBrightValue, DWORD dwContrastValue, DWORD dwSaturationValue, DWORD dwHueValue);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="dwBrightValue"></param>
            
    /// <param name="dwContrastValue"></param>
            
    /// <param name="dwSaturationValue"></param>
            
    /// <param name="dwHueValue"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_SetVideoEffect(int lUserID, int lChannel, uint dwBrightValue, uint dwContrastValue, uint dwSaturationValue, uint dwHueValue);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_GetVideoEffect(LONG lUserID, LONG lChannel, DWORD *pBrightValue, DWORD *pContrastValue, DWORD *pSaturationValue, DWORD *pHueValue);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="pBrightValue"></param>
            
    /// <param name="pContrastValue"></param>
            
    /// <param name="pSaturationValue"></param>
            
    /// <param name="pHueValue"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_GetVideoEffect(int lUserID, int lChannel, out uint pBrightValue, out uint pContrastValue, out uint pSaturationValue, out uint pHueValue);
      三、下章预告
        实现最基本的连接服务器并预览图像的功能。


    结束语
      首先我必须强调本章的翻译是一个体力活!本章可能会再随后的文章不断的更新,主要是数据类型对应可能有问题,这里也是凭经验来进行对应了,也欢迎有朋友尽早的向我提交勘误,我好及时的更新文章。
  • 相关阅读:
    OSX安装nginx和rtmp模块(rtmp直播服务器搭建)
    用runtime来重写Coder和deCode方法 归档解档的时候使用
    Homebrew安装卸载
    Cannot create a new pixel buffer adaptor with an asset writer input that has already started writing'
    OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播
    让nginx支持HLS
    iOS 字典转json字符串
    iOS 七牛多张图片上传
    iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them
    Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
  • 原文地址:https://www.cnblogs.com/over140/p/1577975.html
Copyright © 2011-2022 走看看