Ejemplo n.º 1
0
 public override void Stop()
 {
     if (!_isworking)
     {
         return;
     }
     _isworking = false;
     ThreadEx.ThreadStop(_playThread);
     _queue.Clear();
     _curPlayTime = 0;
 }
Ejemplo n.º 2
0
 public void Stop()
 {
     if (!_isworking)
     {
         return;
     }
     _isworking = false;
     ThreadEx.ThreadStop(_playThread);
     ThreadEx.ThreadStop(_PlayBackwardThread);
     _queue.Clear();
     _curPlayMediaTimetick = 0;
     _yuvDraw.Stop();
 }
Ejemplo n.º 3
0
 public override void Close()
 {
     base.Close();
     if (_curMS != null)
     {
         _queueMS.Clear();
     }
     if (_curMS != null)
     {
         _curMS.Close();
     }
 }
Ejemplo n.º 4
0
 public void Stop()
 {
     if (!_isWorking)
     {
         return;
     }
     _isWorking = false;
     ThreadEx.Stop(_analyzeThead);
     _listAudioPES.Clear();
     _listVideoPES.Clear();
     _queueFrame.Clear();
     ms.Close();
 }
Ejemplo n.º 5
0
 public void Start()
 {
     if (_isworking)
     {
         return;
     }
     _isworking           = true;
     _firstVideoFrameTime = 0;
     _firstAudioFrameTime = 0;
     _firstFrameTime      = 0;
     _startPlayTick       = 0;
     _queue.Clear();
     _cache.Clear();
     _vp.Start();
     _ap.Start();
     _playThread = ThreadEx.ThreadCall(PlayThread);
 }
Ejemplo n.º 6
0
        protected void OnNewMediaFrame(MediaFrame frame)
        {
            if (!_isworking)
            {
                return;
            }

            if (frame.nIsAudio == 0)
            {
                _videoCount++;
            }
            else
            {
                _audioCount++;
            }

            if (_firstTimetick == 0)
            {
                _firstTimetick = frame.nTimetick;
            }

            if (AutoResetFrameTimetick)
            {
                if (frame.nTimetick < _firstTimetick)
                {
                    return;
                }

                if (frame.nTimetick == _firstTimetick && _lastTimetick != 0)
                {
                    _tsms.Clean();
                    _qAudioMediaFrame.Clear();
                    _qVideoMediaFrame.Clear();
                    _timetickOffset = _lastTimetick - _firstTimetick;
                }

                //重置时间戳
                frame.nTimetick += _timetickOffset;
                if (frame.nIsAudio == 0)
                {
                    //  Console.WriteLine(frame.nTimetick - _lastTimetick);
                }
            }
            _lastTimetick = frame.nTimetick;



            if (ResetFrameTimetickForSystemTick)
            {
                if (_firstFrameSystemTick == 0)
                {
                    _firstFrameTimetick   = frame.nTimetick;
                    _firstFrameSystemTick = DateTime.Now.Ticks / 10000;
                }
                frame.nTimetick = (frame.nTimetick - _firstFrameTimetick) + _firstFrameSystemTick;
            }
            if (frame.nIsKeyFrame == 1 && frame.nIsAudio == 0)
            {
                IsCanPlay = true;
                if (IPTVChannelInfo != null)
                {
                    Log(string.Format("{0}   video:{1}  audio:{2}   ", IPTVChannelInfo.Name, _videoCount, _audioCount));
                }
            }
            try {
                if (ReceiveFrame != null)
                {
                    ReceiveFrame(frame);
                }
            } catch (Exception e) {
                throw;
                _DebugEx.Trace(e);
            }
        }