Beispiel #1
0
        public StreamDecoder()
        {
            _hikDecoder    = new HikM4Decoder();
            _ffmpegDecoder = new FfmpegDecoder();

            _hikDecoder.VideoFrameEvent += HikDecoder_VideoFrameEvent;
        }
Beispiel #2
0
 public void Dispose()
 {
     if (_decoder != null)
     {
         _decoder.VideoFrameEvent -= onVideoFrame;
         _decoder.Dispose();
     }
     _decoder = null;
 }
Beispiel #3
0
        private void initDecoder()
        {
            _ffmpegDecoder  = new FfmpegDecoder();
            _hikm4Decoder   = new HikM4Decoder();
            _univiewDecoder = new UniviewDecoder();

            _hikm4Decoder.VideoFrameEvent   += hikm4Decoder_VideoFrameEvent;
            _univiewDecoder.VideoFrameEvent += univiewDecoder_VideoFrameEvent;
        }
 void disposeHikDecoder()
 {
     if (_hikDecoder != null)
     {
         _hikDecoder.VideoFrameEvent -= onVideoFrame;
         _hikDecoder.Dispose();
     }
     _hikDecoder = null;
 }
 void initHikDecoder(byte[] header)
 {
     if (_hikDecoder == null)
     {
         _hikDecoder = new HikM4Decoder();
         _hikDecoder.VideoFrameEvent += onVideoFrame;
     }
     _hikDecoder.InputData(HikM4Decoder.HeaderType, header);
 }
 private void updatePlaySpeed(HikM4Decoder decoder)
 {
     if (_fastTimes == _expFastTimes)
     {
         return;
     }
     while (_fastTimes < _expFastTimes)
     {
         decoder.Fast();
         _fastTimes++;
     }
     while (_fastTimes > _expFastTimes)
     {
         decoder.Slow();
         _fastTimes--;
     }
     Console.WriteLine("FastTimes: " + _fastTimes);
 }
        void run()
        {
            HikM4Decoder decoder = new HikM4Decoder();

            decoder.VideoFrameEvent += Hikm4Decoder_VideoFrameEvent;

            byte[] header = null;
            int    index  = 0;

            int wait = 0;

            while (!_disposeEvent.WaitOne(wait))
            {
                wait = 1;
                if (_records.Length > 0)
                {
                    bool     reposed = false;
                    DateTime startRealTime;
                    DateTime startPlayTime;
                    lock (_playTimeLockObj)
                    {
                        startRealTime = _startRealTime;
                        startPlayTime = _startPlayTime;
                        reposed       = _reposed;
                        _reposed      = false;
                    }

                    if (_playing || reposed)
                    {
                        DateTime curPlayTime = startPlayTime + new TimeSpan((long)Math.Round((DateTime.Now - startRealTime).Ticks * _speed));
                        if (curPlayTime > EndTime)
                        {
                            curPlayTime = EndTime;
                        }

                        Record <HikM4Package> record = null;
                        if (reposed)
                        {
                            for (index = 0; index < _records.Length; index++)
                            {
                                if (_records[index].Time >= curPlayTime)
                                {
                                    break;
                                }
                            }
                            if (index < _records.Length)
                            {
                                record = _records[index];
                            }
                        }
                        else
                        {
                            int next = index + 1;
                            if (next < _records.Length && _records[next].Time < curPlayTime)
                            {
                                index  = next;
                                record = _records[index];
                            }
                        }

                        if (record != null)
                        {
                            _currentTime = record.Time;
                            if (!HikM4Decoder.ByteArrayEqual(header, record.Header))
                            {
                                header = record.Header;
                                decoder.InputData(HikM4Decoder.HeaderType, header);
                            }
                            updatePlaySpeed(decoder);
                            decoder.InputData(record.Package.Type, record.Package.Data);
                            wait = 0;
                        }
                    }
                }
            }
        }
Beispiel #8
0
 public HikStreamDecoder(byte[] data)
 {
     _decoder = new HikM4Decoder();
     _decoder.InputData(HikM4Decoder.HeaderType, data);
     _decoder.VideoFrameEvent += onVideoFrame;
 }