Beispiel #1
0
        private void NALUnitVideoAdd(NALUnit cNALUnit)
        {
            if (cNALUnit.nStart + cNALUnit.nBytesQty > _cStream.nBytesBuffered)
            {
                _cStream.Cache(cNALUnit.nStart + cNALUnit.nBytesQty - _cStream.nBytesBuffered);
            }
            double nProgress = 0;

            lock (_cSyncRoot)
            {
                _aVideoNALs.Add(cNALUnit);
                if (cNALUnit.bFrameStart)
                {
                    _nFramesBuffered++;
                    if (_bAudioFrameNeeded)
                    {
                        if (1 < (nProgress = (double)(_nFramesBuffered - _nCurrentFrameVideo) / (_nBufferSeconds * 25)))
                        {
                            nProgress = 1;
                        }
                        ReportGetSampleProgress(nProgress);
                    }
                }
            }
            if (0.9 < nProgress)
            {
                if (_bAudioFrameNeeded)
                {
                    GetSampleAsync(MediaStreamType.Audio);
                }
                if (_bVideoFrameNeeded)
                {
                    GetSampleAsync(MediaStreamType.Video);
                }
            }
        }