2022-06-11 15:11:03 +08:00
|
|
|
|
#ifndef ZLMEDIAKIT_SRT_NACK_CONTEXT_H
|
2022-06-09 19:30:03 +08:00
|
|
|
|
#define ZLMEDIAKIT_SRT_NACK_CONTEXT_H
|
|
|
|
|
#include "Common.hpp"
|
|
|
|
|
#include "PacketQueue.hpp"
|
|
|
|
|
#include <list>
|
|
|
|
|
|
|
|
|
|
namespace SRT {
|
|
|
|
|
class NackContext {
|
|
|
|
|
public:
|
|
|
|
|
NackContext() = default;
|
|
|
|
|
~NackContext() = default;
|
|
|
|
|
void update(TimePoint now, std::list<PacketQueue::LostPair> &lostlist);
|
|
|
|
|
void getLostList(TimePoint now, uint32_t rtt, uint32_t rtt_variance, std::list<PacketQueue::LostPair> &lostlist);
|
|
|
|
|
void drop(uint32_t seq);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
void mergeItem(TimePoint now, PacketQueue::LostPair &item);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
class NackItem {
|
|
|
|
|
public:
|
|
|
|
|
bool _is_nack = false;
|
|
|
|
|
TimePoint _ts; // send nak time
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
std::map<uint32_t, NackItem> _nack_map;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace SRT
|
|
|
|
|
#endif // ZLMEDIAKIT_SRT_NACK_CONTEXT_H
|