public void Shutdown() { logger.Trace("ScreenStreamer::Shutdown()"); //if (streamerThread != null && streamerThread.ThreadState == System.Threading.ThreadState.Running) //{ // //... //} if (syncEvent != null) { syncEvent.Dispose(); syncEvent = null; } if (ExceptionObj != null) { logger.Warn(ExceptionObj); ExceptionObj = null; } errorCode = 0; state = MediaStreamerState.Shutdown; StateChanged?.Invoke(); }
public bool Stop() { logger.Debug("ScreenStreamer::Stop()"); if (state != MediaStreamerState.Streaming) { logger.Warn("ScreenStreamer::Stop() return invalid state: " + state); return(false); } state = MediaStreamerState.Stopping; StateChanged?.Invoke(); syncEvent?.Set(); return(true); }
public bool Start(StreamSession session) { logger.Debug("ScreenStreamer::Start(...)"); Debug.Assert(session != null, "session!=null"); if (state != MediaStreamerState.Shutdown) { logger.Warn("ScreenStreamer::Start(...) return invalid state: " + state); return(false); } state = MediaStreamerState.Starting; StateChanged?.Invoke(); streamerThread = new Thread(DoStreaming); streamerThread.IsBackground = true; streamerThread.Start(session); return(true); }
private void DoStreaming(object session) { try { Session = session as StreamSession; syncEvent = new AutoResetEvent(false); // Session.Setup(); StartStreaming(); Stats.Clear(); Stats.AddRange(new[] { videoSource?.Stats, videoStreamer?.Stats }); if (state == MediaStreamerState.Starting) { state = MediaStreamerState.Streaming; StateChanged?.Invoke(); } var videoEnabled = Session.VideoEnabled; var audioEnabled = Session.AudioEnabled; while (state == MediaStreamerState.Streaming) { if (videoEnabled) { //TODO: check audio video state... // get stats... if (videoSource != null) { if (videoSource.State != CaptureState.Capturing) { var _errorCode = videoSource.ErrorCode; logger.Warn("videoSource.State == " + videoSource.State + " " + _errorCode); if (_errorCode != 0) { this.errorCode = _errorCode; break; } } } if (videoStreamer != null) { if (videoStreamer.State != StreamerState.Streaming) { logger.Warn("videoStreamer.State == " + videoStreamer.State); } } } if (audioEnabled) { if (audioSource != null) { if (audioSource.State != CaptureState.Capturing) { logger.Warn("audioSource.State == " + audioSource.State); } } if (audioStreamer != null) { } } if (!communicationService.IsOpened) { logger.Warn("communicationService.IsOpened == false"); //... } syncEvent.WaitOne(1000); } if (errorCode != 0) { logger.Warn("MediaStreamerState.Stopping: " + errorCode); state = MediaStreamerState.Stopping; StateChanged?.Invoke(); } } catch (Exception ex) { logger.Error(ex); ProcessError(ex); } finally { StopStreaming(); state = MediaStreamerState.Stopped; StateChanged?.Invoke(); } }