/* * @Author: DI JUNKUN * @Date: 2025-01-03 * Copyright (c) 2025 by DI JUNKUN, All Rights Reserved. */ #ifndef _VIDEO_CHANNEL_SEND_H_ #define _VIDEO_CHANNEL_SEND_H_ #include "api/transport/network_types.h" #include "api/units/timestamp.h" #include "clock/system_clock.h" #include "congestion_control.h" #include "congestion_control_feedback.h" #include "ice_agent.h" #include "rtp_packetizer.h" #include "rtp_video_sender.h" #include "transport_feedback_adapter.h" #include "video_frame_wrapper.h" class VideoChannelSend { public: VideoChannelSend(); VideoChannelSend(std::shared_ptr clock, std::shared_ptr ice_agent, std::shared_ptr ice_io_statistics, std::function on_sent_packet_func_); ~VideoChannelSend(); public: void Initialize(rtp::PAYLOAD_TYPE payload_type); void Destroy(); uint32_t GetSsrc() { if (rtp_video_sender_) { return rtp_video_sender_->GetSsrc(); } return 0; } int SendVideo(std::shared_ptr encoded_frame); void OnCongestionControlFeedback( Timestamp recv_ts, const webrtc::rtcp::CongestionControlFeedback& feedback); void OnReceiverReport(const ReceiverReport& receiver_report) { if (rtp_video_sender_) { rtp_video_sender_->OnReceiverReport(receiver_report); } } private: void PostUpdates(webrtc::NetworkControlUpdate update); void UpdateControlState(); void UpdateCongestedState(); private: std::shared_ptr ice_agent_ = nullptr; std::shared_ptr ice_io_statistics_ = nullptr; std::unique_ptr rtp_packetizer_ = nullptr; std::unique_ptr rtp_video_sender_ = nullptr; std::function on_sent_packet_func_ = nullptr; private: std::shared_ptr clock_; }; #endif