Пример #1
0
        private void WorkFunc()
        {
            try
            {
                //здесь получаем кадры, организуем сетевое взаимодейтствие с утройством

                long frameStartTime = Environment.TickCount;
                long eventStartTime = Environment.TickCount;

                Random randomizer = new Random();

                int fps             = 25;
                int frameDelay      = 1000 / fps;
                int disconnectDelay = 10000 + randomizer.Next(5000);

                AddLogRecord(StreamTypes.Main, ChannelStreamTypes.MainVideo, string.Format("Попытка установить подключение к камере {0}({1}) по адресу: {2}.", ModuleInfo.DevName, this.GetType().Name, conParams.Address));
                Thread.Sleep(1000);                 //здесь должна быть логика подключения к камере
                AddLogRecord(StreamTypes.Main, ChannelStreamTypes.MainVideo, "Подключение к камере установлено. Начинаем приём кадров.");

                //Идентификатор последовательности видео кадров
                Guid videoSeqId = Guid.NewGuid();
                //Номер очередного видео кадра в последовательности
                long videoNumInSeq = 0;

                while (true)
                {
                    //имитируем разрыв с камерой
                    if (Environment.TickCount - eventStartTime >= disconnectDelay)
                    {
                        OnNoConnection();

                        Thread.Sleep(5000 + randomizer.Next(5000));
                        disconnectDelay = 5000 + randomizer.Next(5000);
                        eventStartTime  = Environment.TickCount;
                        continue;
                    }

                    //имитируем работу камеры с частотой 25 кадров в секунду
                    if (Environment.TickCount - frameStartTime >= frameDelay)
                    {
                        var jpegFrame = new RawMJPEGFrame(new ReferencedBytes(Camera.Properties.Resources.testFrame));
                        //jpegFrame.Id.SeqId = videoSeqId;
                        //jpegFrame.Id.NumInSeq = videoNumInSeq++;
                        jpegFrame.TimeStamp = DateTime.UtcNow;

                        NewRawFrame(this, new NewRawFrameEventArgs(ChannelStreamTypes.MainVideo, jpegFrame));
                        frameStartTime = Environment.TickCount;
                    }
                }
            }
            catch (ThreadAbortException)
            {
                AddLogRecord(StreamTypes.Main, ChannelStreamTypes.MainVideo, "Ручная остановка подключения к камере.");
            }
            catch (Exception ex)
            {
                AddLogRecord(StreamTypes.Main, ChannelStreamTypes.MainVideo, "* Ошибка при получении кадров с камеры: " + ex.Message);
                SampleLogMgr.LogException(ex, string.Empty);
            }
        }
Пример #2
0
 public void StartStream(ChannelStreamTypes streamType)
 {
     try
     {
         if (streamType == ChannelStreamTypes.MainVideo)
         {
             mainVideoThread = new Thread(WorkFunc);
             mainVideoThread.IsBackground = true;
             mainVideoThread.Start();
         }
     }
     catch (Exception ex)
     {
         SampleLogMgr.LogException(ex, string.Empty);
     }
 }
Пример #3
0
 public void StopStream(ChannelStreamTypes streamType)
 {
     try
     {
         if (streamType == ChannelStreamTypes.MainVideo)
         {
             if (mainVideoThread != null)
             {
                 mainVideoThread.Abort();
                 mainVideoThread = null;
             }
         }
     }
     catch (Exception ex)
     {
         SampleLogMgr.LogException(ex, string.Empty);
     }
 }