#ifndef ZLMEDIAKIT_SRT_STATISTIC_H #define ZLMEDIAKIT_SRT_STATISTIC_H #include #include "Common.hpp" #include "Packet.hpp" namespace SRT { class PacketRecvRateContext { public: PacketRecvRateContext(TimePoint start); ~PacketRecvRateContext() = default; void inputPacket(TimePoint &ts,size_t len = 0); uint32_t getPacketRecvRate(uint32_t& bytesps); std::string dump(); static const int SIZE = 16; private: TimePoint _last_arrive_time; int64_t _ts_arr[SIZE]; size_t _size_arr[SIZE]; size_t _cur_idx; //std::map _pkt_map; }; class EstimatedLinkCapacityContext { public: EstimatedLinkCapacityContext(TimePoint start); ~EstimatedLinkCapacityContext() = default; void setLastSeq(uint32_t seq){ _last_seq = seq; } void inputPacket(TimePoint &ts,DataPacket::Ptr& pkt); uint32_t getEstimatedLinkCapacity(); static const int SIZE = 64; private: void probe1Arrival(TimePoint &ts,const DataPacket::Ptr& pkt, bool unordered); void probe2Arrival(TimePoint &ts,const DataPacket::Ptr& pkt); private: TimePoint _start; TimePoint _ts_probe_time; int64_t _dur_probe_arr[SIZE]; size_t _cur_idx; uint32_t _last_seq = 0; uint32_t _probe1_seq = SEQ_NONE; //std::map _pkt_map; }; /* class RecvRateContext { public: RecvRateContext(TimePoint start) : _start(start) {}; ~RecvRateContext() = default; void inputPacket(TimePoint &ts, size_t size); uint32_t getRecvRate(); private: TimePoint _start; std::map _pkt_map; }; */ } // namespace SRT #endif // ZLMEDIAKIT_SRT_STATISTIC_H