Example #1
0
        public void SetPacketCountAverage(RTPFrame frame, ulong windowSize)
        {
            int lowBound = (int)(frame.Number - windowSize);
            int upBound  = (int)(frame.Number + windowSize);

            frame.PacketCountAverage = Frames.Where(s => ((int)s.Number > lowBound) && ((int)s.Number < upBound)).Select(s => s.PacketCount).Average(s => s);
        }
Example #2
0
        public void SetIsTheFrameComplete(RTPFrame frame)
        {
            frame.IsComplete = false;
            if (frame.MarkedPacketReceived)
            {
                UInt64 IntendedFirst      = 0;                                                                                // какой должен быть номер первого пакета во фрейме
                UInt64 MarkedPacketNumber = Packets.Find(s => s.TimeStampSender == frame.TimeStampSender && s.Marked).Number; //номер пакета с маркой
                if (Frames.Exists(s => s.Number == frame.Number - 1))                                                         // есть предыдущий фрейм, считаем, что первым пакетом должен быть либо следующий за маркированным, либо через один от последнего в предыдущем фрейме
                {
                    RTPFrame PreviousFrame = Frames.Find(s => s.Number == frame.Number - 1);
                    if (Packets.Exists(s => s.TimeStampSender == PreviousFrame.TimeStampSender && s.Marked))
                    {
                        RTPPacket PreviousFrameMarkedPacket = Packets.Find(s => s.TimeStampSender == PreviousFrame.TimeStampSender && s.Marked);
                        IntendedFirst = PreviousFrameMarkedPacket.Number + 1;
                    }
                    else
                    {
                        IntendedFirst = Packets.Where(s => s.TimeStampSender == PreviousFrame.TimeStampSender).Max(s => s.Number) + 2;
                    }
                }
                else // предыдущего фрейма нет, считаем, что первый - это первый в текущем фрейме
                {
                    IntendedFirst = Packets.Where(s => s.TimeStampSender == frame.TimeStampSender).Min(s => s.Number);
                }

                frame.IsComplete = (frame.PacketCount == (int)(MarkedPacketNumber - IntendedFirst + 1)); // фрейм полный, если количество пакетов в нем равно разности между номером маркированного пакета и предполагаемого первого пакета + 1
            }
        }
Example #3
0
        //public void AssignPlayTime()
        //{
        //    MaxOffsetReceiver = Packets.Last().OffsetReceiver;
        //    PlayoutIncrement = MaxOffsetReceiver / CurrentFrameNumber;
        //    foreach (RTPFrame frame in Frames)
        //    {
        //        frame.PlayTime = InitialPlayOutOffsetS + frame.Number * PlayoutIncrement;
        //    }
        //}

        public void ProcessFrame(RTPFrame f)
        {
            //foreach (RTPFrame f in Frames)
            //{
            //    SetLastPacketReceptionTimes(f);
            //}
            //foreach (RTPFrame f in Frames)
            //{
            //    SetMarkedPacketReceived(f);
            //}
            //foreach (RTPFrame f in Frames)
            //{
            //    SetPacketCount(f);
            //}
            //foreach (RTPFrame f in Frames)
            //{
            //    SetAreThereOutOfOrder(f);
            //}

            SetIsTheFrameInTime(f, 1);
            SetIsTheFrameComplete(f);
            //SetFrameReceptionDurations(f); // must be done befrore all
            SetRecieveSpeedMedian(f, WindowSize);
            SetPacketCountMedian(f, WindowSize);
            SetPacketCountAverage(f, WindowSize);
            f.IsProcessed = true;
        }
Example #4
0
 public void SetIsTheFrameInTime(RTPFrame frame, ulong NumberOfFramesToWait)
 {
     if (Frames.Exists(s => s.Number == frame.Number + NumberOfFramesToWait))
     {
         double UpcomingPacketReceptionTime = Frames.Where(s => s.Number == frame.Number + NumberOfFramesToWait).First().LastPacketReceptionTime;
         frame.IsInTime = (frame.LastPacketReceptionTime < UpcomingPacketReceptionTime);
     }
 }
Example #5
0
        public void SetPacketCountMedian(RTPFrame frame, ulong windowSize)
        {
            int lowBound = (int)(frame.Number - windowSize);
            int upBound  = (int)(frame.Number + windowSize);

            var    samples = Frames.Where(s => ((int)s.Number > lowBound) && ((int)s.Number < upBound)).Select(s => s.PacketCount).OrderBy(s => s).ToList();
            double mid     = (samples.Count - 1) / 2.0;

            frame.PacketCountMedian = samples[(int)mid];
        }
 public Sample(double instant, double previousObservationInstant, int stateNum, Matrix <double> state, int observationNum, Matrix <double> observation, RTPFrame frame)
 {
     Instant = instant;
     PreviousObservationInstant = previousObservationInstant;
     //Delay = delay;
     StateNumber       = stateNum;
     State             = state;
     ObservationNumber = observationNum;
     Observation       = observation;
     Frame             = frame;
 }
Example #7
0
        public void SetFrameReceptionDurations(RTPFrame frame)
        {
            double LastFrameReceptionTime = 0;

            if (frame.Number > 0)
            {
                LastFrameReceptionTime = Frames.Find(s => s.Number == frame.Number - 1).LastPacketReceptionTime;
            }
            else
            {
                LastFrameReceptionTime = Packets.Min(s => s.OffsetReceiver);
            }
            frame.ReceptionDuration = frame.LastPacketReceptionTime - LastFrameReceptionTime;
            frame.ReceiveSpeed      = frame.ReceptionDuration / frame.PacketCount;
        }
Example #8
0
        public void SetRecieveSpeedMedian(RTPFrame frame, ulong windowSize)
        {
            //List<double> samples;
            //List<double> samplesSorted = new List<double>();
            int lowBound = (int)(frame.Number - windowSize);
            int upBound  = (int)(frame.Number + windowSize);

            var samples = Frames.Where(s => ((int)s.Number > lowBound) && ((int)s.Number < upBound)).Select(s => s.ReceiveSpeed).OrderBy(s => s).ToList();
            // && (s.Number < frame.Number + windowSize)
            //samples.Add(frame.ReceiveSpeed);
            //if (samples.Count == windowSize + 1)
            //{
            //    samples.RemoveAt(0);
            //}

            //samplesSorted = samples.OrderBy(s => s).ToList();
            double mid = (samples.Count - 1) / 2.0;

            frame.ReceiveSpeedMedian = samples[(int)mid];
            //return (ys[(int)(mid)] + ys[(int)(mid + 0.5)]) / 2;
        }
        public void AddFrame(RTPFrame frame, List <Sample> Samples)
        {
            int stateNum = -1;
            int obsNum   = -1;

            foreach (RTPState state in States.OrderBy(s => s.Priority))
            {
                if (state.Condition(frame))
                {
                    stateNum = state.StateNumber;
                    break;
                }
            }
            foreach (RTPObservation observation in Observations.OrderBy(s => s.Priority))
            {
                if (observation.Condition(frame))
                {
                    obsNum = observation.ObservationNumber;
                    break;
                }
            }
            Samples.Add(new Sample(frame.LastPacketReceptionTime, frame.LastPacketReceptionTime, stateNum, E[stateNum], obsNum, F[obsNum], frame));
        }
Example #10
0
 public void SetAreThereOutOfOrder(RTPFrame frame)
 {
     frame.AreThereOutOfOrder = Packets.Exists(s => s.TimeStampSender == frame.TimeStampSender && !s.InOrder.Value);
 }
Example #11
0
 public void SetPacketCount(RTPFrame frame)
 {
     frame.PacketCount = Packets.Count(s => s.TimeStampSender == frame.TimeStampSender);
 }
Example #12
0
 public void SetMarkedPacketReceived(RTPFrame frame)
 {
     frame.MarkedPacketReceived = Packets.Exists(s => s.TimeStampSender == frame.TimeStampSender && s.Marked);
 }
Example #13
0
 public void SetLastPacketReceptionTimes(RTPFrame frame)
 {
     frame.LastPacketReceptionTime = Packets.Where(s => s.TimeStampSender == frame.TimeStampSender).Max(s => s.OffsetReceiver);
 }