#ifndef ZLMEDIAKIT_SRT_PACKET_QUEUE_H #define ZLMEDIAKIT_SRT_PACKET_QUEUE_H #include "Packet.hpp" #include #include #include #include #include #include namespace SRT { // for recv class PacketQueue { public: using Ptr = std::shared_ptr; using LostPair = std::pair; PacketQueue(uint32_t max_size, uint32_t init_seq, uint32_t latency); ~PacketQueue() = default; bool inputPacket(DataPacket::Ptr pkt, std::list &out); uint32_t timeLatency(); std::list getLostSeq(); size_t getSize(); size_t getExpectedSize(); size_t getAvailableBufferSize(); uint32_t getExpectedSeq(); std::string dump(); bool drop(uint32_t first, uint32_t last, std::list &out); private: void tryInsertPkt(DataPacket::Ptr pkt); private: uint32_t _pkt_cap; uint32_t _pkt_latency; uint32_t _pkt_expected_seq = 0; std::map _pkt_map; }; } // namespace SRT #endif // ZLMEDIAKIT_SRT_PACKET_QUEUE_H