/// <summary>
        /// 功能:开始语音对讲
        /// </summary>
        /// <param name="IUserID">Login的返回值</param>
        /// <param name="callback">回调音频数据函数</param>
        /// <param name="dwUser">用户数据</param>
        /// <returns>返回值:-1表示失败,其他值作为其它函数的参数</returns>
        public int StartVoiceCom(int IUserID, SDKPlugInData.fVoiceDataCallBack callback, int dwUser)
        {
            PVoiceComInfo pVoiceComInfo;
            pVoiceComInfo.m_sIP = hashtable_ip[IUserID].ToString();
            pVoiceComInfo.m_sUserName = hashtable_username[IUserID].ToString();
            pVoiceComInfo.m_sUserPassWord = hashtable_password[IUserID].ToString();
            pVoiceComInfo.m_bytSendMode = 0;
            pVoiceComInfo.m_bUserCheck = false;

            fVoiceDataCallBack fvoicedatacallback = null;
            return MP4Net_ClientStartVoiceCom(ref pVoiceComInfo, fvoicedatacallback, (uint)dwUser);
        }
        /// <summary>
        /// 功能:云台控制,必须在启动预览之后调用
        /// </summary>
        /// <param name="lRealPlayHandle">RealPlay()的返回值.</param>
        /// <param name="code">云台控制命令.</param>
        /// <param name="dwStop">让云台停止动作还是开始动作,0-开始,1-停.</param>
        /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
        public bool PTZControl(int lRealPlayHandle, SDKPlugInData.PTZCode code, int dwStop)
        {
            IRealHandleData realHandleData = realHandleDataList.FindByRealPlayHandle(lRealPlayHandle);

            if (realHandleData != null)
            {
                uint lRealHandle =realHandleData.RealHandle;

                dwStop = dwStop == 0 ? 1 : 0;

                switch (code)
                {
                    case SDKPlugInData.PTZCode.LIGHT_PWRON:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_LIGH, dwStop);
                    case SDKPlugInData.PTZCode.WIPER_PWRON:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_WIPER, dwStop);
                    case SDKPlugInData.PTZCode.FAN_PWRON:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_FAN, dwStop);
                    case SDKPlugInData.PTZCode.HEATER_PWRON:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_HEATER, dwStop);
                    case SDKPlugInData.PTZCode.AUX_PWRON:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_AUX, dwStop);
                    case SDKPlugInData.PTZCode.ZOOM_IN:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_ZOOM_IN, dwStop);
                    case SDKPlugInData.PTZCode.ZOOM_OUT:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_ZOOM_OUT, dwStop);
                    case SDKPlugInData.PTZCode.FOCUS_IN:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_FOCUS_IN, dwStop);
                    case SDKPlugInData.PTZCode.FOCUS_OUT:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_FOCUS_OUT, dwStop);
                    case SDKPlugInData.PTZCode.IRIS_ENLARGE:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_IRIS_ENLARGE, dwStop);
                    case SDKPlugInData.PTZCode.IRIS_SHRINK:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_IRIS_SHRINK, dwStop);
                    case SDKPlugInData.PTZCode.TILT_UP:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_UP, dwStop);
                    case SDKPlugInData.PTZCode.TILT_DOWN:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_DOWN, dwStop);
                    case SDKPlugInData.PTZCode.PAN_LEFT:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_LEFT, dwStop);
                    case SDKPlugInData.PTZCode.PAN_RIGHT:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_RIGHT, dwStop);
                    case SDKPlugInData.PTZCode.PAN_AUTO:
                        return VSNET_ClientPTZCtrl(lRealHandle, (int)PTZEnum.PTZ_AUTO, dwStop);
                }
                return false;
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 进行设备设置初始化
        /// </summary>
        /// <param name="para">设备初始化设置参数</param>
        /// <param name="callback">消息回调(接收硬盘录像机消息)</param>
        /// <returns>执行结果代码:0 -  成功,1 - 设置连接时间和连接次数失败,2 - 设置硬盘录像机消息失败,3-设置硬盘录像机消息回调函数失败,4-设置显示模式失败</returns>
        public int SDKParaInit(SDKPlugInData.DeviceInitparameter para, SDKPlugInData.AllCallBack callback)
        {
            bool success=VSNET_ClientStartup((ushort)para.UserMessageCode, para.DVRMessageHWnd) ;

            if (success)
                return 0;
            else
                return 1;
        }
        /// <summary>
        /// 进行SDK参数初始化
        /// </summary>
        /// <param name="para">SDK初始化设置参数</param>
        /// <param name="callback"> 消息回调(接收硬盘录像机消息)</param>
        /// <returns>执行结果代码:0 -  成功,1 - 设置连接时间和连接次数失败,2 - 设置硬盘录像机消息失败,3-设置硬盘录像机消息回调函数失败,4-设置显示模式失败</returns>
        public int SDKParaInit(SDKPlugInData.DeviceInitparameter para, SDKPlugInData.AllCallBack callback)
        {
            allcallback = callback;
            IntPtr intptr = IntPtr.Zero;
            bool success = VSNET_ClientStartup((uint)(para.UserMessageCode), para.DVRMessageHWnd);

            if (success)
                return 0;
            else
                return 1;
        }
        /// <summary>
        /// 功能:开始语音对讲
        /// </summary>
        /// <param name="IUserID">Login的返回值</param>
        /// <param name="callback">回调音频数据函数</param>
        /// <param name="dwUser">用户数据</param>
        /// <returns>返回值:-1表示失败,其他值作为其它函数的参数</returns>
        public int StartVoiceCom(int IUserID, SDKPlugInData.fVoiceDataCallBack callback, int dwUser)
        {
            ILoginData loginData = loginDataList.FindByLoginDataHandle(IUserID);
            if (IUserID != -1 && loginData != null)
            {
                AudioTalkParam audioTalkParam = new AudioTalkParam();
                audioTalkParam.nChannels = 1;
                audioTalkParam.nCtrlPort = 5656;
                audioTalkParam.nLiveInterval = 30;
                audioTalkParam.nSampleBits = 16;
                audioTalkParam.nSampleRate = 8000;
                audioTalkParam.szAudioCodec = "G711";
                audioTalkParam.szDVSIP = loginData.DeviceIP;
                audioTalkParam.szUserName = "******";
                audioTalkParam.szPassWord = "******";
                audioTalkParam.szStreamName = "a0";
                uint IVoiceComHandle = VSNET_ClientStartVoiceCom(loginData.LoginHandle, ref audioTalkParam, pVoiceTalkCallback,
                                                                 (uint) dwUser);

                if (Convert.ToInt32(IVoiceComHandle) == 0)
                {
                    return -1;
                }
                else
                {
                    return Convert.ToInt32(IVoiceComHandle);
                }
            }
            else
            {
                return -1;
            }
        }
 /// <summary>
 /// 功能:云台控制,必须在启动预览之后调用
 /// </summary>
 /// <param name="lRealHandle">RealPlay()的返回值</param>
 /// <param name="code">云台控制命令</param>
 /// <param name="dwStop">让云台停止动作还是开始动作,0-开始,1-停</param>
 /// <param name="dwSpeed">云台控制的速度</param>
 /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
 public bool PTZControlWithSpeed(int lRealHandle, SDKPlugInData.PTZCode code, int dwStop, int dwSpeed)
 {
     return true;
 }
 /// <summary>
 /// 功能:开始语音对讲
 /// </summary>
 /// <param name="IUserID">Login的返回值</param>
 /// <param name="callback">回调音频数据函数</param>
 /// <param name="dwUser">用户数据</param>
 /// <returns>返回值:-1表示失败,其他值作为其它函数的参数</returns>
 public int StartVoiceCom(int IUserID, SDKPlugInData.fVoiceDataCallBack callback, int dwUser)
 {
     TalkCallBack talkcallback = null;
     return VSNET_ClientTalkExchangeStart(hashtable_ip[IUserID].ToString(), hashtable_username[IUserID].ToString(), hashtable_password[IUserID].ToString(), (ushort.Parse(hashtable_port[IUserID].ToString())), talkcallback, "video server");
 }
        /// <summary>
        /// 功能:设置声卡工播放模式
        /// </summary>
        /// <param name="dwMode">声卡模式.</param>
        /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
        public bool SetAudioMode(SDKPlugInData.AudioMode dwMode)
        {
            bool flag = true;
            if (dwMode == SDKPlugInData.AudioMode.share)
            {
                mode = SDKPlugInData.AudioMode.share;
                flag = NET_DVR_SetAudioMode(2);
                if (!flag)
                    IsAudioEnable = false;
            }
            else
            {
                AudioMode = SDKPlugInData.AudioMode.single;
                flag = NET_DVR_SetAudioMode(1);
                if (!flag)
                    IsAudioEnable = false;
            }

            return flag;
        }
 /// <summary>
 /// 功能:开始语音对讲
 /// </summary>
 /// <param name="IUserID">Login的返回值</param>
 /// <param name="callback">回调音频数据函数</param>
 /// <param name="dwUser">用户数据</param>
 /// <returns>返回值:-1表示失败,其他值作为其它函数的参数</returns>
 public int StartVoiceCom(int IUserID, SDKPlugInData.fVoiceDataCallBack callback, int dwUser)
 {
     return NET_DVR_StartVoiceCom(IUserID, callback, dwUser);
 }
        /// <summary>
        /// 云台预置位操作
        /// </summary>
        /// <param name="lRealHandle">用户登陆ID</param>
        /// <param name="presetcode">云台预置命令(-1 - 删除预置点,0 - 转至预置点,1 - 设置预置点)</param>
        /// <param name="dwPreSetIndex">预置点的序号</param>
        /// <returns></returns>
        public bool PTZPreSet(int lRealHandle, SDKPlugInData.PTZPreSetCode presetcode, int dwPreSetIndex)
        {
            switch (presetcode)
            {
                case SDKPlugInData.PTZPreSetCode.DEL:
                    return NET_DVR_PTZPreset_EX(lRealHandle, 9, dwPreSetIndex);

                case SDKPlugInData.PTZPreSetCode.TRANSFER:
                    return NET_DVR_PTZPreset_EX(lRealHandle, 39, dwPreSetIndex);

                case SDKPlugInData.PTZPreSetCode.SET:
                    return NET_DVR_PTZPreset_EX(lRealHandle, 8, dwPreSetIndex);

                default:
                    break;
            }

            return false;
        }
 /// <summary>
 /// 进行设备设置初始化
 /// </summary>
 /// <param name="para">设备初始化设置参数</param>
 /// <param name="Acallback">消息回调(接收硬盘录像机消息)</param>
 /// <returns>执行结果代码:0 -  成功,1 - 设置连接时间和连接次数失败,2 - 设置硬盘录像机消息失败,3-设置硬盘录像机消息回调函数失败,4-设置显示模式失败</returns>
 public int SDKParaInit(SDKPlugInData.DeviceInitparameter para, SDKPlugInData.AllCallBack Acallback)
 {
     allcallback = Acallback;
     if (NET_DVR_SetConnectTime(para.WaitTime, para.TryTime))
     {
         return 1;
     }
     else
     {
         if (NET_DVR_SetDVRMessage(para.UserMessageCode, para.DVRMessageHWnd))
         {
             callback = new fMessCallBack(MessCallBack);
             if (NET_DVR_SetDVRMessCallBack(callback))
             {
                 if (!NET_DVR_SetShowMode(0, 0xff000000))
                 {
                     return 4;
                 }
             }
             else
             {
                 return 3;
             }
         }
         else
         {
             return 2;
         }
     }
     return 0;
 }
        /// <summary>
        /// 功能:云台控制,必须在启动预览之后调用
        /// </summary>
        /// <param name="lRealHandle">RealPlay()的返回值</param>
        /// <param name="code">云台控制命令</param>
        /// <param name="dwStop">让云台停止动作还是开始动作,0-开始,1-停</param>
        /// <param name="dwSpeed">云台控制的速度</param>
        /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
        public bool PTZControlWithSpeed(int lRealHandle, SDKPlugInData.PTZCode code, int dwStop, int dwSpeed)
        {
            switch (code)
            {
                case SDKPlugInData.PTZCode.LIGHT_PWRON:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 2, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.WIPER_PWRON:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 3, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.FAN_PWRON:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 4, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.HEATER_PWRON:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 5, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.AUX_PWRON:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 6, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.ZOOM_IN:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 11, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.ZOOM_OUT:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 12, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.FOCUS_IN:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 13, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.FOCUS_OUT:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 14, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.IRIS_ENLARGE:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 15, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.IRIS_SHRINK:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 16, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.TILT_UP:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 21, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.TILT_DOWN:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 22, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.PAN_LEFT:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 23, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.PAN_RIGHT:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 24, dwStop, dwSpeed);

                case SDKPlugInData.PTZCode.PAN_AUTO:
                    return NET_DVR_PTZControlWithSpeed(lRealHandle, 29, dwStop, dwSpeed);

                default:
                    break;
            }

            return false;
        }
 /// <summary>
 /// 注册用户到硬盘录像机上
 /// </summary>
 /// <param name="DVRIp">硬盘录像机的IP 地址.</param>
 /// <param name="DVRPort">硬盘录像机的端口号.</param>
 /// <param name="username">登录的用户名.</param>
 /// <param name="password">用户密码.</param>
 /// <param name="lpinfo">指向DEVICEINFO 结构的指针.</param>
 /// <returns>-1 表示失败,其他值表示返回用户的ID 值,该ID 值是由SDK 分配,每个ID 值在客户端是唯一的。</returns>
 public int DeviceLogin(string DVRIp, ushort DVRPort, string username, string password, ref SDKPlugInData.DEVICEINFO lpinfo, string servername)
 {
     NET_DVR_DEVICEINFO info1 = new NET_DVR_DEVICEINFO();
     int temp = NET_DVR_Login(DVRIp, DVRPort, username, password, ref info1);
     lpinfo.sSerialNumber = info1.sSerialNumber;
     lpinfo.byAlarmInPortNum = info1.byAlarmInPortNum;
     lpinfo.byAlarmOutPortNum = info1.byAlarmOutPortNum;
     lpinfo.byDiskNum = info1.byDiskNum;
     lpinfo.byDVRType = info1.byDVRType;
     lpinfo.byChanNum = info1.byChanNum;
     lpinfo.byStartChan = info1.byStartChan;
     return temp;
 }
 private static extern Int32 NET_DVR_StartVoiceCom_MR(Int32 lUserID, SDKPlugInData.fVoiceDataCallBack fVoiceData, int dwUser);
 /// <summary>
 /// 注册用户到硬盘录像机上
 /// </summary>
 /// <param name="DVRIp">硬盘录像机的IP 地址.</param>
 /// <param name="DVRPort">硬盘录像机的端口号.</param>
 /// <param name="username">登录的用户名.</param>
 /// <param name="password">用户密码.</param>
 /// <param name="lpinfo">指向DEVICEINFO 结构的指针.</param>
 /// <returns>-1 表示失败,其他值表示返回用户的ID 值,该ID 值是由SDK 分配,每个ID 值在客户端是唯一的。</returns>
 public int DeviceLogin(string DVRIp, ushort DVRPort, string username, string password, ref SDKPlugInData.DEVICEINFO lpinfo, string servername)
 {
     if (!hashtable_ip.Contains(DevideID))
          hashtable_ip.Add(DevideID, DVRIp);
     if (!hashtable_port.Contains(DevideID))
          hashtable_port.Add(DevideID, DVRPort);
     if (!hashtable_username.Contains(DevideID))
         hashtable_username.Add(DevideID, username);
     if (!hashtable_password.Contains(DevideID))
         hashtable_password.Add(DevideID, password);
     if (!hashtable_sername.Contains(DevideID))
         hashtable_sername.Add(DevideID, servername);
     DevideID++;
     return DevideID-1;
 }
 /// <summary>
 /// 声音播放模式设定
 /// </summary>
 private void SetAudioMode(SDKPlugInData.AudioMode dwMode)
 {
     foreach (SDKInterface sdk in sdklibrarys)
     {
         if (sdk.Enable)
         {
             if (!sdk.SetAudioMode(dwMode))
             {
                 //TODO:设置音频播放模式失败
                 MessageBox.Show("设置音频播放模式失败");
             }
         }
     }
 }
        /// <summary>
        /// 功能:云台控制,必须在启动预览之后调用
        /// </summary>
        /// <param name="lRealHandle">RealPlay()的返回值.</param>
        /// <param name="code">云台控制命令.</param>
        /// <param name="dwStop">让云台停止动作还是开始动作,0-开始,1-停.</param>
        /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
        public bool PTZControl(int lRealHandle, SDKPlugInData.PTZCode code, int dwStop)
        {
            switch (code)
            {
                case SDKPlugInData.PTZCode.LIGHT_PWRON:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 24, dwStop,0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 25, dwStop,0);
                case SDKPlugInData.PTZCode.WIPER_PWRON:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 26, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 27, dwStop, 0);
                case SDKPlugInData.PTZCode.FAN_PWRON:
                    return VSNET_ClientPTZCtrl(lRealHandle, 4, dwStop, 0);

                case SDKPlugInData.PTZCode.HEATER_PWRON:
                    return VSNET_ClientPTZCtrl(lRealHandle, 5, dwStop, 0);

                case SDKPlugInData.PTZCode.AUX_PWRON:
                    return VSNET_ClientPTZCtrl(lRealHandle, 6, dwStop, 0);

                case SDKPlugInData.PTZCode.ZOOM_IN:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 8, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 22, dwStop, 0);
                case SDKPlugInData.PTZCode.ZOOM_OUT:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 9, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 23, dwStop, 0);
                case SDKPlugInData.PTZCode.FOCUS_IN:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 6, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 20, dwStop, 0);

                case SDKPlugInData.PTZCode.FOCUS_OUT:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 7, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 21, dwStop, 0);

                case SDKPlugInData.PTZCode.IRIS_ENLARGE:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 4, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 18, dwStop, 0);

                case SDKPlugInData.PTZCode.IRIS_SHRINK:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 5, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 19, dwStop, 0);

                case SDKPlugInData.PTZCode.TILT_UP:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 2, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 16, dwStop, 0);
                case SDKPlugInData.PTZCode.TILT_DOWN:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 3, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 17, dwStop, 0);
                case SDKPlugInData.PTZCode.PAN_LEFT:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 0, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 14, dwStop, 0);
                case SDKPlugInData.PTZCode.PAN_RIGHT:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 1, dwStop, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 15, dwStop, 0);
                case SDKPlugInData.PTZCode.PAN_AUTO:
                    if (dwStop == 0)
                        return VSNET_ClientPTZCtrl(lRealHandle, 12, 1, 0);
                    else
                        return VSNET_ClientPTZCtrl(lRealHandle, 12, 0, 0);
            }
            return false;
        }
 /// <summary>
 /// �����豸Handle
 /// </summary>
 /// <param name="dsi"></param>
 /// <param name="handle"></param>
 private void SetDevieHandle(SDKPlugInData.DeviceSInformation dsi, int handle)
 {
     IDevice device = deviceList.FindByID(dsi.UnitNo);
     device.DeviceHandle = handle;
     dsi.UserID = handle;
 }
        /// <summary>
        /// 云台预置位操作
        /// </summary>
        /// <param name="lRealHandle">RealPlay()的返回值</param>
        /// <param name="ptzpresetcode">云台预置命令(-1 - 删除预置点,0 - 转至预置点,1 - 设置预置点)</param>
        /// <param name="dwPreSetIndex">预置点的序号</param>
        /// <returns></returns>
        public bool PTZPreSet(int lRealHandle, SDKPlugInData.PTZPreSetCode presetcode, int dwPreSetIndex)
        {
            switch (presetcode)
            {
                case SDKPlugInData.PTZPreSetCode.TRANSFER:
                    return VSNET_ClientPTZCtrl(lRealHandle, 10, dwPreSetIndex+1,0);

                case SDKPlugInData.PTZPreSetCode.SET:
                    return VSNET_ClientPTZCtrl(lRealHandle, 11, dwPreSetIndex+1,0);

                case SDKPlugInData.PTZPreSetCode.DEL:
                    return VSNET_ClientPTZCtrl(lRealHandle, 33, dwPreSetIndex+1,0);

                default:
                    return true;
            }
        }
        /// <summary>
        /// 注册用户到硬盘录像机上
        /// </summary>
        /// <param name="DVRIp">硬盘录像机的IP 地址.</param>
        /// <param name="DVRPort">硬盘录像机的端口号.</param>
        /// <param name="username">登录的用户名.</param>
        /// <param name="password">用户密码.</param>
        /// <param name="lpinfo">指向DEVICEINFO 结构的指针.</param>
        /// <returns>-1 表示失败,其他值表示返回用户的ID 值,该ID 值是由SDK 分配,每个ID 值在客户端是唯一的。</returns>
        public int DeviceLogin(string DVRIp, ushort DVRPort, string username, string password, ref SDKPlugInData.DEVICEINFO lpinfo, string servername)
        {
            LPNET_DVR_DEVICEINFO lpDeviceInfo = new LPNET_DVR_DEVICEINFO();

            IntPtr obj = MP4Net_ClientLogin(DVRIp, DVRPort, username, password, null, ref lpDeviceInfo);

            if (Convert.ToInt32(obj.ToInt32()) != -1)
            {
                //hashtable_obj.Add(Convert.ToInt32(obj.ToInt32()), obj);
                hashtable_ip.Add(Convert.ToInt32(obj.ToInt32()), DVRIp);
                hashtable_username.Add(Convert.ToInt32(obj.ToInt32()), username);
                hashtable_password.Add(Convert.ToInt32(obj.ToInt32()), password);

                IntPtr intPtr = IntPtr.Zero;
                try
                {
                    uint lpBytesReturned = 0;
                    intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(new HY_DVS_DEVICE_INFO()));
                    if (MP4Net_ClientGetDeviceConfig(obj, HY_DVR_GET_DEVICE_INFO, 0, intPtr, (ushort)Marshal.SizeOf(new HY_DVS_DEVICE_INFO()), ref lpBytesReturned))
                    {
                        HY_DVS_DEVICE_INFO info = (HY_DVS_DEVICE_INFO)Marshal.PtrToStructure(intPtr, typeof(HY_DVS_DEVICE_INFO));
                        lpinfo.sSerialNumber = info.sSerialNumber;
                        lpinfo.byAlarmInPortNum = info.byAlarmInPortNum;
                        lpinfo.byAlarmOutPortNum = info.byAlarmOutPortNum;
                        lpinfo.byDVRType = info.byDVRType;
                        isDVR = false;
                        lpinfo.byDiskNum = info.byDiskNum;
                        lpinfo.byChanNum = info.byChanNum;
                    }
                    else
                    {
                        intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(new HY_DVR_DEVICE_INFO()));
                        if (MP4Net_ClientGetDeviceConfig(obj, HY_DVR_GET_DEVICE_INFO, 0, intPtr, (ushort)Marshal.SizeOf(new HY_DVR_DEVICE_INFO()), ref lpBytesReturned))
                        {
                            HY_DVR_DEVICE_INFO info = (HY_DVR_DEVICE_INFO)Marshal.PtrToStructure(intPtr, typeof(HY_DVR_DEVICE_INFO));
                            lpinfo.sSerialNumber = info.sSerialNumber;
                            lpinfo.byAlarmInPortNum = info.byAlarmInPortNum;
                            lpinfo.byAlarmOutPortNum = info.byAlarmOutPortNum;
                            lpinfo.byDVRType = info.byDVRType;
                            isDVR = true;
                            lpinfo.byDiskNum = info.byDiskNum;
                            lpinfo.byChanNum = info.byChanNum;
                        }
                    }
                }
                finally
                {
                    Marshal.FreeHGlobal(intPtr);
                }

            }

            return Convert.ToInt32(obj.ToInt32());
        }
        /// <summary>
        /// 云台预置位操作
        /// </summary>
        /// <param name="lRealPlayHandle">RealPlay()的返回值</param>
        /// <param name="ptzpresetcode">云台预置命令(-1 - 删除预置点,0 - 转至预置点,1 - 设置预置点)</param>
        /// <param name="dwPreSetIndex">预置点的序号</param>
        /// <returns></returns>
        public bool PTZPreSet(int lRealPlayHandle, SDKPlugInData.PTZPreSetCode ptzpresetcode, int dwPreSetIndex)
        {
            IRealHandleData realHandleData = realHandleDataList.FindByRealPlayHandle(lRealPlayHandle);

            if (realHandleData != null)
            {
                switch (ptzpresetcode)
                {
                    case SDKPlugInData.PTZPreSetCode.TRANSFER:
                        return VSNET_ClientPTZCtrl(realHandleData.RealHandle, 21, dwPreSetIndex + 1);

                    case SDKPlugInData.PTZPreSetCode.SET:
                        return VSNET_ClientPTZCtrl(realHandleData.RealHandle, 19, dwPreSetIndex + 1);

                    case SDKPlugInData.PTZPreSetCode.DEL:
                        return VSNET_ClientPTZCtrl(realHandleData.RealHandle, 20, dwPreSetIndex + 1);

                    default:
                        return false;
                }
            }
            else
            {
                return false;
            }
        }
        /// <summary>
        /// 功能:云台控制,必须在启动预览之后调用
        /// </summary>
        /// <param name="lRealHandle">RealPlay()的返回值.</param>
        /// <param name="code">云台控制命令.</param>
        /// <param name="dwStop">让云台停止动作还是开始动作,0-开始,1-停.</param>
        /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
        public bool PTZControl(int lRealHandle, SDKPlugInData.PTZCode code, int dwStop)
        {
            if (lRealHandle != -1)
                switch (code)
                {
                    case SDKPlugInData.PTZCode.LIGHT_PWRON:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 2, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 2, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.WIPER_PWRON:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 3, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 3, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.FAN_PWRON:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 4, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 4, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.HEATER_PWRON:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 5, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 5, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.AUX_PWRON:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 6, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 6, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.ZOOM_IN:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 11, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 11, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.ZOOM_OUT:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 12, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 12, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.FOCUS_IN:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 13, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 13, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.FOCUS_OUT:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 14, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 14, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.IRIS_ENLARGE:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 15, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 15, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.IRIS_SHRINK:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 16, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 16, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.TILT_UP:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 21, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 21, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.TILT_DOWN:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 22, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 22, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.PAN_LEFT:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 23, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 23, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.PAN_RIGHT:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 24, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 24, 0, 0, 0, 0);

                    case SDKPlugInData.PTZCode.PAN_AUTO:
                        if (dwStop == 0)
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 29, 1, 0, 0, 0);
                        else
                            return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 29, 0, 0, 0, 0);

                }
            return false;
        }
 /// <summary>
 /// 功能:设置声卡工播放模式
 /// </summary>
 /// <param name="dwMode">声卡模式.</param>
 /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
 public bool SetAudioMode(SDKPlugInData.AudioMode dwMode)
 {
     return true;
 }
        /// <summary>
        /// 云台预置位操作
        /// </summary>
        /// <param name="lRealHandle">RealPlay()的返回值</param>
        /// <param name="ptzpresetcode">云台预置命令(-1 - 删除预置点,0 - 转至预置点,1 - 设置预置点)</param>
        /// <param name="dwPreSetIndex">预置点的序号</param>
        /// <returns></returns>
        public bool PTZPreSet(int lRealHandle, SDKPlugInData.PTZPreSetCode ptzpresetcode, int dwPreSetIndex)
        {
            if (lRealHandle != -1)
                switch (ptzpresetcode)
                {
                    case SDKPlugInData.PTZPreSetCode.DEL:
                        return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 41, dwPreSetIndex, 0, 0, 0);

                    case SDKPlugInData.PTZPreSetCode.TRANSFER:
                        return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 42, dwPreSetIndex, 0, 0, 0);

                    case SDKPlugInData.PTZPreSetCode.SET:
                        return MP4Net_ClientPTZControl((IntPtr)(Convert.ToInt32(hashtable_obj[lRealHandle].ToString())), (uint.Parse(hashtable_channel[lRealHandle].ToString())), 40, dwPreSetIndex, 0, 0, 0);

                    default:
                        break;
                }

            return false;
        }
        /// <summary>
        /// 注册用户到硬盘录像机上
        /// </summary>
        /// <param name="DVRIp">硬盘录像机的IP 地址.</param>
        /// <param name="DVRPort">硬盘录像机的端口号.</param>
        /// <param name="username">登录的用户名.</param>
        /// <param name="password">用户密码.</param>
        /// <param name="lpinfo">指向DEVICEINFO 结构的指针.</param>
        /// <returns>-1 表示失败,其他值表示返回用户的ID 值,该ID 值是由SDK 分配,每个ID 值在客户端是唯一的。</returns>
        public int DeviceLogin(string DVRIp, ushort DVRPort, string username, string password, ref SDKPlugInData.DEVICEINFO lpinfo, string servername)
        {
            uint loginHandle=VSNET_ClientLogin(DVRIp, username, password, DVRPort);
            if (loginHandle != 0 && loginHandle != 0xffffffff)
            {
                LoginData loginData = new LoginData();
                loginData.DeviceIP = DVRIp;
                loginData.DevicePort = DVRPort;
                loginData.UserName = username;
                loginData.Password = password;
                loginData.servername = servername;
                loginData.LoginHandle = loginHandle;
                loginData.LoginDataHandle = (int)loginHandle;

                if (!loginDataList.Contents(loginData))
                {
                    loginDataList.Add(loginData);
                    //Console.WriteLine(string.Format("添加 {0} data{1} handle {2} ",DVRIp,loginData.LoginDataHandle,loginData.LoginHandle));
                    TraceDbg(string.Format("添加 {0} data{1} handle {2} ", DVRIp, loginData.LoginDataHandle,
                                           loginData.LoginHandle));
                    return loginData.LoginDataHandle;
                }
                else
                {
                    ILoginData loginData1 = loginDataList.FindByDeviceIpAndPort(DVRIp, DVRPort);
                    if (loginData1 != null)
                    {
                        loginData1.LoginHandle = loginHandle;
                        //Console.WriteLine(string.Format("修改{0} data{1} handle {2} ", DVRIp, loginData1.LoginDataHandle, loginData1.LoginHandle));
                        TraceDbg(string.Format("修改{0} data{1} handle {2} ", DVRIp, loginData1.LoginDataHandle,
                                               loginData1.LoginHandle));
                        return loginData1.LoginDataHandle;
                    }
                    else
                    {
                        return -1;
                    }
                }
            }
            else
            {
                return -1;
            }
        }
        /// <summary>
        /// 进行SDK参数初始化
        /// </summary>
        /// <param name="para">SDK初始化设置参数</param>
        /// <param name="callback"> 消息回调(接收硬盘录像机消息)</param>
        /// <returns>执行结果代码:0 -  成功,1 - 设置连接时间和连接次数失败,2 - 设置硬盘录像机消息失败,3-设置硬盘录像机消息回调函数失败,4-设置显示模式失败</returns>
        public int SDKParaInit(SDKPlugInData.DeviceInitparameter para, SDKPlugInData.AllCallBack callback)
        {
            allcallback = callback;
            if (MP4Net_ClientStartup((uint)para.UserMessageCode, para.DVRMessageHWnd))
            {
                MP4Net_ClientSetNetPort(5050, 6050);
                MP4Net_ClientSetShowMode(0, 200);

                return 0;
            }
            return 1;
        }
        /// <summary>
        /// 功能:云台控制,必须在启动预览之后调用
        /// </summary>
        /// <param name="lRealPlayHandle">RealPlay()的返回值</param>
        /// <param name="code">云台控制命令</param>
        /// <param name="dwStop">让云台停止动作还是开始动作,0-开始,1-停</param>
        /// <param name="dwSpeed">云台控制的速度</param>
        /// <returns>返回值:TRUE 表示成功,FALSE 表示失败。</returns>
        public bool PTZControlWithSpeed(int lRealPlayHandle, SDKPlugInData.PTZCode code, int dwStop, int dwSpeed)
        {
            IRealHandleData realHandleData = realHandleDataList.FindByRealPlayHandle(lRealPlayHandle);

            if (realHandleData != null)
            {

                uint lRealHandle = realHandleData.RealHandle;
                dwStop = dwStop == 0 ? 1 : 0;

                switch (code)
                {
                    case SDKPlugInData.PTZCode.LIGHT_PWRON:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 3, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 3, dwStop);
                    case SDKPlugInData.PTZCode.WIPER_PWRON:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 4, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 4, dwStop);
                    case SDKPlugInData.PTZCode.FAN_PWRON:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 5, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 5, dwStop);

                    case SDKPlugInData.PTZCode.HEATER_PWRON:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 6, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 6, dwStop);

                    case SDKPlugInData.PTZCode.AUX_PWRON:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 7, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 7, dwStop);

                    case SDKPlugInData.PTZCode.ZOOM_IN:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 9, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 9, dwStop);
                    case SDKPlugInData.PTZCode.ZOOM_OUT:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 8, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 8, dwStop);
                    case SDKPlugInData.PTZCode.FOCUS_IN:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 10, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 10, dwStop);

                    case SDKPlugInData.PTZCode.FOCUS_OUT:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 11, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 11, dwStop);

                    case SDKPlugInData.PTZCode.IRIS_ENLARGE:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 12, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 12, dwStop);

                    case SDKPlugInData.PTZCode.IRIS_SHRINK:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 13, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 13, dwStop);

                    case SDKPlugInData.PTZCode.TILT_UP:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 22, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 22, dwSpeed);
                    case SDKPlugInData.PTZCode.TILT_DOWN:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 23, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 23, dwSpeed);
                    case SDKPlugInData.PTZCode.PAN_LEFT:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 24, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 24, dwSpeed);
                    case SDKPlugInData.PTZCode.PAN_RIGHT:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 25, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 25, dwSpeed);
                    case SDKPlugInData.PTZCode.PAN_AUTO:
                        if (dwStop == 0)
                            return VSNET_ClientPTZCtrl( lRealHandle, 18, dwStop);
                        else
                            return VSNET_ClientPTZCtrl( lRealHandle, 18, dwStop);
                }
            }
            return false;
        }
 /// <summary>
 /// 注册用户到硬盘录像机上
 /// </summary>
 /// <param name="DVRIp">硬盘录像机的IP 地址.</param>
 /// <param name="DVRPort">硬盘录像机的端口号.</param>
 /// <param name="username">登录的用户名.</param>
 /// <param name="password">用户密码.</param>
 /// <param name="lpinfo">指向DEVICEINFO 结构的指针.</param>
 /// <returns>-1 表示失败,其他值表示返回用户的ID 值,该ID 值是由SDK 分配,每个ID 值在客户端是唯一的。</returns>
 public int DeviceLogin(string DVRIp, ushort DVRPort, string username, string password, ref SDKPlugInData.DEVICEINFO lpinfo, string servername)
 {
     DataInSDK.ALARMPARAM alarmparam = new DataInSDK.ALARMPARAM();
     alarmparam.m_benab = 1;
     alarmparam.m_alarmrec = new DataInSDK.ALARMRECORD[8];
     VSNET_ClientSetAlarmRecord("wangluogaosuqiu", DVRIp, username, password,ref alarmparam, 3000);
     if (!hashtable_ip.Contains(DevideID))
     hashtable_ip.Add(DevideID, DVRIp);
     if (!hashtable_port.Contains(DevideID))
     hashtable_port.Add(DevideID, DVRPort);
     if (!hashtable_username.Contains(DevideID))
     hashtable_username.Add(DevideID, username);
     if (!hashtable_password.Contains(DevideID))
     hashtable_password.Add(DevideID, password);
     if (!hashtable_servername.Contains(DevideID))
     hashtable_servername.Add(DevideID, servername);
     DevideID++;
     return DevideID-1;
 }