Distinguish between missing packet and send failure.
This CL introduces three-value enum, in order to be able to distinguish between send success, send failure, and invalid states such as missing packet or invalid ssrc. The behavior is unchanged in this CL, a follow-up will change the pacer to not consume media budget on invalid states. Bug: webrtc:8052,webrtc:8975 Change-Id: I1c9e2226f995356daa538d3d3cf44945f35e0133 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/135165 Commit-Queue: Erik Språng <sprang@webrtc.org> Reviewed-by: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#27923}
This commit is contained in:
@ -130,9 +130,10 @@ void BbrPacedSender::Process() {
|
||||
|
||||
bool BbrPacedSender::TryToSendPacket(Packet* packet) {
|
||||
PacedPacketInfo pacing_info;
|
||||
return packet_sender_->TimeToSendPacket(packet->ssrc, packet->sequence_number,
|
||||
packet->capture_time_ms,
|
||||
packet->retransmission, pacing_info);
|
||||
return packet_sender_->TimeToSendPacket(
|
||||
packet->ssrc, packet->sequence_number, packet->capture_time_ms,
|
||||
packet->retransmission,
|
||||
pacing_info) != RtpPacketSendResult::kTransportUnavailable;
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -293,11 +293,12 @@ void PacedVideoSender::QueuePackets(Packets* batch,
|
||||
batch->merge(to_transfer, DereferencingComparator<Packet>);
|
||||
}
|
||||
|
||||
bool PacedVideoSender::TimeToSendPacket(uint32_t ssrc,
|
||||
uint16_t sequence_number,
|
||||
int64_t capture_time_ms,
|
||||
bool retransmission,
|
||||
const PacedPacketInfo& pacing_info) {
|
||||
RtpPacketSendResult PacedVideoSender::TimeToSendPacket(
|
||||
uint32_t ssrc,
|
||||
uint16_t sequence_number,
|
||||
int64_t capture_time_ms,
|
||||
bool retransmission,
|
||||
const PacedPacketInfo& pacing_info) {
|
||||
for (Packets::iterator it = pacer_queue_.begin(); it != pacer_queue_.end();
|
||||
++it) {
|
||||
MediaPacket* media_packet = static_cast<MediaPacket*>(*it);
|
||||
@ -306,17 +307,17 @@ bool PacedVideoSender::TimeToSendPacket(uint32_t ssrc,
|
||||
|
||||
// Make sure a packet is never paced out earlier than when it was put into
|
||||
// the pacer.
|
||||
assert(pace_out_time_ms >= media_packet->send_time_ms());
|
||||
RTC_CHECK_GE(pace_out_time_ms, media_packet->send_time_ms());
|
||||
media_packet->SetAbsSendTimeMs(pace_out_time_ms);
|
||||
media_packet->set_send_time_us(1000 * pace_out_time_ms);
|
||||
media_packet->set_sender_timestamp_us(1000 * pace_out_time_ms);
|
||||
queue_.push_back(media_packet);
|
||||
pacer_queue_size_in_bytes_ -= media_packet->payload_size();
|
||||
pacer_queue_.erase(it);
|
||||
return true;
|
||||
return RtpPacketSendResult::kSuccess;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return RtpPacketSendResult::kTransportUnavailable;
|
||||
}
|
||||
|
||||
size_t PacedVideoSender::TimeToSendPadding(size_t bytes,
|
||||
|
||||
@ -109,11 +109,12 @@ class PacedVideoSender : public VideoSender, public PacedSender::PacketSender {
|
||||
void RunFor(int64_t time_ms, Packets* in_out) override;
|
||||
|
||||
// Implements PacedSender::Callback.
|
||||
bool TimeToSendPacket(uint32_t ssrc,
|
||||
uint16_t sequence_number,
|
||||
int64_t capture_time_ms,
|
||||
bool retransmission,
|
||||
const PacedPacketInfo& pacing_info) override;
|
||||
RtpPacketSendResult TimeToSendPacket(
|
||||
uint32_t ssrc,
|
||||
uint16_t sequence_number,
|
||||
int64_t capture_time_ms,
|
||||
bool retransmission,
|
||||
const PacedPacketInfo& pacing_info) override;
|
||||
size_t TimeToSendPadding(size_t bytes,
|
||||
const PacedPacketInfo& pacing_info) override;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user