CSharpRTMP.Core.Protocols.Rtmfp.QualityOfService.Add C# (CSharp) Метод

Add() публичный Метод

public Add ( uint time, uint received, uint lost, uint size, uint ping ) : void
time uint
received uint
lost uint
size uint
ping uint
Результат void
        public void Add(uint time,uint received,uint lost,uint size,uint ping)
        {
            long latencyGradient = 0;
            if (_samples.Count > 0)
            {
                if (time >= _preTime)
                {
                    var delta = time - _preTime;
                    var deltaReal = (uint) (_reception.Elapsed());
                    latencyGradient = (long) deltaReal - delta;
                    _latency += latencyGradient;
                }
                else
                    Logger.WARN("QoS computing with a error time value ({0}) inferiors than precedent time ({1})", time,
                        _preTime);
            }
            else
                _latency = ping/2;
            Latency = (uint) (_latency < 0 ? 0 : _latency);
            _preTime = time;
            _num += lost;
            _den += (lost + received);
            _size += size;
            _latencyGradient += latencyGradient;
            foreach (var sample in _samples.ToArray())
            {
                if (sample.Time.IsElapsed(5000))
                {
                    _fullSample = true;
                    break;
                }
                _den -= (sample.Received + sample.Lost);
                _num -= sample.Lost;
                _size -= sample.Size;
                _latencyGradient -= sample.LatencyGradient;
                _samples.Remove(sample);
            }
            _reception = DateTime.Now;
            _samples.Add(new Sample(_reception,received,lost,size,latencyGradient));
            var elapsed = _fullSample?5000:(uint)(_samples[0].Time.Elapsed());
            ByteRate = 0;
            double congestion = 0;
            if (elapsed > 0)
            {
                ByteRate = _size/elapsed*1000;
                congestion = _latencyGradient/elapsed;
            }
            if (_den == 0) Logger.FATAL("Lost rate computing with a impossible null number of fragments received");
            else
            {
                LostRate = _num/_den;
                congestion += LostRate;
            }
            CongestionRate = congestion > 1 ? 1 : (congestion < -1 ? -1 : congestion);
        }

Usage Example

Пример #1
0
        public void PushAudioPacket(uint time, N2HBinaryReader packet, uint numberLostFragments)
        {
            if (PublisherId == 0)
            {
                Logger.FATAL("Audio packet pushed on a publication {0} who is idle", PublisherId);
                return;
            }
            var pos = packet.BaseStream.Position;

            if (numberLostFragments > 0)
            {
                Logger.INFO("");
            }
            AudioQOS.Add(time, packet.Fragments, numberLostFragments, (uint)(packet.BaseStream.GetAvaliableByteCounts() + 5), (uint)(_publisher != null?_publisher.Ping:0));
            var temp  = packet.ReadByte();
            var temp2 = packet.ReadByte();

            packet.BaseStream.Position = pos;
            if (((temp >> 4) == 0x0a) && temp2 == 0)
            {
                packet.BaseStream.CopyDataTo(AudioCodecBuffer);
                AudioCodecBuffer.Position = 0;
            }

            foreach (var listener in Listeners)
            {
                listener.Value.PushAudioPacket(time, packet);
                //packet.BaseStream.Position = pos;
            }
            _publisher.OnAudioPacket(this, time, packet);
        }
All Usage Examples Of CSharpRTMP.Core.Protocols.Rtmfp.QualityOfService::Add
QualityOfService