[feat] congestion control feedback sending support

This commit is contained in:
dijunkun
2025-01-10 17:21:03 +08:00
parent 49b74ffcd6
commit 63ed77e43a
10 changed files with 159 additions and 342 deletions

View File

@@ -1,8 +1,8 @@
#include "rtp_codec.h"
#include <chrono>
#include <random>
#include "common.h"
#include "log.h"
#include "obu_parser.h"
@@ -15,22 +15,6 @@ constexpr int kObuTypeSequenceHeader = 1;
using namespace obu;
uint32_t GenerateRandomSSRC() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<uint32_t> dis(1, 0xFFFFFFFF);
return dis(gen);
}
uint32_t GenerateUniqueSsrc() {
uint32_t new_ssrc;
do {
new_ssrc = GenerateRandomSSRC();
} while (SSRCManager::Instance().Contains(new_ssrc));
SSRCManager::Instance().AddSsrc(new_ssrc);
return new_ssrc;
}
RtpCodec::RtpCodec(RtpPacket::PAYLOAD_TYPE payload_type)
: version_(RTP_VERSION),
has_padding_(false),

View File

@@ -3,7 +3,6 @@
#include <cstddef>
#include <cstdint>
#include <unordered_set>
#include <vector>
#include "fec_encoder.h"
@@ -56,36 +55,4 @@ class RtpCodec {
FecEncoder fec_encoder_;
};
class SSRCManager {
public:
static SSRCManager& Instance() {
static SSRCManager instance;
return instance;
}
void AddSsrc(uint32_t ssrc) {
std::lock_guard<std::mutex> lock(mutex_);
ssrcs_.insert(ssrc);
}
void DeleteSsrc(uint32_t ssrc) {
std::lock_guard<std::mutex> lock(mutex_);
ssrcs_.erase(ssrc);
}
bool Contains(uint32_t ssrc) {
std::lock_guard<std::mutex> lock(mutex_);
return ssrcs_.count(ssrc) > 0;
}
private:
SSRCManager() = default;
~SSRCManager() = default;
SSRCManager(const SSRCManager&) = delete;
SSRCManager& operator=(const SSRCManager&) = delete;
std::unordered_set<uint32_t> ssrcs_;
std::mutex mutex_;
};
#endif