//连接视频 private void ConnectVideo(Int32 _iStream) { if (m_iLogonId < 0) { MessageBox.Show("Please logon device first!"); return; } //断开已有连接 DisConnectVideo(); CLIENTINFO tInfo = new CLIENTINFO(); tInfo.m_iServerID = m_iLogonId; tInfo.m_iTimeout = 20; tInfo.m_iNetMode = 1; //默认TCP连接 tInfo.m_iChannelNo = cboChanList.SelectedIndex; tInfo.m_iStreamNO = _iStream; if (STREAM_3RD == _iStream) { tInfo.m_iStreamNO = STREAM_2ND; tInfo.m_iFlag = FLAG_THREE_STREAM; } tInfo.m_cNetFile = new char[255]; tInfo.m_cRemoteIP = new char[16]; Array.Copy(textIP.Text.ToCharArray(), tInfo.m_cRemoteIP, textIP.Text.Length); //开始接收一路视频数据,接收到数据后MainNotify有消息回调,然后才能播放视频 UInt32 uiConID = 0; int iRet = NVSSDK.NetClient_StartRecv(ref uiConID, ref tInfo, null); if (iRet < 0) { MessageBox.Show("Connect video failed, ret:" + iRet); return; } m_iConnectId = (Int32)uiConID; m_iConnChanNo = tInfo.m_iChannelNo; m_iConnStream = _iStream; //设置原始流回调 //NVSSDK.NetClient_SetRawFrameCallBack(m_iConnectId, Notify_RawFrame, IntPtr.Zero); }
public static extern Int32 NetClient_StartRecv(ref UInt32 _uiConID, ref CLIENTINFO _cltInfo, RECVDATA_NOTIFY _cbkDataArrive);
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> /// <param name="_ulLogonID"></param> /// <param name="_iWparam"></param> /// <param name="_iLParam"></param> /// <param name="_iUser"></param> private void MyMAIN_NOTIFY_V4(Int32 _ulLogonID, Int32 _iWparam, IntPtr _iLParam, IntPtr _iUser) { 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) { Console.WriteLine("登录成功"); //VideoPlayCallback(new VideoPlayCallbackValue { evType = Enum_VideoPlayEventType.LoginSuccess }); //初始化通道列表 //Int32 iChanNum = 0; //SDK_TDWY.NetClient_GetChannelNum(_iLogonID, ref iChanNum); m_iLogonId = _ulLogonID; CLIENTINFO channel = new CLIENTINFO { m_iServerID = m_iLogonId, m_iTimeout = 20, m_iNetMode = 1, m_iChannelNo = 0, m_iStreamNO = 1, 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 = NetClient_StartRecv(ref uiConID, ref channel, null); if (iRet < 0) { //操作失败 } 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(); this.BeginInvoke(new EventHandler(delegate { NetClient_StartPlay(m_iConnectId, panelVideoShow.Handle, 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; } }
public static extern Int32 NetClient_StartRecvEx(ref UInt32 _ulConID, ref CLIENTINFO _cltInfo, RECVDATA_NOTIFY_EX _cbkDataNotifyEx, IntPtr _lpUserData);