[feat] use an adapter layer to convert SystemClock into webrtc Clock

This commit is contained in:
dijunkun
2025-02-20 15:31:58 +08:00
parent 899ab05cda
commit f797cc3f91
18 changed files with 96 additions and 66 deletions

View File

@@ -11,11 +11,13 @@
using nlohmann::json;
IceTransport::IceTransport(
bool offer_peer, std::string &transmission_id, std::string &user_id,
std::shared_ptr<SystemClock> clock, bool offer_peer,
std::string &transmission_id, std::string &user_id,
std::string &remote_user_id, std::shared_ptr<WsClient> ice_ws_transmission,
std::function<void(std::string, const std::string &)> on_ice_status_change,
void *user_data)
: offer_peer_(offer_peer),
: clock_(clock),
offer_peer_(offer_peer),
transmission_id_(transmission_id),
user_id_(user_id),
remote_user_id_(remote_user_id),
@@ -46,7 +48,7 @@ int IceTransport::InitIceTransmission(
std::string &stun_ip, int stun_port, std::string &turn_ip, int turn_port,
std::string &turn_username, std::string &turn_password,
rtp::PAYLOAD_TYPE video_codec_payload_type) {
ice_transport_controller_ = std::make_shared<IceTransportController>();
ice_transport_controller_ = std::make_shared<IceTransportController>(clock_);
ice_agent_ = std::make_unique<IceAgent>(
offer_peer_, use_trickle_ice_, use_reliable_ice_, enable_turn_,
force_turn_, stun_ip, stun_port, turn_ip, turn_port, turn_username,

View File

@@ -9,6 +9,7 @@
#include <iostream>
#include "clock/system_clock.h"
#include "ice_agent.h"
#include "ice_transport_controller.h"
#include "io_statistics.h"
@@ -30,8 +31,9 @@ class IceTransport {
enum TraversalType { TP2P = 0, TRelay = 1, TUnknown = 2 };
public:
IceTransport(bool offer_peer, std::string &transmission_id,
std::string &user_id, std::string &remote_user_id,
IceTransport(std::shared_ptr<SystemClock> clock, bool offer_peer,
std::string &transmission_id, std::string &user_id,
std::string &remote_user_id,
std::shared_ptr<WsClient> ice_ws_transmission,
std::function<void(std::string, const std::string &)>
on_ice_status_change,
@@ -160,6 +162,7 @@ class IceTransport {
void *user_data_ = nullptr;
private:
std::shared_ptr<SystemClock> clock_;
std::shared_ptr<IceAgent> ice_agent_ = nullptr;
bool is_closed_ = false;
std::shared_ptr<WsClient> ice_ws_transport_ = nullptr;

View File

@@ -4,13 +4,14 @@
#include "nvcodec_api.h"
#endif
IceTransportController::IceTransportController()
: b_force_i_frame_(true),
IceTransportController::IceTransportController(
std::shared_ptr<SystemClock> clock)
: clock_(clock),
b_force_i_frame_(true),
video_codec_inited_(false),
audio_codec_inited_(false),
load_nvcodec_dll_success_(false),
hardware_acceleration_(false),
clock_(webrtc::Clock::GetRealTimeClockShared()) {}
hardware_acceleration_(false) {}
IceTransportController::~IceTransportController() {
user_data_ = nullptr;
@@ -334,7 +335,7 @@ void IceTransportController::OnCongestionControlFeedback(
const webrtc::rtcp::CongestionControlFeedback& feedback) {
std::optional<webrtc::TransportPacketsFeedback> feedback_msg =
transport_feedback_adapter_.ProcessCongestionControlFeedback(
feedback, clock_->CurrentTime());
feedback, Timestamp::Micros(clock_->CurrentTimeUs()));
if (feedback_msg) {
HandleTransportPacketsFeedback(*feedback_msg);
}
@@ -353,13 +354,13 @@ void IceTransportController::OnSentRtpPacket(
webrtc::PacedPacketInfo pacing_info;
size_t transport_overhead_bytes_per_packet_ = 0;
webrtc::Timestamp creation_time =
webrtc::Timestamp::Millis(clock_->TimeInMilliseconds());
webrtc::Timestamp::Millis(clock_->CurrentTimeMs());
transport_feedback_adapter_.AddPacket(
packet, pacing_info, transport_overhead_bytes_per_packet_, creation_time);
rtc::SentPacket sent_packet;
sent_packet.packet_id = packet.transport_sequence_number().value();
sent_packet.send_time_ms = clock_->TimeInMilliseconds();
sent_packet.send_time_ms = clock_->CurrentTimeMs();
sent_packet.info.included_in_feedback = true;
sent_packet.info.included_in_allocation = true;
sent_packet.info.packet_size_bytes = packet.size();

View File

@@ -14,6 +14,7 @@
#include "audio_channel_send.h"
#include "audio_decoder.h"
#include "audio_encoder.h"
#include "clock/system_clock.h"
#include "congestion_control.h"
#include "congestion_control_feedback.h"
#include "data_channel_receive.h"
@@ -35,7 +36,7 @@ typedef void (*OnReceiveData)(const char *, size_t, const char *, const size_t,
class IceTransportController
: public std::enable_shared_from_this<IceTransportController> {
public:
IceTransportController();
IceTransportController(std::shared_ptr<SystemClock> clock);
~IceTransportController();
public:
@@ -97,7 +98,7 @@ class IceTransportController
void *user_data_ = nullptr;
private:
std::shared_ptr<Clock> clock_;
std::shared_ptr<SystemClock> clock_;
webrtc::TransportFeedbackAdapter transport_feedback_adapter_;
std::unique_ptr<CongestionControl> controller_;