public NvrPlayback(NvrUserSession userSession, bool isDebugEnabled) { NvrUserSession = userSession; isDebugEnabled_ = isDebugEnabled; // Init timer, that will emit and take number of played frames from NVR SDK playedFramesTimer_ = new Timer( state => { uint unused = 0; IntPtr outBuffer = IntPtr.Zero; try { // Get playback frame count outBuffer = Marshal.AllocHGlobal(4); bool isOk = CHCNetSDK.NET_DVR_PlayBackControl_V40(playHandle_, CHCNetSDK.NET_DVR_PLAYGETFRAME, IntPtr.Zero, 0, outBuffer, ref unused); int frames = (int)Marshal.PtrToStructure(outBuffer, typeof(int)); if (isOk && frames > 0) { LastPlayedFrame = frames; OnFramePlayed?.BeginInvoke(this, frames, null, null); } } finally { Marshal.FreeHGlobal(outBuffer); } }); }
/// <summary> /// Start Preview in realtime. /// <para><paramref name="playWndHandle"/> - window handle, on fitch will be drawing.</para> /// <para><paramref name="previewSettings"/> - preview settings.</para> /// </summary> public void StartPreview(IntPtr playWndHandle, NvrPreviewSettings previewSettings) { if (livePlayer_.RealPlayHandle != -1) { throw new NvrBadLogicException("Call StopPreview before calling StartPreview"); } if (!NvrUserSession.IsSessionValid()) { throw new NvrBadLogicException("Call StartPreview when NvrUserSession is invalid"); } livePlayer_ = new LivePlayer(playWndHandle, previewSettings); CHCNetSDK.NET_DVR_PREVIEWINFO previewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO() { lChannel = NvrUserSession.UserSessionState.SelectedChannelNum, dwStreamType = livePlayer_.PreviewSettings.StreamType, dwLinkMode = (uint)livePlayer_.PreviewSettings.LinkMode, bBlocked = livePlayer_.PreviewSettings.IsBlocked, dwDisplayBufNum = livePlayer_.PreviewSettings.DisplayBufNum, byPreviewMode = (byte)livePlayer_.PreviewSettings.PreviewMode }; switch (previewSettings.PreviewHandleMode) { case PreviewHandleType.Direct: livePlayer_.RealDataCallBackFunc = null; previewInfo.hPlayWnd = livePlayer_.PlayWndHandlePtr; break; case PreviewHandleType.CallBack: livePlayer_.RealDataCallBackFunc = new CHCNetSDK.REALDATACALLBACK(realDataCallBack); // Real-time stream callback function previewInfo.hPlayWnd = IntPtr.Zero; break; } livePlayer_.RealPlayHandle = CHCNetSDK.NET_DVR_RealPlay_V40(NvrUserSession.UserSessionState.UserId, ref previewInfo, livePlayer_.RealDataCallBackFunc, IntPtr.Zero); if (livePlayer_.RealPlayHandle == -1) { throw new NvrSdkException(CHCNetSDK.NET_DVR_GetLastError(), "NET_DVR_RealPlay_V40 failed: " + livePlayer_.RealPlayHandle); } if (previewSettings.PreviewHandleMode == PreviewHandleType.Direct) { livePlayer_.DrawCallBackFunc = new CHCNetSDK.DRAWFUN(drawCallBack); if (!CHCNetSDK.NET_DVR_RigisterDrawFun(livePlayer_.RealPlayHandle, livePlayer_.DrawCallBackFunc, 0)) { invokeOnPreviewErrorEvent(PlayCtrl.PlayM4_GetLastError(livePlayer_.RealPlayPort), "NET_DVR_RigisterDrawFun failed"); } } debugInfo("NET_DVR_RealPlay_V40 succ!"); }
public NvrRecordLabels(NvrUserSession userSession, bool isDebugEnabled) { NvrUserSession = userSession; isDebugEnabled_ = isDebugEnabled; }
public NvrLivePlayer(NvrUserSession userSession, bool isDebugEnabled) { NvrUserSession = userSession; isDebugEnabled_ = isDebugEnabled; livePlayer_ = LivePlayer.Default(); }
public NvrSettings(NvrUserSession userSession, bool isDebugEnabled) { NvrUserSession = userSession; isDebugEnabled_ = isDebugEnabled; }