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); }
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 } }
//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; }
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); } }
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; }
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; }
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)); }
public void SetAreThereOutOfOrder(RTPFrame frame) { frame.AreThereOutOfOrder = Packets.Exists(s => s.TimeStampSender == frame.TimeStampSender && !s.InOrder.Value); }
public void SetPacketCount(RTPFrame frame) { frame.PacketCount = Packets.Count(s => s.TimeStampSender == frame.TimeStampSender); }
public void SetMarkedPacketReceived(RTPFrame frame) { frame.MarkedPacketReceived = Packets.Exists(s => s.TimeStampSender == frame.TimeStampSender && s.Marked); }
public void SetLastPacketReceptionTimes(RTPFrame frame) { frame.LastPacketReceptionTime = Packets.Where(s => s.TimeStampSender == frame.TimeStampSender).Max(s => s.OffsetReceiver); }