private void button1_Click(object sender, EventArgs e) { //1、登录 SDK_TDWYSDK.LogonPara tInfo = new SDK_TDWYSDK.LogonPara(); tInfo.iSize = Marshal.SizeOf(tInfo); tInfo.iNvsPort = CurrentVideoInfo.DVSConnectPort; tInfo.cNvsIP = new char[32]; Array.Copy(CurrentVideoInfo.DVSAddress.ToArray(), tInfo.cNvsIP, CurrentVideoInfo.DVSAddress.Length); tInfo.cUserName = new char[16]; Array.Copy(CurrentVideoInfo.UserName.ToArray(), tInfo.cUserName, CurrentVideoInfo.UserName.Length); tInfo.cUserPwd = new char[16]; Array.Copy(CurrentVideoInfo.Password.ToArray(), tInfo.cUserPwd, CurrentVideoInfo.Password.Length); IntPtr intptr = Marshal.AllocCoTaskMem(tInfo.iSize); Marshal.StructureToPtr(tInfo, intptr, true);//false容易造成内存泄漏 int iRet = SDK_TDWYSDK.NetClient_Logon_V4(0, intptr, tInfo.iSize); Marshal.FreeHGlobal(intptr);//释放分配的非托管内存。 m_iLogonId = iRet; if (m_iLogonId < 0) { //登录失败 iRet = SDK_TDWYSDK.NetClient_Logoff(m_iLogonId); } }
private void Frm_VideoPlay_TDWY_Load(object sender, EventArgs e) { //VideoPlayControl.VideoEnvironment.VideoEnvironment_TDWY.Init(); //VideoPlayControl.VideoEnvironment.VideoEnvironment_TDWY.MAIN_NOTIFYEvent -= VideoEnvironment_TDWY_MAIN_NOTIFYEvent; //VideoPlayControl.VideoEnvironment.VideoEnvironment_TDWY.MAIN_NOTIFYEvent += VideoEnvironment_TDWY_MAIN_NOTIFYEvent; SDK_TDWYSDK.NetClient_Startup_V4(0, 0, 0); SDK_TDWYSDK.NetClient_SetMSGHandleEx(NetSDKMsg.WM_MAIN_MESSAGE, this.Handle, NetSDKMsg.MSG_PARACHG, NetSDKMsg.MSG_ALARM); }
public override bool VideoClose() { VideoEnvironment.VideoEnvironment_TDWY.MAIN_NOTIFYEvent -= VideoEnvironment_TDWY_MAIN_NOTIFYEvent; int iRet = SDK_TDWYSDK.NetClient_StopPlay(m_iConnectId); iRet = SDK_TDWYSDK.NetClient_StopRecv(m_iConnectId); iRet = SDK_TDWYSDK.NetClient_Logoff(_iLogonID); VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.VideoClose }); return(true); }
public void OnNetSDKMsg(IntPtr wParam, IntPtr lParam) { //wParam的低16位是消息的类型; int iMsgType = wParam.ToInt32() & 0xFFFF; switch (iMsgType) { case NetSDKMsg.WCM_LOGON_NOTIFY: { Int32 iStatus = wParam.ToInt32() >> 16; if (NetSDKMsg.LOGON_SUCCESS == iStatus) { MessageBox.Show("logon success!"); m_iLogonId = (Int32)lParam; //初始化通道列表 Int32 iChanNum = 0; SDK_TDWYSDK.NetClient_GetChannelNum(m_iLogonId, ref iChanNum); //cboChanList.Items.Clear(); //for (Int32 i = 0; i < iChanNum; ++i) //{ // cboChanList.Items.Add((i + 1).ToString()); //} //if (cboChanList.Items.Count > 0) //{ // cboChanList.SelectedIndex = 0; //} //btnLogon.Text = "Logoff"; ////登录成功后获取NTP信息 GetNtpInfo(); } else { MessageBox.Show("logon failed, reason " + iStatus); } } break; case NetSDKMsg.WCM_VIDEO_HEAD_EX: { //视频头消息来了,开始播放视频 SDK_TDWYSDK.NetClient_StopPlay(m_iConnectId); SDK_TDWYSDK.RECT rect = new SDK_TDWYSDK.RECT(); SDK_TDWYSDK.NetClient_StartPlay(m_iConnectId, pictureBox1.Handle, rect, 0); } break; default: break; } }
private void VideoEnvironment_TDWY_MAIN_NOTIFYEvent(uint _ulLogonID, IntPtr _iWparam, IntPtr _iLParam, int _iUser) { if (_ulLogonID == m_iLogonId) { //表示属于当前信息登录信息 switch (_iWparam.ToInt32()) { //登陆状态消息 //param1 登陆IP //param2 登陆ID //param3 登陆状态 case NetSDKMsg.WCM_LOGON_NOTIFY: Int32 iStatus = _iLParam.ToInt32(); if (iStatus == NetSDKMsg.LOGON_SUCCESS) { Console.WriteLine("登录成功"); } else { //触发相关时间进行提示 Console.WriteLine("登录失败,Status:" + iStatus); } break; case NetSDKMsg.WCM_VIDEO_HEAD: break; case NetSDKMsg.WCM_VIDEO_HEAD_EX: SDK_TDWYSDK.NetClient_StopPlay(m_iConnectId); this.BeginInvoke(new EventHandler(delegate { SDK_TDWYSDK.RECT rect = new SDK_TDWYSDK.RECT() { bottom = 0, left = 0, right = 0, top = 0 }; SDK_TDWYSDK.NetClient_StartPlay(m_iConnectId, pictureBox1.Handle, rect, 0); })); break; default: Console.WriteLine("TDWY- MyMAIN_NOTIFY_V4: " + _iWparam.ToInt32()); break; } } }
private void button2_Click(object sender, EventArgs e) { CameraInfo cInfo = CurrentVideoInfo.Cameras.Values.First(); SDK_TDWYSDK.CLIENTINFO tInfo = new SDK_TDWYSDK.CLIENTINFO { m_iServerID = m_iLogonId, m_iTimeout = 20, m_iNetMode = 1, m_iChannelNo = cInfo.Channel - 1, m_iStreamNO = 1, m_cNetFile = new char[255], m_cRemoteIP = new char[16], }; Array.Copy(CurrentVideoInfo.DVSAddress.ToArray(), tInfo.m_cRemoteIP, CurrentVideoInfo.DVSAddress.Length); //开始接收一路视频数据 UInt32 uiConID = 0; int iRet = SDK_TDWYSDK.NetClient_StartRecv(ref uiConID, ref tInfo, null); m_iConnectId = (Int32)uiConID; }
/// <summary> /// 视频播放 /// </summary> /// <returns></returns> public override bool VideoPlay() { VideoEnvironment.VideoEnvironment_TDWY.MAIN_NOTIFYEvent -= VideoEnvironment_TDWY_MAIN_NOTIFYEvent; VideoEnvironment.VideoEnvironment_TDWY.MAIN_NOTIFYEvent += VideoEnvironment_TDWY_MAIN_NOTIFYEvent; //1、登录 SDK_TDWYSDK.LogonPara tInfo = new SDK_TDWYSDK.LogonPara(); tInfo.iSize = Marshal.SizeOf(tInfo); tInfo.iNvsPort = CurrentVideoInfo.DVSConnectPort; tInfo.cNvsIP = new char[32]; Array.Copy(CurrentVideoInfo.DVSAddress.ToArray(), tInfo.cNvsIP, CurrentVideoInfo.DVSAddress.Length); tInfo.cUserName = new char[16]; Array.Copy(CurrentVideoInfo.UserName.ToArray(), tInfo.cUserName, CurrentVideoInfo.UserName.Length); tInfo.cUserPwd = new char[16]; Array.Copy(CurrentVideoInfo.Password.ToArray(), tInfo.cUserPwd, CurrentVideoInfo.Password.Length); IntPtr intptr = Marshal.AllocCoTaskMem(tInfo.iSize); Marshal.StructureToPtr(tInfo, intptr, true);//false容易造成内存泄漏 VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.LoginStart }); int iRet = SDK_TDWYSDK.NetClient_Logon_V4(0, intptr, tInfo.iSize); Marshal.FreeHGlobal(intptr);//释放分配的非托管内存。 _iLogonID = iRet; if (_iLogonID < 0) { //登录失败 iRet = SDK_TDWYSDK.NetClient_Logoff(_iLogonID); VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.DevLoginException }); return(false); } //通过回调进行后续操作 return(true); }
private void VideoEnvironment_TDWY_MAIN_NOTIFYEvent(Int32 _ulLogonID, Int32 _iWparam, IntPtr _iLParam, IntPtr _iUser) { if (_ulLogonID == _iLogonID) { int iMsg = _iWparam & 0xffff; //表示属于当前信息登录信息 switch (iMsg) { //登陆状态消息 //param1 登陆IP //param2 登陆ID //param3 登陆状态 case NetSDKMsg.WCM_LOGON_NOTIFY: Int32 iStatus = _iLParam.ToInt32(); if (iStatus == NetSDKMsg.LOGON_SUCCESS) { VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.LoginSuccess }); //初始化通道列表 //Int32 iChanNum = 0; //SDK_TDWY.NetClient_GetChannelNum(_iLogonID, ref iChanNum); CLIENTINFO channel = new CLIENTINFO { m_iServerID = _iLogonID, m_iTimeout = 20, m_iNetMode = 1, m_iChannelNo = CurrentCameraInfo.Channel - 1, m_iStreamNO = (CurrentVideoPlaySet.PlayStream == Enum.Enum_VideoStream.SubStream) ? 1 : 0, m_cNetFile = new char[255], m_cRemoteIP = new char[16], }; Array.Copy(CurrentVideoInfo.DVSAddress.ToArray(), channel.m_cRemoteIP, CurrentVideoInfo.DVSAddress.Length); //开始接收一路视频数据 UInt32 uiConID = 0; int iRet = SDK_TDWYSDK.NetClient_StartRecv(ref uiConID, ref channel, null); VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.RequestConn }); if (iRet < 0) { //操作失败 VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.RequestVideoTimeout }); } m_iConnectId = Convert.ToInt32(uiConID); } else { //触发相关时间进行提示 VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.DevLoginException }); Console.WriteLine("登录失败,Status:" + iStatus); } break; case NetSDKMsg.WCM_VIDEO_HEAD_EX: RECT rect = new RECT(); SDK_TDWYSDK.NetClient_StartPlay(m_iConnectId, intptrPlayMain, rect, 0); VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.VideoPlay }); break; case NetSDKMsg.WCM_ERR_DIGITCHANNEL_NOT_ENABLED: VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.RequestVideoTimeout }); break; default: Console.WriteLine("TDWY- MyMAIN_NOTIFY_V4: " + iMsg); break; } } }
/// <summary> /// 初始化 /// </summary> public static void Init() { SDK_TDWYSDK.NetClient_Startup_V4(0, 0, 0); MainNotify_V4 = MyMAIN_NOTIFY_V4; SDK_TDWYSDK.NetClient_SetNotifyFunction_V4(MainNotify_V4, null, null, null, null); }
public SDK_TDWYSDKTests() { SDK_TDWYSDK.NetClient_Startup_V4(3000, 6000, 0); }