in RtcpTransceiver implement sending rtcp sender reports
Bug: webrtc:8239 Change-Id: Id3298bf4e0eb18a3fc8072fb19416e67a126705f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/249788 Reviewed-by: Emil Lundmark <lndmrk@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#35995}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
66bfd6f57d
commit
f2b987377b
@ -11,7 +11,7 @@
|
||||
#ifndef MODULES_RTP_RTCP_SOURCE_RTCP_TRANSCEIVER_IMPL_H_
|
||||
#define MODULES_RTP_RTCP_SOURCE_RTCP_TRANSCEIVER_IMPL_H_
|
||||
|
||||
#include <map>
|
||||
#include <list>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -48,6 +48,11 @@ class RtcpTransceiverImpl {
|
||||
void RemoveMediaReceiverRtcpObserver(uint32_t remote_ssrc,
|
||||
MediaReceiverRtcpObserver* observer);
|
||||
|
||||
// Returns false on failure, e.g. when there is already an handler for the
|
||||
// `local_ssrc`.
|
||||
bool AddMediaSender(uint32_t local_ssrc, RtpStreamRtcpHandler* handler);
|
||||
bool RemoveMediaSender(uint32_t local_ssrc);
|
||||
|
||||
void SetReadyToSend(bool ready);
|
||||
|
||||
void ReceivePacket(rtc::ArrayView<const uint8_t> packet, Timestamp now);
|
||||
@ -76,6 +81,7 @@ class RtcpTransceiverImpl {
|
||||
private:
|
||||
class PacketSender;
|
||||
struct RemoteSenderState;
|
||||
struct LocalSenderState;
|
||||
|
||||
void HandleReceivedPacket(const rtcp::CommonHeader& rtcp_packet_header,
|
||||
Timestamp now,
|
||||
@ -104,11 +110,16 @@ class RtcpTransceiverImpl {
|
||||
|
||||
void ReschedulePeriodicCompoundPackets();
|
||||
void SchedulePeriodicCompoundPackets(int64_t delay_ms);
|
||||
// Appends RTCP receiver reports with attached report blocks to the `sender`.
|
||||
// Appends RTCP sender and receiver reports to the `sender`.
|
||||
// Both sender and receiver reports may have attached report blocks.
|
||||
// Uses up to `config_.max_packet_size - reserved_bytes`
|
||||
void FillReports(Timestamp now,
|
||||
size_t reserved_bytes,
|
||||
PacketSender& rtcp_sender);
|
||||
struct CompoundPacketInfo {
|
||||
uint32_t sender_ssrc;
|
||||
bool has_sender_report;
|
||||
};
|
||||
CompoundPacketInfo FillReports(Timestamp now,
|
||||
size_t reserved_bytes,
|
||||
PacketSender& rtcp_sender);
|
||||
|
||||
// Creates compound RTCP packet, as defined in
|
||||
// https://tools.ietf.org/html/rfc5506#section-2
|
||||
@ -130,6 +141,9 @@ class RtcpTransceiverImpl {
|
||||
// TODO(danilchap): Remove entries from remote_senders_ that are no longer
|
||||
// needed.
|
||||
flat_map<uint32_t, RemoteSenderState> remote_senders_;
|
||||
std::list<LocalSenderState> local_senders_;
|
||||
flat_map<uint32_t, std::list<LocalSenderState>::iterator>
|
||||
local_senders_by_ssrc_;
|
||||
RepeatingTaskHandle periodic_task_handle_;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user