[feat] support dynamic resolution codec

This commit is contained in:
dijunkun
2024-09-05 17:28:58 +08:00
parent c0c2b18b8b
commit c477643aed
25 changed files with 481 additions and 118 deletions

View File

@@ -0,0 +1,81 @@
#include "io_statistics.h"
IOStatistics::IOStatistics(
std::function<void(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t,
uint32_t, uint32_t, uint32_t)>
io_report_callback)
: io_report_callback_(io_report_callback) {
interval_ = 1000;
}
IOStatistics::~IOStatistics() {
running_ = false;
cond_var_.notify_one();
if (statistics_thread_.joinable()) {
statistics_thread_.join();
}
}
void IOStatistics::Process() {
while (running_) {
std::unique_lock<std::mutex> lock(mtx_);
cond_var_.wait_for(lock, std::chrono::milliseconds(interval_),
[this] { return !running_; });
video_inbound_bitrate_ = video_inbound_bytes_ * 1000 * 8 / interval_;
video_outbound_bitrate_ = video_outbound_bytes_ * 1000 * 8 / interval_;
audio_inbound_bitrate_ = audio_inbound_bytes_ * 1000 * 8 / interval_;
audio_outbound_bitrate_ = audio_outbound_bytes_ * 1000 * 8 / interval_;
data_inbound_bitrate_ = data_inbound_bytes_ * 1000 * 8 / interval_;
data_outbound_bitrate_ = data_outbound_bytes_ * 1000 * 8 / interval_;
total_inbound_bitrate_ =
video_inbound_bitrate_ + audio_inbound_bitrate_ + data_inbound_bitrate_;
total_outbound_bitrate_ = video_outbound_bitrate_ +
audio_outbound_bitrate_ + data_outbound_bitrate_;
video_inbound_bytes_ = 0;
video_outbound_bytes_ = 0;
audio_inbound_bytes_ = 0;
audio_outbound_bytes_ = 0;
data_inbound_bytes_ = 0;
data_outbound_bytes_ = 0;
if (io_report_callback_) {
io_report_callback_(video_inbound_bitrate_, video_outbound_bitrate_,
audio_inbound_bitrate_, audio_outbound_bitrate_,
data_inbound_bitrate_, data_outbound_bitrate_,
total_inbound_bitrate_, total_outbound_bitrate_);
}
}
}
void IOStatistics::Start() {
if (!running_) {
running_ = true;
statistics_thread_ = std::thread(&IOStatistics::Process, this);
}
}
void IOStatistics::UpdateVideoInboundBytes(uint32_t bytes) {
video_inbound_bytes_ += bytes;
}
void IOStatistics::UpdateVideoOutboundBytes(uint32_t bytes) {
video_outbound_bytes_ += bytes;
}
void IOStatistics::UpdateAudioInboundBytes(uint32_t bytes) {
audio_inbound_bytes_ += bytes;
}
void IOStatistics::UpdateAudioOutboundBytes(uint32_t bytes) {
audio_outbound_bytes_ += bytes;
}
void IOStatistics::UpdateDataInboundBytes(uint32_t bytes) {
data_inbound_bytes_ += bytes;
}
void IOStatistics::UpdateDataOutboundBytes(uint32_t bytes) {
data_outbound_bytes_ += bytes;
}

View File

@@ -0,0 +1,66 @@
/*
* @Author: DI JUNKUN
* @Date: 2024-09-05
* Copyright (c) 2024 by DI JUNKUN, All Rights Reserved.
*/
#ifndef _STATISTICS_H_
#define _STATISTICS_H_
#include <condition_variable>
#include <functional>
#include <memory>
#include <mutex>
class IOStatistics {
public:
IOStatistics(std::function<void(uint32_t, uint32_t, uint32_t, uint32_t,
uint32_t, uint32_t, uint32_t, uint32_t)>
io_report_callback);
~IOStatistics();
public:
void Start();
void UpdateVideoInboundBytes(uint32_t bytes);
void UpdateVideoOutboundBytes(uint32_t bytes);
void UpdateAudioInboundBytes(uint32_t bytes);
void UpdateAudioOutboundBytes(uint32_t bytes);
void UpdateDataInboundBytes(uint32_t bytes);
void UpdateDataOutboundBytes(uint32_t bytes);
private:
void Process();
private:
std::function<void(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t,
uint32_t, uint32_t)>
io_report_callback_ = nullptr;
std::thread statistics_thread_;
std::mutex mtx_;
uint32_t interval_ = 1000;
std::condition_variable cond_var_;
std::atomic<bool> running_{false};
std::atomic<uint32_t> video_inbound_bytes_ = 0;
std::atomic<uint32_t> video_outbound_bytes_ = 0;
std::atomic<uint32_t> audio_inbound_bytes_ = 0;
std::atomic<uint32_t> audio_outbound_bytes_ = 0;
std::atomic<uint32_t> data_inbound_bytes_ = 0;
std::atomic<uint32_t> data_outbound_bytes_ = 0;
std::atomic<uint32_t> total_inbound_bytes_ = 0;
std::atomic<uint32_t> total_outbound_bytes_ = 0;
std::atomic<uint32_t> video_inbound_bitrate_ = 0;
std::atomic<uint32_t> video_outbound_bitrate_ = 0;
std::atomic<uint32_t> audio_inbound_bitrate_ = 0;
std::atomic<uint32_t> audio_outbound_bitrate_ = 0;
std::atomic<uint32_t> data_inbound_bitrate_ = 0;
std::atomic<uint32_t> data_outbound_bitrate_ = 0;
std::atomic<uint32_t> total_inbound_bitrate_ = 0;
std::atomic<uint32_t> total_outbound_bitrate_ = 0;
};
#endif

View File

@@ -1,7 +0,0 @@
#include "receiver_statistics.h"
#include "log.h"
ReceiverStatistics::ReceiverStatistics() {}
ReceiverStatistics::~ReceiverStatistics() {}

View File

@@ -1,21 +0,0 @@
/*
* @Author: DI JUNKUN
* @Date: 2024-09-04
* Copyright (c) 2024 by DI JUNKUN, All Rights Reserved.
*/
#ifndef _RECEIVER_STATISTICS_H_
#define _RECEIVER_STATISTICS_H_
#include "statistics_base.h"
class ReceiverStatistics : public StatisticsBase {
public:
ReceiverStatistics();
virtual ~ReceiverStatistics();
private:
/* data */
};
#endif

View File

@@ -1,7 +0,0 @@
#include "sender_statistics.h"
#include "log.h"
SenderStatistics::SenderStatistics() {}
SenderStatistics::~SenderStatistics() {}

View File

@@ -1,21 +0,0 @@
/*
* @Author: DI JUNKUN
* @Date: 2024-09-04
* Copyright (c) 2024 by DI JUNKUN, All Rights Reserved.
*/
#ifndef _SENDER_STATISTICS_H_
#define _SENDER_STATISTICS_H_
#include "statistics_base.h"
class SenderStatistics : public StatisticsBase {
public:
SenderStatistics();
virtual ~SenderStatistics();
private:
/* data */
};
#endif

View File

@@ -1,5 +0,0 @@
#include "statistics_base.h"
StatisticsBase::StatisticsBase() {}
StatisticsBase::~StatisticsBase() {}

View File

@@ -1,19 +0,0 @@
/*
* @Author: DI JUNKUN
* @Date: 2024-09-04
* Copyright (c) 2024 by DI JUNKUN, All Rights Reserved.
*/
#ifndef _STATISTICS_BASE_H_
#define _STATISTICS_BASE_H_
class StatisticsBase {
public:
StatisticsBase();
virtual ~StatisticsBase();
private:
/* data */
};
#endif