WebRTC 源码阅读笔记之传输层反馈 TransportPacketsFeedback
Table of Contents
TransportPacketsFeedback
发送方将自己保存的包信息结合接收方反馈的接收消息
struct TransportPacketsFeedback {
TransportPacketsFeedback();
TransportPacketsFeedback(const TransportPacketsFeedback& other);
~TransportPacketsFeedback();
//反馈的时间
Timestamp feedback_time = Timestamp::PlusInfinity();
//第一个没有响应的包的发送时间
Timestamp first_unacked_send_time = Timestamp::PlusInfinity();
//发送过的数据包大小
DataSize data_in_flight = DataSize::Zero();
//先前发送过的数据包大小
DataSize prior_in_flight = DataSize::Zero();
//反馈的数据包接收结果
std::vector<PacketResult> packet_feedbacks;
// Arrival times for messages without send time information.
std::vector<Timestamp> sendless_arrival_times;
//将上述的反馈结果进行分类
std::vector<PacketResult> ReceivedWithSendInfo() const;
std::vector<PacketResult> LostWithSendInfo() const;
std::vector<PacketResult> PacketsWithFeedback() const;
std::vector<PacketResult> SortedByReceiveTime() const;
};
PacketResult
struct PacketResult {
class ReceiveTimeOrder {
public:
bool operator()(const PacketResult& lhs, const PacketResult& rhs);
};
PacketResult();
PacketResult(const PacketResult&);
~PacketResult();
inline bool IsReceived() const { return !receive_time.IsPlusInfinity(); }
//发送的包
SentPacket sent_packet;
//接收的时间
Timestamp receive_time = Timestamp::PlusInfinity();
};
SendPacket
struct SentPacket {
Timestamp send_time = Timestamp::PlusInfinity();
// Size of packet with overhead up to IP layer.
// 数据包大小,不包括 IP 包头
DataSize size = DataSize::Zero();
// Size of preceeding packets that are not part of feedback.
// 不在反馈消息内的先前未响应的包的大小
DataSize prior_unacked_data = DataSize::Zero();
// Probe cluster id and parameters including bitrate, number of packets and
// number of bytes.
// 探测集群 id 和参数,包括比特率, 包的个数和字节数
PacedPacketInfo pacing_info;
// True if the packet is an audio packet, false for video, padding, RTX etc.
// 是否是一个音频包
bool audio = false;
// Transport independent sequence number, any tracked packet should have a
// sequence number that is unique over the whole call and increasing by 1 for
// each packet.
// 传输层的序号, 在这个传输通道上的包单调增长
int64_t sequence_number;
// 跟踪的发送过的包大小, 不包括未确认(未收到)的包
// Tracked data in flight when the packet was sent, excluding unacked data.
DataSize data_in_flight = DataSize::Zero();
};
PacedPacketInfo
步进包信息
struct PacedPacketInfo {
PacedPacketInfo();
PacedPacketInfo(int probe_cluster_id,
int probe_cluster_min_probes,
int probe_cluster_min_bytes);
bool operator==(const PacedPacketInfo& rhs) const;
// TODO(srte): Move probing info to a separate, optional struct.
//如果不是探测包,probe_cluster_id = -1
static constexpr int kNotAProbe = -1;
//发送的比特率
int send_bitrate_bps = -1;
//探测包群号
int probe_cluster_id = kNotAProbe;
//探测包群最小的探测个数
int probe_cluster_min_probes = -1;
//探测包群最小的字节数
int probe_cluster_min_bytes = -1;
//探测包群已发送的的探测字节数
int probe_cluster_bytes_sent = 0;
};
Comments |0|
Category: Uncategorized