mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
[feat] support dynamic resolution codec
This commit is contained in:
81
src/statistics/io_statistics.cpp
Normal file
81
src/statistics/io_statistics.cpp
Normal 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;
|
||||
}
|
||||
66
src/statistics/io_statistics.h
Normal file
66
src/statistics/io_statistics.h
Normal 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
|
||||
@@ -1,7 +0,0 @@
|
||||
#include "receiver_statistics.h"
|
||||
|
||||
#include "log.h"
|
||||
|
||||
ReceiverStatistics::ReceiverStatistics() {}
|
||||
|
||||
ReceiverStatistics::~ReceiverStatistics() {}
|
||||
@@ -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
|
||||
@@ -1,7 +0,0 @@
|
||||
#include "sender_statistics.h"
|
||||
|
||||
#include "log.h"
|
||||
|
||||
SenderStatistics::SenderStatistics() {}
|
||||
|
||||
SenderStatistics::~SenderStatistics() {}
|
||||
@@ -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
|
||||
@@ -1,5 +0,0 @@
|
||||
#include "statistics_base.h"
|
||||
|
||||
StatisticsBase::StatisticsBase() {}
|
||||
|
||||
StatisticsBase::~StatisticsBase() {}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user