public void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); switch (lCommand) { case CHCNetSDK.COMM_ALARM: ProcessCommAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; case CHCNetSDK.COMM_ALARM_V30: ProcessCommAlarm_V30(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; case CHCNetSDK.COMM_ALARM_RULE: this.BeginInvoke(AlarmInfo, "COMM_ALARM_RULE"); break; case CHCNetSDK.COMM_TRADEINFO: this.BeginInvoke(AlarmInfo, "COMM_TRADEINFO"); break; case CHCNetSDK.COMM_IPCCFG: this.BeginInvoke(AlarmInfo, "COMM_IPCCFG"); break; case CHCNetSDK.COMM_IPCCFG_V31: this.BeginInvoke(AlarmInfo, "COMM_IPCCFG_V31"); break; default: break; } }
public void RemoteDisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReserved) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); if (!m_bJpegCapture) { return; } else { uint nLastErr = 100; // save picture as you want if (!PlayCtrl.PlayM4_ConvertToJpegFile(pBuf, nSize, nWidth, nHeight, nType, "C:/Capture.jpg")) { //Debug.WriteLine("PlayM4_ConvertToJpegFile fail"); nLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); this.BeginInvoke(AlarmInfo, "Jpeg Capture fail"); } else { this.BeginInvoke(AlarmInfo, "Jpeg Capture Succ"); //Debug.WriteLine("PlayM4_ConvertToJpegFile Succ"); } } m_bJpegCapture = false; }
public void ProcessCommAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); CHCNetSDK.NET_DVR_ALARMINFO struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO(); struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO)); string str; switch (struAlarmInfo.dwAlarmType) { case 0: this.BeginInvoke(AlarmInfo, "sensor alarm"); break; case 1: this.BeginInvoke(AlarmInfo, "hard disk full"); break; case 2: this.BeginInvoke(AlarmInfo, "video lost"); break; case 3: str = ""; str += pAlarmer.sDeviceIP; str += " motion detection"; this.BeginInvoke(AlarmInfo, str); m_bJpegCapture = true; break; case 4: this.BeginInvoke(AlarmInfo, "hard disk unformatted"); break; case 5: this.BeginInvoke(AlarmInfo, "hard disk error"); break; case 6: this.BeginInvoke(AlarmInfo, "tampering detection"); break; case 7: this.BeginInvoke(AlarmInfo, "unmatched video output standard"); break; case 8: this.BeginInvoke(AlarmInfo, "illegal operation"); break; default: this.BeginInvoke(AlarmInfo, "Unknow alarm"); break; } }
public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); switch (dwDataType) { case CHCNetSDK.NET_DVR_SYSHEAD: // sys head if (dwBufSize > 0) { //获取播放句柄 Get the port to play if (!PlayCtrl.PlayM4_GetPort(ref m_lPort)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_GetPort failed, error code= " + iLastErr; this.BeginInvoke(AlarmInfo, str); break; } //设置流播放模式 Set the stream mode: real-time stream mode if (!PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, PlayCtrl.STREAME_REALTIME)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "Set STREAME_REALTIME mode failed, error code= " + iLastErr; this.BeginInvoke(AlarmInfo, str); } //打开码流,送入头数据 Open stream if (!PlayCtrl.PlayM4_OpenStream(m_lPort, pBuffer, dwBufSize, 2 * 1024 * 1024)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_OpenStream failed, error code= " + iLastErr; this.BeginInvoke(AlarmInfo, str); break; } //设置显示缓冲区个数 Set the display buffer number if (!PlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_SetDisplayBuf failed, error code= " + iLastErr; this.BeginInvoke(AlarmInfo, str); } //设置显示模式 Set the display mode if (!PlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0 /* COLORREF(0)*/)) //play off screen { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_SetOverlayMode failed, error code= " + iLastErr; this.BeginInvoke(AlarmInfo, str); } //设置解码回调函数,获取解码后音视频原始数据 Set callback function of decoded data m_fDisplayFun = new PlayCtrl.DECCBFUN(DecCallbackFUN); if (!PlayCtrl.PlayM4_SetDecCallBackEx(m_lPort, m_fDisplayFun, IntPtr.Zero, 0)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail"); } //开始解码 Start to play if (!PlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_Play failed, error code= " + iLastErr; this.BeginInvoke(AlarmInfo, str); break; } } break; case CHCNetSDK.NET_DVR_STREAMDATA: // video stream data if (dwBufSize > 0 && m_lPort != -1) { for (int i = 0; i < 999; i++) { //送入码流数据进行解码 Input the stream data to decode if (!PlayCtrl.PlayM4_InputData(m_lPort, pBuffer, dwBufSize)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_InputData failed, error code= " + iLastErr; Thread.Sleep(2); } else { break; } } } break; default: if (dwBufSize > 0 && m_lPort != -1) { //送入其他数据 Input the other data for (int i = 0; i < 999; i++) { if (!PlayCtrl.PlayM4_InputData(m_lPort, pBuffer, dwBufSize)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_InputData failed, error code= " + iLastErr; Thread.Sleep(2); } else { break; } } } break; } }
public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); IntPtr pObject = new IntPtr(); GCHandle hObject = new GCHandle(); hObject = GCHandle.Alloc(pBuffer, GCHandleType.Pinned); pObject = hObject.AddrOfPinnedObject(); switch (dwDataType) { case CHCNetSDK.NET_DVR_SYSHEAD: // sys head if (!PlayCtrl.PlayM4_GetPort(ref m_lPort)) { MessageBox.Show("Get Port Fail"); } if (dwBufSize > 0) { //set as stream mode, real-time stream under preview if (!PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, PlayCtrl.STREAME_REALTIME)) { //this.Dispatcher.BeginInvoke(AlarmInfo, "PlayM4_SetStreamOpenMode fail"); } //start player if (!PlayCtrl.PlayM4_OpenStream(m_lPort, pObject, dwBufSize, 320 * 280)) { m_lPort = -1; //this.Dispatcher.BeginInvoke(AlarmInfo, "PlayM4_OpenStream fail"); break; } m_fDisplayFun = new PlayCtrl.DISPLAYCBFUN(RemoteDisplayCBFun); if (!PlayCtrl.PlayM4_SetDisplayCallBack(m_lPort, m_fDisplayFun)) { //this.Dispatcher.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail"); } if (!PlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle)) { m_lPort = -1; //this.Dispatcher.BeginInvoke(AlarmInfo, "PlayM4_Play fail"); break; } } break; case CHCNetSDK.NET_DVR_STREAMDATA: // video stream data if (dwBufSize > 0 && m_lPort != -1) { try { //送入码流数据进行解码 Input the stream data to decode PlayCtrl.PlayM4_InputData(m_lPort, pBuffer, dwBufSize); } catch (Exception e) { throw; } } break; case CHCNetSDK.NET_DVR_AUDIOSTREAMDATA: // Audio Stream Data if (dwBufSize > 0 && m_lPort != -1) { if (!PlayCtrl.PlayM4_InputVideoData(m_lPort, pObject, dwBufSize)) { //this.Dispatcher.BeginInvoke(AlarmInfo, "PlayM4_InputVideoData Fail"); } } break; default: break; } if (hObject.IsAllocated) { hObject.Free(); } }
public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, ref byte pBuffer, UInt32 dwBufSize, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); switch (dwDataType) { case CHCNetSDK.NET_DVR_SYSHEAD: // sys head if (!PlayCtrl.PlayM4_GetPort(ref m_lPort)) { MessageBox.Show("Get Port Fail"); } if (dwBufSize > 0) { //set as stream mode, real-time stream under preview if (!PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, PlayCtrl.STREAME_REALTIME)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetStreamOpenMode fail"); } //start player if (!PlayCtrl.PlayM4_OpenStream(m_lPort, ref pBuffer, dwBufSize, 1024 * 1024)) { m_lPort = -1; this.BeginInvoke(AlarmInfo, "PlayM4_OpenStream fail"); break; } //set soft decode display callback function to capture m_fDisplayFun = new PlayCtrl.DISPLAYCBFUN(RemoteDisplayCBFun); if (!PlayCtrl.PlayM4_SetDisplayCallBack(m_lPort, m_fDisplayFun)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail"); } //start play, set play window this.BeginInvoke(AlarmInfo, "About to call PlayM4_Play"); if (!PlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle)) { m_lPort = -1; this.BeginInvoke(AlarmInfo, "PlayM4_Play fail"); break; } //set frame buffer number if (!PlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayBuf fail"); } //set display mode if (!PlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0 /* COLORREF(0)*/)) //play off screen // todo!!! { this.BeginInvoke(AlarmInfo, " PlayM4_SetOverlayMode fail"); } } break; case CHCNetSDK.NET_DVR_STREAMDATA: // video stream data if (dwBufSize > 0 && m_lPort != -1) { if (!PlayCtrl.PlayM4_InputData(m_lPort, ref pBuffer, dwBufSize)) { this.BeginInvoke(AlarmInfo, " PlayM4_InputData fail"); } } break; case CHCNetSDK.NET_DVR_AUDIOSTREAMDATA: // Audio Stream Data if (dwBufSize > 0 && m_lPort != -1) { if (!PlayCtrl.PlayM4_InputVideoData(m_lPort, ref pBuffer, dwBufSize)) { this.BeginInvoke(AlarmInfo, "PlayM4_InputVideoData Fail"); } } break; default: break; } }
public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, ref byte pBuffer, UInt32 dwBufSize, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); switch (dwDataType) { case CHCNetSDK.NET_DVR_SYSHEAD: // sys head if (!PlayCtrl.PlayM4_GetPort(ref m_lPort)) { MessageBox.Show("Get Port Fail"); } if (dwBufSize > 0) { //set as stream mode, real-time stream under preview if (!PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, PlayCtrl.STREAME_REALTIME)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetStreamOpenMode fail"); } //start player if (!PlayCtrl.PlayM4_OpenStream(m_lPort, ref pBuffer, dwBufSize, 1024 * 1024)) { m_lPort = -1; this.BeginInvoke(AlarmInfo, "PlayM4_OpenStream fail"); break; } //set soft decode display callback function to capture m_fDisplayFun = new PlayCtrl.DISPLAYCBFUN(RemoteDisplayCBFun); if (!PlayCtrl.PlayM4_SetDisplayCallBack(m_lPort, m_fDisplayFun)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail"); } //set frame buffer number if (!PlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15)) { this.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayBuf fail"); } //start play, set play window this.BeginInvoke(AlarmInfo, "About to call PlayM4_Play"); if (!PlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle)) { m_lPort = -1; this.BeginInvoke(AlarmInfo, "PlayM4_Play fail"); break; } //set display mode if (!PlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0/* COLORREF(0)*/))//play off screen // todo!!! { this.BeginInvoke(AlarmInfo, " PlayM4_SetOverlayMode fail"); } } break; case CHCNetSDK.NET_DVR_STREAMDATA: // video stream data if (dwBufSize > 0 && m_lPort != -1) { if (!PlayCtrl.PlayM4_InputData(m_lPort, ref pBuffer, dwBufSize)) { this.BeginInvoke(AlarmInfo, " PlayM4_InputData fail"); } } break; case CHCNetSDK.NET_DVR_AUDIOSTREAMDATA: // Audio Stream Data if (dwBufSize > 0 && m_lPort != -1) { if (!PlayCtrl.PlayM4_InputVideoData(m_lPort, ref pBuffer, dwBufSize)) { this.BeginInvoke(AlarmInfo, "PlayM4_InputVideoData Fail"); } } break; default: break; } }
private void ProcessCommAlarm_V30(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { MyDebugInfo alarmInfo = new MyDebugInfo(DebugInfo); CHCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfoV30 = new CHCNetSDK.NET_DVR_ALARMINFO_V30(); struAlarmInfoV30 = (CHCNetSDK.NET_DVR_ALARMINFO_V30)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO_V30)); string str; switch (struAlarmInfoV30.dwAlarmType) { case 0: this.BeginInvoke(alarmInfo, "sensor alarm"); break; case 1: this.BeginInvoke(alarmInfo, "hard disk full"); break; case 2: str = "video lost on "; str += getAlarmInfo(pAlarmer, struAlarmInfoV30); this.BeginInvoke(alarmInfo, str); playSound(alarmInfo, @"intel_alarm.wav"); break; case 3: str = "motion detection on "; str += getAlarmInfo(pAlarmer, struAlarmInfoV30); this.BeginInvoke(alarmInfo, str); playSound(alarmInfo, @"motion.wav"); break; case 4: this.BeginInvoke(alarmInfo, "hard disk unformatted"); break; case 5: this.BeginInvoke(alarmInfo, "hard disk error"); break; case 6: str = "tampering detection on "; str += getAlarmInfo(pAlarmer, struAlarmInfoV30); this.BeginInvoke(alarmInfo, str); playSound(alarmInfo, @"intel_alarm.wav"); break; case 7: this.BeginInvoke(alarmInfo, "unmatched video output standard"); break; case 8: this.BeginInvoke(alarmInfo, "illegal operation"); break; case 9: this.BeginInvoke(alarmInfo, "video signal abnormal"); break; case 10: this.BeginInvoke(alarmInfo, "record abnormal"); break; default: this.BeginInvoke(alarmInfo, "Unknow alarm"); break; } }
// Alarm callback public void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); switch (lCommand) { case CHCNetSDK.COMM_ALARM: ProcessCommAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; case CHCNetSDK.COMM_ALARM_V30: ProcessCommAlarm_V30(ref pAlarmer, pAlarmInfo, dwBufLen, pUser); break; case CHCNetSDK.COMM_ALARM_RULE: this.BeginInvoke(AlarmInfo, "COMM_ALARM_RULE"); break; case CHCNetSDK.COMM_TRADEINFO: this.BeginInvoke(AlarmInfo, "COMM_TRADEINFO"); break; case CHCNetSDK.COMM_IPCCFG: this.BeginInvoke(AlarmInfo, "COMM_IPCCFG"); break; case CHCNetSDK.COMM_IPCCFG_V31: this.BeginInvoke(AlarmInfo, "COMM_IPCCFG_V31"); break; default: break; } }
private void websocket_Opened(object sender, EventArgs e) { MyDebugInfo alarmInfo = new MyDebugInfo(DebugInfo); this.BeginInvoke(alarmInfo, "Websocket connection opened"); }
private void websocket_MessageReceived(object sender, MessageReceivedEventArgs e) { MyDebugInfo alarmInfo = new MyDebugInfo(DebugInfo); this.BeginInvoke(alarmInfo, "New message: " + e.Message); }
private void websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e) { MyDebugInfo alarmInfo = new MyDebugInfo(DebugInfo); this.BeginInvoke(alarmInfo, "Websocket connection error: " + e.Exception.Message); }
public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser) { string str; //下面数据处理建议使用委托的方式 MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); switch (dwDataType) { case CHCNetSDK.NET_DVR_SYSHEAD: // sys head if (dwBufSize > 0) { //获取播放句柄 Get the port to play if (!PlayCtrl.PlayM4_GetPort(ref m_lPort)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_GetPort failed, error code= " + iLastErr; this.form.BeginInvoke(AlarmInfo, str); break; } //设置流播放模式 Set the stream mode: real-time stream mode if (!PlayCtrl.PlayM4_SetStreamOpenMode(m_lPort, PlayCtrl.STREAME_REALTIME)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "Set STREAME_REALTIME mode failed, error code= " + iLastErr; this.form.BeginInvoke(AlarmInfo, str); } //打开码流,送入头数据 Open stream if (!PlayCtrl.PlayM4_OpenStream(m_lPort, pBuffer, dwBufSize, 2 * 1024 * 1024)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_OpenStream failed, error code= " + iLastErr; this.form.BeginInvoke(AlarmInfo, str); break; } //设置显示缓冲区个数 Set the display buffer number if (!PlayCtrl.PlayM4_SetDisplayBuf(m_lPort, 15)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_SetDisplayBuf failed, error code= " + iLastErr; this.form.BeginInvoke(AlarmInfo, str); } //设置显示模式 Set the display mode if (!PlayCtrl.PlayM4_SetOverlayMode(m_lPort, 0, 0/* COLORREF(0)*/)) //play off screen { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_SetOverlayMode failed, error code= " + iLastErr; this.form.BeginInvoke(AlarmInfo, str); } //设置解码回调函数,获取解码后音视频原始数据 Set callback function of decoded data m_fDisplayFun = new PlayCtrl.DECCBFUN(DecCallbackFUN); if (!PlayCtrl.PlayM4_SetDecCallBackEx(m_lPort, m_fDisplayFun, IntPtr.Zero, 0)) { this.form.BeginInvoke(AlarmInfo, "PlayM4_SetDisplayCallBack fail"); } //开始解码 Start to play if (!PlayCtrl.PlayM4_Play(m_lPort, m_ptrRealHandle)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_Play failed, error code= " + iLastErr; this.form.BeginInvoke(AlarmInfo, str); break; } } break; case CHCNetSDK.NET_DVR_STREAMDATA: // video stream data if (dwBufSize > 0 && m_lPort != -1) { for (int i = 0; i < 999; i++) { //送入码流数据进行解码 Input the stream data to decode if (!PlayCtrl.PlayM4_InputData(m_lPort, pBuffer, dwBufSize)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_InputData failed, error code= " + iLastErr; Thread.Sleep(2); } else { break; } } } break; default: if (dwBufSize > 0 && m_lPort != -1) { //送入其他数据 Input the other data for (int i = 0; i < 999; i++) { if (!PlayCtrl.PlayM4_InputData(m_lPort, pBuffer, dwBufSize)) { iLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); str = "PlayM4_InputData failed, error code= " + iLastErr; Thread.Sleep(2); } else { break; } } } break; } }
public void RemoteDisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReserved) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); if (!m_bJpegCapture) { return; } else { uint nLastErr = 100; // save picture as you want if (!PlayCtrl.PlayM4_ConvertToJpegFile(pBuf, nSize, nWidth, nHeight, nType, "C:/Capture.jpg")) { //Debug.WriteLine("PlayM4_ConvertToJpegFile fail"); nLastErr = PlayCtrl.PlayM4_GetLastError(m_lPort); this.BeginInvoke(AlarmInfo, "Jpeg Capture fail"); } else { this.BeginInvoke(AlarmInfo, "Jpeg Capture success"); //Debug.WriteLine("PlayM4_ConvertToJpegFile Succ"); } } m_bJpegCapture = false; }
public void RealDataCallBack(int lRealHandle, uint dwDataType, IntPtr pBuffer, uint dwBufSize, IntPtr pUser) { var alarmInfo = new MyDebugInfo(DebugInfo); switch (dwDataType) { case ChcNetSdk.NetDvrSyshead: // sys head if (dwBufSize > 0) { //获取播放句柄 Get the port to play if (!PlayCtrl.PlayM4_GetPort(ref _mLPort)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_GetPort failed, error code= " + _iLastErr; BeginInvoke(alarmInfo, _str); break; } //设置流播放模式 Set the stream mode: real-time stream mode if (!PlayCtrl.PlayM4_SetStreamOpenMode(_mLPort, PlayCtrl.StreameRealtime)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "Set STREAME_REALTIME mode failed, error code= " + _iLastErr; BeginInvoke(alarmInfo, _str); } //打开码流,送入头数据 Open stream if (!PlayCtrl.PlayM4_OpenStream(_mLPort, pBuffer, dwBufSize, 2 * 1024 * 1024)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_OpenStream failed, error code= " + _iLastErr; BeginInvoke(alarmInfo, _str); break; } //设置显示缓冲区个数 Set the display buffer number if (!PlayCtrl.PlayM4_SetDisplayBuf(_mLPort, 15)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_SetDisplayBuf failed, error code= " + _iLastErr; BeginInvoke(alarmInfo, _str); } //设置显示模式 Set the display mode if (!PlayCtrl.PlayM4_SetOverlayMode(_mLPort, 0, 0 /* COLORREF(0)*/)) //play off screen { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_SetOverlayMode failed, error code= " + _iLastErr; BeginInvoke(alarmInfo, _str); } //设置解码回调函数,获取解码后音视频原始数据 Set callback function of decoded data _mFDisplayFun = DecCallbackFun; if (!PlayCtrl.PlayM4_SetDecCallBackEx(_mLPort, _mFDisplayFun, IntPtr.Zero, 0)) { BeginInvoke(alarmInfo, "PlayM4_SetDisplayCallBack fail"); } //开始解码 Start to play if (!PlayCtrl.PlayM4_Play(_mLPort, _mPtrRealHandle)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_Play failed, error code= " + _iLastErr; BeginInvoke(alarmInfo, _str); } } break; case ChcNetSdk.NetDvrStreamdata: // video stream data if (dwBufSize > 0 && _mLPort != -1) { for (var i = 0; i < 999; i++) { //送入码流数据进行解码 Input the stream data to decode if (!PlayCtrl.PlayM4_InputData(_mLPort, pBuffer, dwBufSize)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_InputData failed, error code= " + _iLastErr; Thread.Sleep(2); } else { break; } } } break; default: if (dwBufSize > 0 && _mLPort != -1) { //送入其他数据 Input the other data for (var i = 0; i < 999; i++) { if (!PlayCtrl.PlayM4_InputData(_mLPort, pBuffer, dwBufSize)) { _iLastErr = PlayCtrl.PlayM4_GetLastError(_mLPort); _str = "PlayM4_InputData failed, error code= " + _iLastErr; Thread.Sleep(2); } else { break; } } } break; } }
private void playSound(MyDebugInfo alarmInfo, String fileName) { try { System.Media.SoundPlayer player; if (soundCache.Contains(fileName)) { player = (System.Media.SoundPlayer)soundCache[fileName]; } else { player = new System.Media.SoundPlayer(fileName); soundCache.Add(fileName, player); } if (player != null) { player.Play(); } } catch (Exception e) { String currentPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath); this.BeginInvoke(alarmInfo, "Error playing file " + currentPath + @"\" + fileName + ". " + e.Message); } }