private void btnPreview_Click(object sender, EventArgs e) { if (m_lUserID < 0) { MessageBox.Show("Please login the device firstly!"); return; } if (m_bRecord) { MessageBox.Show("Please stop recording firstly!"); return; } if (m_lRealHandle < 0) { CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); lpPreviewInfo.hPlayWnd = RealPlayWnd.Handle;//预览窗口 live view window lpPreviewInfo.lChannel = iChannelNum[(int)iSelIndex];//预览的设备通道 the device channel number lpPreviewInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推 lpPreviewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流 IntPtr pUser = IntPtr.Zero;//用户数据 user data if (comboBoxView.SelectedIndex == 0) { //打开预览 Start live view m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null/*RealData*/, pUser); } else //回调解码 { lpPreviewInfo.hPlayWnd = IntPtr.Zero;//预览窗口 live view window m_ptrRealHandle = RealPlayWnd.Handle; RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数 real-time stream callback function m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, RealData, pUser); } if (m_lRealHandle < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 failed to start live view, and output the error code. DebugInfo(str); return; } else { //预览成功 DebugInfo("NET_DVR_RealPlay_V40 succ!"); btnPreview.Text = "Stop View"; } } else { //停止预览 Stop live view if (!CHCNetSDK.NET_DVR_StopRealPlay(m_lRealHandle)) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_StopRealPlay failed, error code= " + iLastErr; DebugInfo(str); return; } if ((comboBoxView.SelectedIndex == 1) && (m_lPort >= 0)) { if (!PlayCtrl.PlayM4_Stop(m_lPort)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_Stop failed, error code= " + iLastErr; DebugInfo(str); } if (!PlayCtrl.PlayM4_CloseStream(m_lPort)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_CloseStream failed, error code= " + iLastErr; DebugInfo(str); } if (!PlayCtrl.PlayM4_FreePort(m_lPort)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_FreePort failed, error code= " + iLastErr; DebugInfo(str); } m_lPort = -1; } DebugInfo("NET_DVR_StopRealPlay succ!"); m_lRealHandle = -1; btnPreview.Text = "Live View"; RealPlayWnd.Invalidate();//刷新窗口 refresh the window } return; }
private void btnPreview_Click(object sender, EventArgs e) { if (m_lUserID < 0) { MessageBox.Show("Please login the device firstly!"); return; } if (m_bRecord) { MessageBox.Show("Please stop recording firstly!"); return; } //if (m_lRealHandle < 0) { CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO(); lpPreviewInfo.hPlayWnd = selectedRealPlayWnd.Handle;//预览窗口 live view window lpPreviewInfo.lChannel = iChannelNum[(int)iSelIndex];//预览的设备通道 the device channel number lpPreviewInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推 lpPreviewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流 IntPtr pUser = new IntPtr(lpPreviewInfo.lChannel);//IntPtr.Zero;//用户数据 user data if (!channelPortDict.ContainsKey(lpPreviewInfo.lChannel)) { channelPortDict.Add(lpPreviewInfo.lChannel, -1); } if (!lRealHandleDict.ContainsKey(lpPreviewInfo.lChannel)) { lRealHandleDict.Add(lpPreviewInfo.lChannel, -1); } if (comboBoxView.SelectedIndex == 0) { //打开预览 Start live view channelPortDict[lpPreviewInfo.lChannel] = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null/*RealData*/, pUser); } else //回调解码 { if (!ptrRealHandleDict.ContainsKey(lpPreviewInfo.lChannel)) { ptrRealHandleDict.Add(lpPreviewInfo.lChannel, selectedRealPlayWnd.Handle); } else { ptrRealHandleDict[lpPreviewInfo.lChannel] = selectedRealPlayWnd.Handle; } //RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数 real-time stream callback function //lRealHandleDict[lpPreviewInfo.lChannel] = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, RealData, pUser); CHCNetSDK.REALDATACALLBACK RealData = new CHCNetSDK.REALDATACALLBACK(RealDataCallBack);//预览实时流回调函数 real-time stream callback function RealDataDict.Add(lpPreviewInfo.lChannel, RealData); lRealHandleDict[lpPreviewInfo.lChannel] = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, RealData, pUser); } if (lRealHandleDict[lpPreviewInfo.lChannel] < 0) { iLastErr = CHCNetSDK.NET_DVR_GetLastError(); str = "NET_DVR_RealPlay_V40 failed, error code= " + iLastErr; //预览失败,输出错误号 failed to start live view, and output the error code. DebugInfo(str); return; } else { //预览成功 DebugInfo("NET_DVR_RealPlay_V40 succ!"); //btnPreview.Text = "Stop View"; } } return; }