// PacketRouter keeps track of rtp send modules to support the pacer. // In addition, it handles feedback messages, which are sent on a send // module if possible (sender report), otherwise on receive module // (receiver report). For the latter case, we also keep track of the // receive modules. class PacketRouter : public PacingController::PacketSender { public:
PacketRouter();
~PacketRouter() override;
// Callback is invoked after pacing, before a packet is forwarded to the // sending rtp module. void RegisterNotifyBweCallback(
absl::AnyInvocable<void(const RtpPacketToSend& packet, const PacedPacketInfo& pacing_info)> callback);
// If `set_transport_seq` is true, PacketRouter generates transport sequence // numbers for all RTP packets even if transport sequence number header // extension has not been negotiated. If `send_rtp_packets_as_ect1` is true, // packets will be requested to be sent as ect1. void ConfigureForRtcpFeedback(bool set_transport_seq, bool send_rtp_packets_as_ect1);
// Sends `packets` in one or more IP packets. void SendCombinedRtcpPacket(
std::vector<std::unique_ptr<rtcp::RtcpPacket>> packets);
// Gives the SSRC of a sender associated with this packet router that // can be used for sending RTCP messages. std::nullopt if no sender exists.
std::optional<uint32_t> SsrcOfFirstSender();
SequenceChecker thread_checker_; // Ssrc to RtpRtcpInterface module;
std::unordered_map<uint32_t, RtpRtcpInterface*> send_modules_map_
RTC_GUARDED_BY(thread_checker_);
std::list<RtpRtcpInterface*> send_modules_list_
RTC_GUARDED_BY(thread_checker_); // The last module used to send media.
RtpRtcpInterface* last_send_module_ RTC_GUARDED_BY(thread_checker_); // Rtcp modules of the rtp receivers.
std::vector<RtcpFeedbackSenderInterface*> rtcp_feedback_senders_
RTC_GUARDED_BY(thread_checker_);
// Candidates for the REMB module can be RTP sender/receiver modules, with // the sender modules taking precedence.
std::vector<RtcpFeedbackSenderInterface*> sender_remb_candidates_
RTC_GUARDED_BY(thread_checker_);
std::vector<RtcpFeedbackSenderInterface*> receiver_remb_candidates_
RTC_GUARDED_BY(thread_checker_);
RtcpFeedbackSenderInterface* active_remb_module_
RTC_GUARDED_BY(thread_checker_);
uint64_t transport_seq_ RTC_GUARDED_BY(thread_checker_); // If `set_transport_seq_` is true, a transport sequence number is created per // packet even if it is not sent in a header extension. bool set_transport_seq_ RTC_GUARDED_BY(thread_checker_) = false; bool send_rtp_packets_as_ect1_ RTC_GUARDED_BY(thread_checker_) = false;
absl::AnyInvocable<void(RtpPacketToSend& packet, const PacedPacketInfo& pacing_info)>
notify_bwe_callback_ RTC_GUARDED_BY(thread_checker_) = nullptr;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.