mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
[feat] use an adapter layer to convert SystemClock into webrtc Clock
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user