Add new RtpPacketPacer interface, with callback.

This CL just adds the new interfaces, follow-ups will add implementation
in various parts of the code, and then do cleanup once usage of old
interface is gone.

Bug: webrtc:10633
Change-Id: Icd916f4220065c0d0e4f3f0bfaaed248f8c70d08
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/140891
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28252}
This commit is contained in:
Erik Språng
2019-06-12 13:58:17 +02:00
committed by Commit Bot
parent e794243650
commit f53cfa9ebe
7 changed files with 62 additions and 13 deletions

View File

@ -126,7 +126,8 @@ std::vector<std::unique_ptr<RtpPacketToSend>> FlexfecSender::GetFecPackets() {
for (const auto* fec_packet : ulpfec_generator_.generated_fec_packets_) {
std::unique_ptr<RtpPacketToSend> fec_packet_to_send(
new RtpPacketToSend(&rtp_header_extension_map_));
fec_packet_to_send->set_is_fec(true);
fec_packet_to_send->set_packet_type(
RtpPacketToSend::Type::kForwardErrorCorrection);
// RTP header.
fec_packet_to_send->SetMarker(false);

View File

@ -14,6 +14,7 @@
#include <stdint.h>
#include <vector>
#include "absl/types/optional.h"
#include "api/array_view.h"
#include "api/video/video_timing.h"
#include "modules/rtp_rtcp/source/rtp_header_extensions.h"
@ -23,6 +24,14 @@ namespace webrtc {
// Class to hold rtp packet with metadata for sender side.
class RtpPacketToSend : public RtpPacket {
public:
enum class Type {
kAudio, // Audio media packets.
kVideo, // Video media packets.
kRetransmission, // RTX (usually) packets send as response to NACK.
kForwardErrorCorrection, // FEC packets.
kPadding // RTX or plain padding sent to maintain BWE.
};
explicit RtpPacketToSend(const ExtensionManager* extensions);
RtpPacketToSend(const ExtensionManager* extensions, size_t capacity);
RtpPacketToSend(const RtpPacketToSend& packet);
@ -38,9 +47,8 @@ class RtpPacketToSend : public RtpPacket {
void set_capture_time_ms(int64_t time) { capture_time_ms_ = time; }
bool is_fec() const { return is_fec_; }
void set_is_fec(bool fec) { is_fec_ = fec; }
void set_packet_type(Type type) { packet_type_ = type; }
absl::optional<Type> packet_type() const { return packet_type_; }
// Additional data bound to the RTP packet for use in application code,
// outside of WebRTC.
@ -78,8 +86,7 @@ class RtpPacketToSend : public RtpPacket {
private:
int64_t capture_time_ms_ = 0;
// Used for accounting purposes
bool is_fec_ = false;
absl::optional<Type> packet_type_;
std::vector<uint8_t> application_data_;
};

View File

@ -661,8 +661,9 @@ void RTPSender::UpdateRtpStats(const RtpPacketToSend& packet,
if (counters->first_packet_time_ms == -1)
counters->first_packet_time_ms = now_ms;
if (packet.is_fec())
if (packet.packet_type() == RtpPacketToSend::Type::kForwardErrorCorrection) {
counters->fec.AddPacket(packet);
}
if (is_retransmit) {
counters->retransmitted.AddPacket(packet);

View File

@ -307,7 +307,7 @@ void RTPSenderVideo::SendVideoPacketAsRedMaybeWithUlpfec(
new RtpPacketToSend(*media_packet));
RTC_CHECK(rtp_packet->Parse(fec_packet->data(), fec_packet->length()));
rtp_packet->set_capture_time_ms(media_packet->capture_time_ms());
rtp_packet->set_is_fec(true);
rtp_packet->set_packet_type(RtpPacketToSend::Type::kForwardErrorCorrection);
uint16_t fec_sequence_number = rtp_packet->SequenceNumber();
if (LogAndSendToNetwork(std::move(rtp_packet), kDontRetransmit,
RtpPacketSender::kLowPriority)) {