Make sure rtp_rtcp module doesn't directly reference anything in the pacer module, and remove build dependencies on it.
BUG= Review URL: https://codereview.webrtc.org/1350163005 Cr-Commit-Position: refs/heads/master@{#10005}
This commit is contained in:
@ -28,5 +28,6 @@ source_set("pacing") {
|
|||||||
deps = [
|
deps = [
|
||||||
"../../system_wrappers",
|
"../../system_wrappers",
|
||||||
"../bitrate_controller",
|
"../bitrate_controller",
|
||||||
|
"../rtp_rtcp",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <limits>
|
#include <limits>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "webrtc/modules/pacing/include/paced_sender.h"
|
||||||
#include "webrtc/system_wrappers/interface/logging.h"
|
#include "webrtc/system_wrappers/interface/logging.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -29,8 +30,6 @@ int ComputeDeltaFromBitrate(size_t packet_size, int bitrate_bps) {
|
|||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
const size_t BitrateProber::kMinProbePacketSize = 200;
|
|
||||||
|
|
||||||
BitrateProber::BitrateProber()
|
BitrateProber::BitrateProber()
|
||||||
: probing_state_(kDisabled),
|
: probing_state_(kDisabled),
|
||||||
packet_size_last_send_(0),
|
packet_size_last_send_(0),
|
||||||
@ -90,7 +89,7 @@ int BitrateProber::TimeUntilNextProbe(int64_t now_ms) {
|
|||||||
// We will send the first probe packet immediately if no packet has been
|
// We will send the first probe packet immediately if no packet has been
|
||||||
// sent before.
|
// sent before.
|
||||||
int time_until_probe_ms = 0;
|
int time_until_probe_ms = 0;
|
||||||
if (packet_size_last_send_ > kMinProbePacketSize &&
|
if (packet_size_last_send_ > PacedSender::kMinProbePacketSize &&
|
||||||
probing_state_ == kProbing) {
|
probing_state_ == kProbing) {
|
||||||
int next_delta_ms = ComputeDeltaFromBitrate(packet_size_last_send_,
|
int next_delta_ms = ComputeDeltaFromBitrate(packet_size_last_send_,
|
||||||
probe_bitrates_.front());
|
probe_bitrates_.front());
|
||||||
|
@ -22,8 +22,6 @@ namespace webrtc {
|
|||||||
// on being protected by the caller.
|
// on being protected by the caller.
|
||||||
class BitrateProber {
|
class BitrateProber {
|
||||||
public:
|
public:
|
||||||
static const size_t kMinProbePacketSize;
|
|
||||||
|
|
||||||
BitrateProber();
|
BitrateProber();
|
||||||
|
|
||||||
void SetEnabled(bool enable);
|
void SetEnabled(bool enable);
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "webrtc/base/scoped_ptr.h"
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
#include "webrtc/base/thread_annotations.h"
|
#include "webrtc/base/thread_annotations.h"
|
||||||
#include "webrtc/modules/interface/module.h"
|
#include "webrtc/modules/interface/module.h"
|
||||||
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@ -30,16 +31,8 @@ struct Packet;
|
|||||||
class PacketQueue;
|
class PacketQueue;
|
||||||
} // namespace paced_sender
|
} // namespace paced_sender
|
||||||
|
|
||||||
class PacedSender : public Module {
|
class PacedSender : public Module, public RtpPacketSender {
|
||||||
public:
|
public:
|
||||||
enum Priority {
|
|
||||||
kHighPriority = 0, // Pass through; will be sent immediately.
|
|
||||||
kNormalPriority = 2, // Put in back of the line.
|
|
||||||
kLowPriority = 3, // Put in back of the low priority line.
|
|
||||||
};
|
|
||||||
// Low priority packets are mixed with the normal priority packets
|
|
||||||
// while we are paused.
|
|
||||||
|
|
||||||
class Callback {
|
class Callback {
|
||||||
public:
|
public:
|
||||||
// Note: packets sent as a result of a callback should not pass by this
|
// Note: packets sent as a result of a callback should not pass by this
|
||||||
@ -68,6 +61,8 @@ class PacedSender : public Module {
|
|||||||
// overshoots from the encoder.
|
// overshoots from the encoder.
|
||||||
static const float kDefaultPaceMultiplier;
|
static const float kDefaultPaceMultiplier;
|
||||||
|
|
||||||
|
static const size_t kMinProbePacketSize = 200;
|
||||||
|
|
||||||
PacedSender(Clock* clock,
|
PacedSender(Clock* clock,
|
||||||
Callback* callback,
|
Callback* callback,
|
||||||
int bitrate_kbps,
|
int bitrate_kbps,
|
||||||
@ -103,12 +98,12 @@ class PacedSender : public Module {
|
|||||||
|
|
||||||
// Returns true if we send the packet now, else it will add the packet
|
// Returns true if we send the packet now, else it will add the packet
|
||||||
// information to the queue and call TimeToSendPacket when it's time to send.
|
// information to the queue and call TimeToSendPacket when it's time to send.
|
||||||
virtual bool SendPacket(Priority priority,
|
bool SendPacket(RtpPacketSender::Priority priority,
|
||||||
uint32_t ssrc,
|
uint32_t ssrc,
|
||||||
uint16_t sequence_number,
|
uint16_t sequence_number,
|
||||||
int64_t capture_time_ms,
|
int64_t capture_time_ms,
|
||||||
size_t bytes,
|
size_t bytes,
|
||||||
bool retransmission);
|
bool retransmission) override;
|
||||||
|
|
||||||
// Returns the time since the oldest queued packet was enqueued.
|
// Returns the time since the oldest queued packet was enqueued.
|
||||||
virtual int64_t QueueInMs() const;
|
virtual int64_t QueueInMs() const;
|
||||||
|
@ -19,15 +19,19 @@
|
|||||||
#include "webrtc/base/thread_annotations.h"
|
#include "webrtc/base/thread_annotations.h"
|
||||||
#include "webrtc/common_types.h"
|
#include "webrtc/common_types.h"
|
||||||
#include "webrtc/modules/pacing/include/paced_sender.h"
|
#include "webrtc/modules/pacing/include/paced_sender.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
class RtpRtcp;
|
class RtpRtcp;
|
||||||
|
namespace rtcp {
|
||||||
|
class TransportFeedback;
|
||||||
|
} // namespace rtcp
|
||||||
|
|
||||||
// PacketRouter routes outgoing data to the correct sending RTP module, based
|
// PacketRouter routes outgoing data to the correct sending RTP module, based
|
||||||
// on the simulcast layer in RTPVideoHeader.
|
// on the simulcast layer in RTPVideoHeader.
|
||||||
class PacketRouter : public PacedSender::Callback {
|
class PacketRouter : public PacedSender::Callback,
|
||||||
|
public TransportSequenceNumberAllocator {
|
||||||
public:
|
public:
|
||||||
PacketRouter();
|
PacketRouter();
|
||||||
virtual ~PacketRouter();
|
virtual ~PacketRouter();
|
||||||
@ -44,7 +48,7 @@ class PacketRouter : public PacedSender::Callback {
|
|||||||
size_t TimeToSendPadding(size_t bytes) override;
|
size_t TimeToSendPadding(size_t bytes) override;
|
||||||
|
|
||||||
void SetTransportWideSequenceNumber(uint16_t sequence_number);
|
void SetTransportWideSequenceNumber(uint16_t sequence_number);
|
||||||
uint16_t AllocateSequenceNumber();
|
uint16_t AllocateSequenceNumber() override;
|
||||||
|
|
||||||
// Send transport feedback packet to send-side.
|
// Send transport feedback packet to send-side.
|
||||||
virtual bool SendFeedback(rtcp::TransportFeedback* packet);
|
virtual bool SendFeedback(rtcp::TransportFeedback* packet);
|
||||||
|
@ -36,7 +36,7 @@ const int64_t kMaxIntervalTimeMs = 30;
|
|||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
namespace paced_sender {
|
namespace paced_sender {
|
||||||
struct Packet {
|
struct Packet {
|
||||||
Packet(PacedSender::Priority priority,
|
Packet(RtpPacketSender::Priority priority,
|
||||||
uint32_t ssrc,
|
uint32_t ssrc,
|
||||||
uint16_t seq_number,
|
uint16_t seq_number,
|
||||||
int64_t capture_time_ms,
|
int64_t capture_time_ms,
|
||||||
@ -53,7 +53,7 @@ struct Packet {
|
|||||||
retransmission(retransmission),
|
retransmission(retransmission),
|
||||||
enqueue_order(enqueue_order) {}
|
enqueue_order(enqueue_order) {}
|
||||||
|
|
||||||
PacedSender::Priority priority;
|
RtpPacketSender::Priority priority;
|
||||||
uint32_t ssrc;
|
uint32_t ssrc;
|
||||||
uint16_t sequence_number;
|
uint16_t sequence_number;
|
||||||
int64_t capture_time_ms;
|
int64_t capture_time_ms;
|
||||||
@ -268,8 +268,11 @@ void PacedSender::UpdateBitrate(int bitrate_kbps,
|
|||||||
bitrate_bps_ = 1000 * bitrate_kbps;
|
bitrate_bps_ = 1000 * bitrate_kbps;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PacedSender::SendPacket(Priority priority, uint32_t ssrc,
|
bool PacedSender::SendPacket(RtpPacketSender::Priority priority,
|
||||||
uint16_t sequence_number, int64_t capture_time_ms, size_t bytes,
|
uint32_t ssrc,
|
||||||
|
uint16_t sequence_number,
|
||||||
|
int64_t capture_time_ms,
|
||||||
|
size_t bytes,
|
||||||
bool retransmission) {
|
bool retransmission) {
|
||||||
CriticalSectionScoped cs(critsect_.get());
|
CriticalSectionScoped cs(critsect_.get());
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
'dependencies': [
|
'dependencies': [
|
||||||
'<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
|
'<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
|
||||||
'<(webrtc_root)/modules/modules.gyp:bitrate_controller',
|
'<(webrtc_root)/modules/modules.gyp:bitrate_controller',
|
||||||
|
'<(webrtc_root)/modules/modules.gyp:rtp_rtcp',
|
||||||
],
|
],
|
||||||
'sources': [
|
'sources': [
|
||||||
'include/paced_sender.h',
|
'include/paced_sender.h',
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "webrtc/base/scoped_ptr.h"
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
#include "webrtc/base/thread_annotations.h"
|
#include "webrtc/base/thread_annotations.h"
|
||||||
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
|
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h"
|
||||||
#include "webrtc/modules/pacing/bitrate_prober.h"
|
#include "webrtc/modules/pacing/include/paced_sender.h"
|
||||||
#include "webrtc/system_wrappers/interface/clock.h"
|
#include "webrtc/system_wrappers/interface/clock.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/logging.h"
|
#include "webrtc/system_wrappers/interface/logging.h"
|
||||||
@ -272,7 +272,7 @@ void RemoteBitrateEstimatorAbsSendTime::IncomingPacketInfo(
|
|||||||
// For now only try to detect probes while we don't have a valid estimate, and
|
// For now only try to detect probes while we don't have a valid estimate, and
|
||||||
// make sure the packet was paced. We currently assume that only packets
|
// make sure the packet was paced. We currently assume that only packets
|
||||||
// larger than 200 bytes are paced by the sender.
|
// larger than 200 bytes are paced by the sender.
|
||||||
was_paced = was_paced && payload_size > BitrateProber::kMinProbePacketSize;
|
was_paced = was_paced && payload_size > PacedSender::kMinProbePacketSize;
|
||||||
if (was_paced &&
|
if (was_paced &&
|
||||||
(!remote_rate_.ValidEstimate() ||
|
(!remote_rate_.ValidEstimate() ||
|
||||||
now_ms - first_packet_time_ms_ < kInitialProbingIntervalMs)) {
|
now_ms - first_packet_time_ms_ < kInitialProbingIntervalMs)) {
|
||||||
|
@ -110,7 +110,6 @@ source_set("rtp_rtcp") {
|
|||||||
deps = [
|
deps = [
|
||||||
"../..:webrtc_common",
|
"../..:webrtc_common",
|
||||||
"../../system_wrappers",
|
"../../system_wrappers",
|
||||||
"../pacing",
|
|
||||||
"../remote_bitrate_estimator",
|
"../remote_bitrate_estimator",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
// Forward declarations.
|
// Forward declarations.
|
||||||
class PacedSender;
|
|
||||||
class PacketRouter;
|
|
||||||
class ReceiveStatistics;
|
class ReceiveStatistics;
|
||||||
class RemoteBitrateEstimator;
|
class RemoteBitrateEstimator;
|
||||||
class RtpReceiver;
|
class RtpReceiver;
|
||||||
@ -69,8 +67,8 @@ class RtpRtcp : public Module {
|
|||||||
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer;
|
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer;
|
||||||
RtpAudioFeedback* audio_messages;
|
RtpAudioFeedback* audio_messages;
|
||||||
RemoteBitrateEstimator* remote_bitrate_estimator;
|
RemoteBitrateEstimator* remote_bitrate_estimator;
|
||||||
PacedSender* paced_sender;
|
RtpPacketSender* paced_sender;
|
||||||
PacketRouter* packet_router;
|
TransportSequenceNumberAllocator* transport_sequence_number_allocator;
|
||||||
BitrateStatisticsObserver* send_bitrate_observer;
|
BitrateStatisticsObserver* send_bitrate_observer;
|
||||||
FrameCountObserver* send_frame_count_observer;
|
FrameCountObserver* send_frame_count_observer;
|
||||||
SendSideDelayObserver* send_side_delay_observer;
|
SendSideDelayObserver* send_side_delay_observer;
|
||||||
|
@ -395,5 +395,36 @@ struct RtpPacketLossStats {
|
|||||||
uint64_t multiple_packet_loss_packet_count;
|
uint64_t multiple_packet_loss_packet_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class RtpPacketSender {
|
||||||
|
public:
|
||||||
|
RtpPacketSender() {}
|
||||||
|
virtual ~RtpPacketSender() {}
|
||||||
|
|
||||||
|
enum Priority {
|
||||||
|
kHighPriority = 0, // Pass through; will be sent immediately.
|
||||||
|
kNormalPriority = 2, // Put in back of the line.
|
||||||
|
kLowPriority = 3, // Put in back of the low priority line.
|
||||||
|
};
|
||||||
|
// Low priority packets are mixed with the normal priority packets
|
||||||
|
// while we are paused.
|
||||||
|
|
||||||
|
// Returns true if we send the packet now, else it will add the packet
|
||||||
|
// information to the queue and call TimeToSendPacket when it's time to send.
|
||||||
|
virtual bool SendPacket(Priority priority,
|
||||||
|
uint32_t ssrc,
|
||||||
|
uint16_t sequence_number,
|
||||||
|
int64_t capture_time_ms,
|
||||||
|
size_t bytes,
|
||||||
|
bool retransmission) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class TransportSequenceNumberAllocator {
|
||||||
|
public:
|
||||||
|
TransportSequenceNumberAllocator() {}
|
||||||
|
virtual ~TransportSequenceNumberAllocator() {}
|
||||||
|
|
||||||
|
virtual uint16_t AllocateSequenceNumber() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
#endif // WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_
|
#endif // WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
'type': 'static_library',
|
'type': 'static_library',
|
||||||
'dependencies': [
|
'dependencies': [
|
||||||
'<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
|
'<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers',
|
||||||
'<(webrtc_root)/modules/modules.gyp:paced_sender',
|
|
||||||
'<(webrtc_root)/modules/modules.gyp:remote_bitrate_estimator',
|
'<(webrtc_root)/modules/modules.gyp:remote_bitrate_estimator',
|
||||||
],
|
],
|
||||||
'sources': [
|
'sources': [
|
||||||
|
@ -40,7 +40,7 @@ RtpRtcp::Configuration::Configuration()
|
|||||||
audio_messages(NullObjectRtpAudioFeedback()),
|
audio_messages(NullObjectRtpAudioFeedback()),
|
||||||
remote_bitrate_estimator(nullptr),
|
remote_bitrate_estimator(nullptr),
|
||||||
paced_sender(nullptr),
|
paced_sender(nullptr),
|
||||||
packet_router(nullptr),
|
transport_sequence_number_allocator(nullptr),
|
||||||
send_bitrate_observer(nullptr),
|
send_bitrate_observer(nullptr),
|
||||||
send_frame_count_observer(nullptr),
|
send_frame_count_observer(nullptr),
|
||||||
send_side_delay_observer(nullptr) {}
|
send_side_delay_observer(nullptr) {}
|
||||||
@ -64,7 +64,7 @@ ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration)
|
|||||||
configuration.outgoing_transport,
|
configuration.outgoing_transport,
|
||||||
configuration.audio_messages,
|
configuration.audio_messages,
|
||||||
configuration.paced_sender,
|
configuration.paced_sender,
|
||||||
configuration.packet_router,
|
configuration.transport_sequence_number_allocator,
|
||||||
configuration.transport_feedback_callback,
|
configuration.transport_feedback_callback,
|
||||||
configuration.send_bitrate_observer,
|
configuration.send_bitrate_observer,
|
||||||
configuration.send_frame_count_observer,
|
configuration.send_frame_count_observer,
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
#include "webrtc/common_types.h"
|
#include "webrtc/common_types.h"
|
||||||
#include "webrtc/modules/pacing/include/mock/mock_paced_sender.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
|
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
|
||||||
|
@ -97,12 +97,13 @@ class BitrateAggregator {
|
|||||||
uint32_t ssrc_;
|
uint32_t ssrc_;
|
||||||
};
|
};
|
||||||
|
|
||||||
RTPSender::RTPSender(bool audio,
|
RTPSender::RTPSender(
|
||||||
|
bool audio,
|
||||||
Clock* clock,
|
Clock* clock,
|
||||||
Transport* transport,
|
Transport* transport,
|
||||||
RtpAudioFeedback* audio_feedback,
|
RtpAudioFeedback* audio_feedback,
|
||||||
PacedSender* paced_sender,
|
RtpPacketSender* paced_sender,
|
||||||
PacketRouter* packet_router,
|
TransportSequenceNumberAllocator* sequence_number_allocator,
|
||||||
TransportFeedbackObserver* transport_feedback_observer,
|
TransportFeedbackObserver* transport_feedback_observer,
|
||||||
BitrateStatisticsObserver* bitrate_callback,
|
BitrateStatisticsObserver* bitrate_callback,
|
||||||
FrameCountObserver* frame_count_observer,
|
FrameCountObserver* frame_count_observer,
|
||||||
@ -118,7 +119,7 @@ RTPSender::RTPSender(bool audio,
|
|||||||
audio_(audio ? new RTPSenderAudio(clock, this, audio_feedback) : nullptr),
|
audio_(audio ? new RTPSenderAudio(clock, this, audio_feedback) : nullptr),
|
||||||
video_(audio ? nullptr : new RTPSenderVideo(clock, this)),
|
video_(audio ? nullptr : new RTPSenderVideo(clock, this)),
|
||||||
paced_sender_(paced_sender),
|
paced_sender_(paced_sender),
|
||||||
packet_router_(packet_router),
|
transport_sequence_number_allocator_(sequence_number_allocator),
|
||||||
transport_feedback_observer_(transport_feedback_observer),
|
transport_feedback_observer_(transport_feedback_observer),
|
||||||
last_capture_time_ms_sent_(0),
|
last_capture_time_ms_sent_(0),
|
||||||
send_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
|
send_critsect_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
@ -586,7 +587,8 @@ size_t RTPSender::SendPadData(size_t bytes,
|
|||||||
bool timestamp_provided,
|
bool timestamp_provided,
|
||||||
uint32_t timestamp,
|
uint32_t timestamp,
|
||||||
int64_t capture_time_ms) {
|
int64_t capture_time_ms) {
|
||||||
// Always send full padding packets. This is accounted for by the PacedSender,
|
// Always send full padding packets. This is accounted for by the
|
||||||
|
// RtpPacketSender,
|
||||||
// which will make sure we don't send too much padding even if a single packet
|
// which will make sure we don't send too much padding even if a single packet
|
||||||
// is larger than requested.
|
// is larger than requested.
|
||||||
size_t padding_bytes_in_packet =
|
size_t padding_bytes_in_packet =
|
||||||
@ -594,7 +596,7 @@ size_t RTPSender::SendPadData(size_t bytes,
|
|||||||
size_t bytes_sent = 0;
|
size_t bytes_sent = 0;
|
||||||
bool using_transport_seq = rtp_header_extension_map_.IsRegistered(
|
bool using_transport_seq = rtp_header_extension_map_.IsRegistered(
|
||||||
kRtpExtensionTransportSequenceNumber) &&
|
kRtpExtensionTransportSequenceNumber) &&
|
||||||
packet_router_;
|
transport_sequence_number_allocator_;
|
||||||
for (; bytes > 0; bytes -= padding_bytes_in_packet) {
|
for (; bytes > 0; bytes -= padding_bytes_in_packet) {
|
||||||
if (bytes < padding_bytes_in_packet)
|
if (bytes < padding_bytes_in_packet)
|
||||||
bytes = padding_bytes_in_packet;
|
bytes = padding_bytes_in_packet;
|
||||||
@ -711,7 +713,7 @@ int32_t RTPSender::ReSendPacket(uint16_t packet_id, int64_t min_resend_time) {
|
|||||||
// TickTime.
|
// TickTime.
|
||||||
int64_t corrected_capture_tims_ms = capture_time_ms + clock_delta_ms_;
|
int64_t corrected_capture_tims_ms = capture_time_ms + clock_delta_ms_;
|
||||||
if (!paced_sender_->SendPacket(
|
if (!paced_sender_->SendPacket(
|
||||||
PacedSender::kHighPriority, header.ssrc, header.sequenceNumber,
|
RtpPacketSender::kHighPriority, header.ssrc, header.sequenceNumber,
|
||||||
corrected_capture_tims_ms, length - header.headerLength, true)) {
|
corrected_capture_tims_ms, length - header.headerLength, true)) {
|
||||||
// We can't send the packet right now.
|
// We can't send the packet right now.
|
||||||
// We will be called when it is time.
|
// We will be called when it is time.
|
||||||
@ -917,7 +919,8 @@ bool RTPSender::PrepareAndSendPacket(uint8_t* buffer,
|
|||||||
// TODO(sprang): Potentially too much overhead in IsRegistered()?
|
// TODO(sprang): Potentially too much overhead in IsRegistered()?
|
||||||
bool using_transport_seq = rtp_header_extension_map_.IsRegistered(
|
bool using_transport_seq = rtp_header_extension_map_.IsRegistered(
|
||||||
kRtpExtensionTransportSequenceNumber) &&
|
kRtpExtensionTransportSequenceNumber) &&
|
||||||
packet_router_ && !is_retransmit;
|
transport_sequence_number_allocator_ &&
|
||||||
|
!is_retransmit;
|
||||||
if (using_transport_seq) {
|
if (using_transport_seq) {
|
||||||
transport_seq =
|
transport_seq =
|
||||||
UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header);
|
UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header);
|
||||||
@ -1000,10 +1003,12 @@ size_t RTPSender::TimeToSendPadding(size_t bytes) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO(pwestin): send in the RtpHeaderParser to avoid parsing it again.
|
// TODO(pwestin): send in the RtpHeaderParser to avoid parsing it again.
|
||||||
int32_t RTPSender::SendToNetwork(
|
int32_t RTPSender::SendToNetwork(uint8_t* buffer,
|
||||||
uint8_t *buffer, size_t payload_length, size_t rtp_header_length,
|
size_t payload_length,
|
||||||
int64_t capture_time_ms, StorageType storage,
|
size_t rtp_header_length,
|
||||||
PacedSender::Priority priority) {
|
int64_t capture_time_ms,
|
||||||
|
StorageType storage,
|
||||||
|
RtpPacketSender::Priority priority) {
|
||||||
RtpUtility::RtpHeaderParser rtp_parser(buffer,
|
RtpUtility::RtpHeaderParser rtp_parser(buffer,
|
||||||
payload_length + rtp_header_length);
|
payload_length + rtp_header_length);
|
||||||
RTPHeader rtp_header;
|
RTPHeader rtp_header;
|
||||||
@ -1615,7 +1620,7 @@ uint16_t RTPSender::UpdateTransportSequenceNumber(
|
|||||||
RTC_NOTREACHED();
|
RTC_NOTREACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t seq = packet_router_->AllocateSequenceNumber();
|
uint16_t seq = transport_sequence_number_allocator_->AllocateSequenceNumber();
|
||||||
BuildTransportSequenceNumberExtension(rtp_packet + offset, seq);
|
BuildTransportSequenceNumberExtension(rtp_packet + offset, seq);
|
||||||
return seq;
|
return seq;
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
#include "webrtc/base/thread_annotations.h"
|
#include "webrtc/base/thread_annotations.h"
|
||||||
#include "webrtc/common_types.h"
|
#include "webrtc/common_types.h"
|
||||||
#include "webrtc/modules/pacing/include/paced_sender.h"
|
|
||||||
#include "webrtc/modules/pacing/include/packet_router.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/bitrate.h"
|
#include "webrtc/modules/rtp_rtcp/source/bitrate.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
|
#include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
|
||||||
@ -71,10 +69,12 @@ class RTPSenderInterface {
|
|||||||
virtual uint16_t PacketOverHead() const = 0;
|
virtual uint16_t PacketOverHead() const = 0;
|
||||||
virtual uint16_t ActualSendBitrateKbit() const = 0;
|
virtual uint16_t ActualSendBitrateKbit() const = 0;
|
||||||
|
|
||||||
virtual int32_t SendToNetwork(
|
virtual int32_t SendToNetwork(uint8_t* data_buffer,
|
||||||
uint8_t *data_buffer, size_t payload_length, size_t rtp_header_length,
|
size_t payload_length,
|
||||||
int64_t capture_time_ms, StorageType storage,
|
size_t rtp_header_length,
|
||||||
PacedSender::Priority priority) = 0;
|
int64_t capture_time_ms,
|
||||||
|
StorageType storage,
|
||||||
|
RtpPacketSender::Priority priority) = 0;
|
||||||
|
|
||||||
virtual bool UpdateVideoRotation(uint8_t* rtp_packet,
|
virtual bool UpdateVideoRotation(uint8_t* rtp_packet,
|
||||||
size_t rtp_packet_length,
|
size_t rtp_packet_length,
|
||||||
@ -90,8 +90,8 @@ class RTPSender : public RTPSenderInterface {
|
|||||||
Clock* clock,
|
Clock* clock,
|
||||||
Transport* transport,
|
Transport* transport,
|
||||||
RtpAudioFeedback* audio_feedback,
|
RtpAudioFeedback* audio_feedback,
|
||||||
PacedSender* paced_sender,
|
RtpPacketSender* paced_sender,
|
||||||
PacketRouter* packet_router,
|
TransportSequenceNumberAllocator* sequence_number_allocator,
|
||||||
TransportFeedbackObserver* transport_feedback_callback,
|
TransportFeedbackObserver* transport_feedback_callback,
|
||||||
BitrateStatisticsObserver* bitrate_callback,
|
BitrateStatisticsObserver* bitrate_callback,
|
||||||
FrameCountObserver* frame_count_observer,
|
FrameCountObserver* frame_count_observer,
|
||||||
@ -257,7 +257,7 @@ class RTPSender : public RTPSenderInterface {
|
|||||||
size_t rtp_header_length,
|
size_t rtp_header_length,
|
||||||
int64_t capture_time_ms,
|
int64_t capture_time_ms,
|
||||||
StorageType storage,
|
StorageType storage,
|
||||||
PacedSender::Priority priority) override;
|
RtpPacketSender::Priority priority) override;
|
||||||
|
|
||||||
// Audio.
|
// Audio.
|
||||||
|
|
||||||
@ -370,8 +370,8 @@ class RTPSender : public RTPSenderInterface {
|
|||||||
const RTPHeader& rtp_header,
|
const RTPHeader& rtp_header,
|
||||||
int64_t now_ms) const;
|
int64_t now_ms) const;
|
||||||
// Update the transport sequence number of the packet using a new sequence
|
// Update the transport sequence number of the packet using a new sequence
|
||||||
// number allocated by PacketRouter. Returns the assigned sequence number,
|
// number allocated by SequenceNumberAllocator. Returns the assigned sequence
|
||||||
// or 0 if extension could not be updated.
|
// number, or 0 if extension could not be updated.
|
||||||
uint16_t UpdateTransportSequenceNumber(uint8_t* rtp_packet,
|
uint16_t UpdateTransportSequenceNumber(uint8_t* rtp_packet,
|
||||||
size_t rtp_packet_length,
|
size_t rtp_packet_length,
|
||||||
const RTPHeader& rtp_header) const;
|
const RTPHeader& rtp_header) const;
|
||||||
@ -393,8 +393,8 @@ class RTPSender : public RTPSenderInterface {
|
|||||||
rtc::scoped_ptr<RTPSenderAudio> audio_;
|
rtc::scoped_ptr<RTPSenderAudio> audio_;
|
||||||
rtc::scoped_ptr<RTPSenderVideo> video_;
|
rtc::scoped_ptr<RTPSenderVideo> video_;
|
||||||
|
|
||||||
PacedSender* const paced_sender_;
|
RtpPacketSender* const paced_sender_;
|
||||||
PacketRouter* const packet_router_;
|
TransportSequenceNumberAllocator* const transport_sequence_number_allocator_;
|
||||||
TransportFeedbackObserver* const transport_feedback_observer_;
|
TransportFeedbackObserver* const transport_feedback_observer_;
|
||||||
int64_t last_capture_time_ms_sent_;
|
int64_t last_capture_time_ms_sent_;
|
||||||
rtc::scoped_ptr<CriticalSectionWrapper> send_critsect_;
|
rtc::scoped_ptr<CriticalSectionWrapper> send_critsect_;
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include <assert.h> //assert
|
#include <assert.h> //assert
|
||||||
#include <string.h> //memcpy
|
#include <string.h> //memcpy
|
||||||
|
|
||||||
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||||
#include "webrtc/system_wrappers/interface/trace_event.h"
|
#include "webrtc/system_wrappers/interface/trace_event.h"
|
||||||
|
|
||||||
@ -368,7 +369,7 @@ int32_t RTPSenderAudio::SendAudio(
|
|||||||
_rtpSender->SequenceNumber());
|
_rtpSender->SequenceNumber());
|
||||||
return _rtpSender->SendToNetwork(dataBuffer, payloadSize, rtpHeaderLength,
|
return _rtpSender->SendToNetwork(dataBuffer, payloadSize, rtpHeaderLength,
|
||||||
-1, kAllowRetransmission,
|
-1, kAllowRetransmission,
|
||||||
PacedSender::kHighPriority);
|
RtpPacketSender::kHighPriority);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Audio level magnitude and voice activity flag are set for each RTP packet
|
// Audio level magnitude and voice activity flag are set for each RTP packet
|
||||||
@ -477,7 +478,7 @@ RTPSenderAudio::SendTelephoneEventPacket(bool ended,
|
|||||||
_rtpSender->SequenceNumber());
|
_rtpSender->SequenceNumber());
|
||||||
retVal = _rtpSender->SendToNetwork(dtmfbuffer, 4, 12, -1,
|
retVal = _rtpSender->SendToNetwork(dtmfbuffer, 4, 12, -1,
|
||||||
kAllowRetransmission,
|
kAllowRetransmission,
|
||||||
PacedSender::kHighPriority);
|
RtpPacketSender::kHighPriority);
|
||||||
sendCount--;
|
sendCount--;
|
||||||
|
|
||||||
}while (sendCount > 0 && retVal == 0);
|
}while (sendCount > 0 && retVal == 0);
|
||||||
|
@ -12,11 +12,11 @@
|
|||||||
* This file includes unit tests for the RTPSender.
|
* This file includes unit tests for the RTPSender.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "testing/gmock/include/gmock/gmock.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
|
|
||||||
#include "webrtc/base/buffer.h"
|
#include "webrtc/base/buffer.h"
|
||||||
#include "webrtc/base/scoped_ptr.h"
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
#include "webrtc/modules/pacing/include/mock/mock_paced_sender.h"
|
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_cvo.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_cvo.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_header_parser.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
@ -100,6 +100,20 @@ class LoopbackTransportTest : public webrtc::Transport {
|
|||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
class MockRtpPacketSender : public RtpPacketSender {
|
||||||
|
public:
|
||||||
|
MockRtpPacketSender() {}
|
||||||
|
virtual ~MockRtpPacketSender() {}
|
||||||
|
|
||||||
|
MOCK_METHOD6(SendPacket,
|
||||||
|
bool(Priority priority,
|
||||||
|
uint32_t ssrc,
|
||||||
|
uint16_t sequence_number,
|
||||||
|
int64_t capture_time_ms,
|
||||||
|
size_t bytes,
|
||||||
|
bool retransmission));
|
||||||
|
};
|
||||||
|
|
||||||
class RtpSenderTest : public ::testing::Test {
|
class RtpSenderTest : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
RtpSenderTest()
|
RtpSenderTest()
|
||||||
@ -121,7 +135,7 @@ class RtpSenderTest : public ::testing::Test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SimulatedClock fake_clock_;
|
SimulatedClock fake_clock_;
|
||||||
MockPacedSender mock_paced_sender_;
|
MockRtpPacketSender mock_paced_sender_;
|
||||||
rtc::scoped_ptr<RTPSender> rtp_sender_;
|
rtc::scoped_ptr<RTPSender> rtp_sender_;
|
||||||
int payload_;
|
int payload_;
|
||||||
LoopbackTransportTest transport_;
|
LoopbackTransportTest transport_;
|
||||||
@ -152,12 +166,9 @@ class RtpSenderTest : public ::testing::Test {
|
|||||||
ASSERT_GE(rtp_length, 0);
|
ASSERT_GE(rtp_length, 0);
|
||||||
|
|
||||||
// Packet should be stored in a send bucket.
|
// Packet should be stored in a send bucket.
|
||||||
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_,
|
EXPECT_EQ(0, rtp_sender_->SendToNetwork(
|
||||||
payload_length,
|
packet_, payload_length, rtp_length, capture_time_ms,
|
||||||
rtp_length,
|
kAllowRetransmission, RtpPacketSender::kNormalPriority));
|
||||||
capture_time_ms,
|
|
||||||
kAllowRetransmission,
|
|
||||||
PacedSender::kNormalPriority));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -593,8 +604,8 @@ TEST_F(RtpSenderTest, BuildRTPPacketWithHeaderExtensions) {
|
|||||||
|
|
||||||
TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
||||||
EXPECT_CALL(mock_paced_sender_,
|
EXPECT_CALL(mock_paced_sender_,
|
||||||
SendPacket(PacedSender::kNormalPriority, _, kSeqNum, _, _, _)).
|
SendPacket(RtpPacketSender::kNormalPriority, _, kSeqNum, _, _, _))
|
||||||
WillOnce(testing::Return(false));
|
.WillOnce(testing::Return(false));
|
||||||
|
|
||||||
rtp_sender_->SetStorePacketsStatus(true, 10);
|
rtp_sender_->SetStorePacketsStatus(true, 10);
|
||||||
EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
||||||
@ -609,12 +620,9 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
|||||||
size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
||||||
|
|
||||||
// Packet should be stored in a send bucket.
|
// Packet should be stored in a send bucket.
|
||||||
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_,
|
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
||||||
0,
|
capture_time_ms, kAllowRetransmission,
|
||||||
rtp_length,
|
RtpPacketSender::kNormalPriority));
|
||||||
capture_time_ms,
|
|
||||||
kAllowRetransmission,
|
|
||||||
PacedSender::kNormalPriority));
|
|
||||||
|
|
||||||
EXPECT_EQ(0, transport_.packets_sent_);
|
EXPECT_EQ(0, transport_.packets_sent_);
|
||||||
|
|
||||||
@ -646,8 +654,8 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
|||||||
|
|
||||||
TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
||||||
EXPECT_CALL(mock_paced_sender_,
|
EXPECT_CALL(mock_paced_sender_,
|
||||||
SendPacket(PacedSender::kNormalPriority, _, kSeqNum, _, _, _)).
|
SendPacket(RtpPacketSender::kNormalPriority, _, kSeqNum, _, _, _))
|
||||||
WillOnce(testing::Return(false));
|
.WillOnce(testing::Return(false));
|
||||||
|
|
||||||
rtp_sender_->SetStorePacketsStatus(true, 10);
|
rtp_sender_->SetStorePacketsStatus(true, 10);
|
||||||
EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
||||||
@ -662,18 +670,15 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
|||||||
size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
||||||
|
|
||||||
// Packet should be stored in a send bucket.
|
// Packet should be stored in a send bucket.
|
||||||
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_,
|
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
||||||
0,
|
capture_time_ms, kAllowRetransmission,
|
||||||
rtp_length,
|
RtpPacketSender::kNormalPriority));
|
||||||
capture_time_ms,
|
|
||||||
kAllowRetransmission,
|
|
||||||
PacedSender::kNormalPriority));
|
|
||||||
|
|
||||||
EXPECT_EQ(0, transport_.packets_sent_);
|
EXPECT_EQ(0, transport_.packets_sent_);
|
||||||
|
|
||||||
EXPECT_CALL(mock_paced_sender_,
|
EXPECT_CALL(mock_paced_sender_,
|
||||||
SendPacket(PacedSender::kHighPriority, _, kSeqNum, _, _, _)).
|
SendPacket(RtpPacketSender::kHighPriority, _, kSeqNum, _, _, _))
|
||||||
WillOnce(testing::Return(false));
|
.WillOnce(testing::Return(false));
|
||||||
|
|
||||||
const int kStoredTimeInMs = 100;
|
const int kStoredTimeInMs = 100;
|
||||||
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
|
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
|
||||||
@ -710,8 +715,8 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
|||||||
TEST_F(RtpSenderTest, SendPadding) {
|
TEST_F(RtpSenderTest, SendPadding) {
|
||||||
// Make all (non-padding) packets go to send queue.
|
// Make all (non-padding) packets go to send queue.
|
||||||
EXPECT_CALL(mock_paced_sender_,
|
EXPECT_CALL(mock_paced_sender_,
|
||||||
SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)).
|
SendPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
|
||||||
WillRepeatedly(testing::Return(false));
|
.WillRepeatedly(testing::Return(false));
|
||||||
|
|
||||||
uint16_t seq_num = kSeqNum;
|
uint16_t seq_num = kSeqNum;
|
||||||
uint32_t timestamp = kTimestamp;
|
uint32_t timestamp = kTimestamp;
|
||||||
@ -744,12 +749,9 @@ TEST_F(RtpSenderTest, SendPadding) {
|
|||||||
size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
size_t rtp_length = static_cast<size_t>(rtp_length_int);
|
||||||
|
|
||||||
// Packet should be stored in a send bucket.
|
// Packet should be stored in a send bucket.
|
||||||
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_,
|
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
||||||
0,
|
capture_time_ms, kAllowRetransmission,
|
||||||
rtp_length,
|
RtpPacketSender::kNormalPriority));
|
||||||
capture_time_ms,
|
|
||||||
kAllowRetransmission,
|
|
||||||
PacedSender::kNormalPriority));
|
|
||||||
|
|
||||||
int total_packets_sent = 0;
|
int total_packets_sent = 0;
|
||||||
EXPECT_EQ(total_packets_sent, transport_.packets_sent_);
|
EXPECT_EQ(total_packets_sent, transport_.packets_sent_);
|
||||||
@ -802,12 +804,9 @@ TEST_F(RtpSenderTest, SendPadding) {
|
|||||||
rtp_length = static_cast<size_t>(rtp_length_int);
|
rtp_length = static_cast<size_t>(rtp_length_int);
|
||||||
|
|
||||||
// Packet should be stored in a send bucket.
|
// Packet should be stored in a send bucket.
|
||||||
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_,
|
EXPECT_EQ(0, rtp_sender_->SendToNetwork(packet_, 0, rtp_length,
|
||||||
0,
|
capture_time_ms, kAllowRetransmission,
|
||||||
rtp_length,
|
RtpPacketSender::kNormalPriority));
|
||||||
capture_time_ms,
|
|
||||||
kAllowRetransmission,
|
|
||||||
PacedSender::kNormalPriority));
|
|
||||||
|
|
||||||
rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false);
|
rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false);
|
||||||
// Process send bucket.
|
// Process send bucket.
|
||||||
@ -836,8 +835,8 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
|
|||||||
rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
|
rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
|
||||||
// Make all packets go through the pacer.
|
// Make all packets go through the pacer.
|
||||||
EXPECT_CALL(mock_paced_sender_,
|
EXPECT_CALL(mock_paced_sender_,
|
||||||
SendPacket(PacedSender::kNormalPriority, _, _, _, _, _)).
|
SendPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
|
||||||
WillRepeatedly(testing::Return(false));
|
.WillRepeatedly(testing::Return(false));
|
||||||
|
|
||||||
uint16_t seq_num = kSeqNum;
|
uint16_t seq_num = kSeqNum;
|
||||||
rtp_sender_->SetStorePacketsStatus(true, 10);
|
rtp_sender_->SetStorePacketsStatus(true, 10);
|
||||||
|
@ -104,7 +104,7 @@ void RTPSenderVideo::SendVideoPacket(uint8_t* data_buffer,
|
|||||||
StorageType storage) {
|
StorageType storage) {
|
||||||
if (_rtpSender.SendToNetwork(data_buffer, payload_length, rtp_header_length,
|
if (_rtpSender.SendToNetwork(data_buffer, payload_length, rtp_header_length,
|
||||||
capture_time_ms, storage,
|
capture_time_ms, storage,
|
||||||
PacedSender::kNormalPriority) == 0) {
|
RtpPacketSender::kNormalPriority) == 0) {
|
||||||
_videoBitrate.Update(payload_length + rtp_header_length);
|
_videoBitrate.Update(payload_length + rtp_header_length);
|
||||||
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
||||||
"Video::PacketNormal", "timestamp", capture_timestamp,
|
"Video::PacketNormal", "timestamp", capture_timestamp,
|
||||||
@ -150,7 +150,7 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
|||||||
if (_rtpSender.SendToNetwork(
|
if (_rtpSender.SendToNetwork(
|
||||||
red_packet->data(), red_packet->length() - rtp_header_length,
|
red_packet->data(), red_packet->length() - rtp_header_length,
|
||||||
rtp_header_length, capture_time_ms, media_packet_storage,
|
rtp_header_length, capture_time_ms, media_packet_storage,
|
||||||
PacedSender::kNormalPriority) == 0) {
|
RtpPacketSender::kNormalPriority) == 0) {
|
||||||
_videoBitrate.Update(red_packet->length());
|
_videoBitrate.Update(red_packet->length());
|
||||||
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
||||||
"Video::PacketRed", "timestamp", capture_timestamp,
|
"Video::PacketRed", "timestamp", capture_timestamp,
|
||||||
@ -162,7 +162,7 @@ void RTPSenderVideo::SendVideoPacketAsRed(uint8_t* data_buffer,
|
|||||||
if (_rtpSender.SendToNetwork(
|
if (_rtpSender.SendToNetwork(
|
||||||
fec_packet->data(), fec_packet->length() - rtp_header_length,
|
fec_packet->data(), fec_packet->length() - rtp_header_length,
|
||||||
rtp_header_length, capture_time_ms, fec_storage,
|
rtp_header_length, capture_time_ms, fec_storage,
|
||||||
PacedSender::kNormalPriority) == 0) {
|
RtpPacketSender::kNormalPriority) == 0) {
|
||||||
_fecOverheadRate.Update(fec_packet->length());
|
_fecOverheadRate.Update(fec_packet->length());
|
||||||
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
||||||
"Video::PacketFec", "timestamp", capture_timestamp,
|
"Video::PacketFec", "timestamp", capture_timestamp,
|
||||||
@ -192,8 +192,8 @@ int32_t RTPSenderVideo::SendRTPIntraRequest() {
|
|||||||
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
|
||||||
"Video::IntraRequest", "seqnum",
|
"Video::IntraRequest", "seqnum",
|
||||||
_rtpSender.SequenceNumber());
|
_rtpSender.SequenceNumber());
|
||||||
return _rtpSender.SendToNetwork(
|
return _rtpSender.SendToNetwork(data, 0, length, -1, kDontStore,
|
||||||
data, 0, length, -1, kDontStore, PacedSender::kNormalPriority);
|
RtpPacketSender::kNormalPriority);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RTPSenderVideo::SetGenericFECStatus(const bool enable,
|
void RTPSenderVideo::SetGenericFECStatus(const bool enable,
|
||||||
|
@ -70,6 +70,7 @@ source_set("video") {
|
|||||||
"..:webrtc_common",
|
"..:webrtc_common",
|
||||||
"../common_video",
|
"../common_video",
|
||||||
"../modules/bitrate_controller",
|
"../modules/bitrate_controller",
|
||||||
|
"../modules/pacing",
|
||||||
"../modules/rtp_rtcp",
|
"../modules/rtp_rtcp",
|
||||||
"../modules/utility",
|
"../modules/utility",
|
||||||
"../modules/video_capture:video_capture_module",
|
"../modules/video_capture:video_capture_module",
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
'<(webrtc_root)/common.gyp:webrtc_common',
|
'<(webrtc_root)/common.gyp:webrtc_common',
|
||||||
'<(webrtc_root)/common_video/common_video.gyp:common_video',
|
'<(webrtc_root)/common_video/common_video.gyp:common_video',
|
||||||
'<(webrtc_root)/modules/modules.gyp:bitrate_controller',
|
'<(webrtc_root)/modules/modules.gyp:bitrate_controller',
|
||||||
|
'<(webrtc_root)/modules/modules.gyp:paced_sender',
|
||||||
'<(webrtc_root)/modules/modules.gyp:rtp_rtcp',
|
'<(webrtc_root)/modules/modules.gyp:rtp_rtcp',
|
||||||
'<(webrtc_root)/modules/modules.gyp:video_capture_module',
|
'<(webrtc_root)/modules/modules.gyp:video_capture_module',
|
||||||
'<(webrtc_root)/modules/modules.gyp:video_processing',
|
'<(webrtc_root)/modules/modules.gyp:video_processing',
|
||||||
|
@ -1138,8 +1138,8 @@ std::vector<RtpRtcp*> ViEChannel::CreateRtpRtcpModules(
|
|||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
||||||
RemoteBitrateEstimator* remote_bitrate_estimator,
|
RemoteBitrateEstimator* remote_bitrate_estimator,
|
||||||
PacedSender* paced_sender,
|
RtpPacketSender* paced_sender,
|
||||||
PacketRouter* packet_router,
|
TransportSequenceNumberAllocator* transport_sequence_number_allocator,
|
||||||
BitrateStatisticsObserver* send_bitrate_observer,
|
BitrateStatisticsObserver* send_bitrate_observer,
|
||||||
FrameCountObserver* send_frame_count_observer,
|
FrameCountObserver* send_frame_count_observer,
|
||||||
SendSideDelayObserver* send_side_delay_observer,
|
SendSideDelayObserver* send_side_delay_observer,
|
||||||
@ -1156,7 +1156,8 @@ std::vector<RtpRtcp*> ViEChannel::CreateRtpRtcpModules(
|
|||||||
configuration.rtcp_packet_type_counter_observer =
|
configuration.rtcp_packet_type_counter_observer =
|
||||||
rtcp_packet_type_counter_observer;
|
rtcp_packet_type_counter_observer;
|
||||||
configuration.paced_sender = paced_sender;
|
configuration.paced_sender = paced_sender;
|
||||||
configuration.packet_router = packet_router;
|
configuration.transport_sequence_number_allocator =
|
||||||
|
transport_sequence_number_allocator;
|
||||||
configuration.send_bitrate_observer = send_bitrate_observer;
|
configuration.send_bitrate_observer = send_bitrate_observer;
|
||||||
configuration.send_frame_count_observer = send_frame_count_observer;
|
configuration.send_frame_count_observer = send_frame_count_observer;
|
||||||
configuration.send_side_delay_observer = send_side_delay_observer;
|
configuration.send_side_delay_observer = send_side_delay_observer;
|
||||||
|
@ -298,8 +298,8 @@ class ViEChannel : public VCMFrameTypeCallback,
|
|||||||
RtcpRttStats* rtt_stats,
|
RtcpRttStats* rtt_stats,
|
||||||
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
RtcpPacketTypeCounterObserver* rtcp_packet_type_counter_observer,
|
||||||
RemoteBitrateEstimator* remote_bitrate_estimator,
|
RemoteBitrateEstimator* remote_bitrate_estimator,
|
||||||
PacedSender* paced_sender,
|
RtpPacketSender* paced_sender,
|
||||||
PacketRouter* packet_router,
|
TransportSequenceNumberAllocator* transport_sequence_number_allocator,
|
||||||
BitrateStatisticsObserver* send_bitrate_observer,
|
BitrateStatisticsObserver* send_bitrate_observer,
|
||||||
FrameCountObserver* send_frame_count_observer,
|
FrameCountObserver* send_frame_count_observer,
|
||||||
SendSideDelayObserver* send_side_delay_observer,
|
SendSideDelayObserver* send_side_delay_observer,
|
||||||
|
Reference in New Issue
Block a user