Plumbing of feedback on request setting
Bug: webrtc:10263 Change-Id: I23c09e680d6381598e4172b76025ff84f33aa4de Reviewed-on: https://webrtc-review.googlesource.com/c/121422 Reviewed-by: Sebastian Jansson <srte@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Stefan Holmer <stefan@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Commit-Queue: Johannes Kron <kron@webrtc.org> Cr-Commit-Position: refs/heads/master@{#26606}
This commit is contained in:
parent
5f6abcfbd2
commit
7ff164e6e1
@ -108,6 +108,8 @@ const int RtpExtension::kVideoRotationDefaultId = 4;
|
||||
|
||||
const char RtpExtension::kTransportSequenceNumberUri[] =
|
||||
"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01";
|
||||
const char RtpExtension::kTransportSequenceNumberV2Uri[] =
|
||||
"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-02";
|
||||
const int RtpExtension::kTransportSequenceNumberDefaultId = 5;
|
||||
|
||||
// This extension allows applications to adaptively limit the playout delay
|
||||
|
||||
@ -295,6 +295,7 @@ struct RtpExtension {
|
||||
// Header extension for transport sequence number, see url for details:
|
||||
// http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions
|
||||
static const char kTransportSequenceNumberUri[];
|
||||
static const char kTransportSequenceNumberV2Uri[];
|
||||
static const int kTransportSequenceNumberDefaultId;
|
||||
|
||||
static const char kPlayoutDelayUri[];
|
||||
|
||||
14
call/call.cc
14
call/call.cc
@ -68,13 +68,22 @@
|
||||
namespace webrtc {
|
||||
|
||||
namespace {
|
||||
bool SendFeedbackOnRequestOnly(const std::vector<RtpExtension>& extensions) {
|
||||
for (const auto& extension : extensions) {
|
||||
if (extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO(nisse): This really begs for a shared context struct.
|
||||
bool UseSendSideBwe(const std::vector<RtpExtension>& extensions,
|
||||
bool transport_cc) {
|
||||
if (!transport_cc)
|
||||
return false;
|
||||
for (const auto& extension : extensions) {
|
||||
if (extension.uri == RtpExtension::kTransportSequenceNumberUri)
|
||||
if (extension.uri == RtpExtension::kTransportSequenceNumberUri ||
|
||||
extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -862,6 +871,9 @@ webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream(
|
||||
TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream");
|
||||
RTC_DCHECK_CALLED_SEQUENTIALLY(&configuration_sequence_checker_);
|
||||
|
||||
receive_side_cc_.SetSendFeedbackOnRequestOnly(
|
||||
SendFeedbackOnRequestOnly(configuration.rtp.extensions));
|
||||
|
||||
RegisterRateObserver();
|
||||
|
||||
VideoReceiveStream* receive_stream = new VideoReceiveStream(
|
||||
|
||||
@ -38,6 +38,7 @@ class ReceiveSideCongestionController : public CallStatsObserver,
|
||||
size_t payload_size,
|
||||
const RTPHeader& header);
|
||||
|
||||
void SetSendFeedbackOnRequestOnly(bool send_feedback_on_request_only);
|
||||
// TODO(nisse): Delete these methods, design a more specific interface.
|
||||
virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator(bool send_side_bwe);
|
||||
virtual const RemoteBitrateEstimator* GetRemoteBitrateEstimator(
|
||||
|
||||
@ -139,6 +139,12 @@ void ReceiveSideCongestionController::OnReceivedPacket(
|
||||
}
|
||||
}
|
||||
|
||||
void ReceiveSideCongestionController::SetSendFeedbackOnRequestOnly(
|
||||
bool send_feedback_on_request_only) {
|
||||
remote_estimator_proxy_.SetSendFeedbackOnRequestOnly(
|
||||
send_feedback_on_request_only);
|
||||
}
|
||||
|
||||
RemoteBitrateEstimator*
|
||||
ReceiveSideCongestionController::GetRemoteBitrateEstimator(bool send_side_bwe) {
|
||||
if (send_side_bwe) {
|
||||
|
||||
@ -41,7 +41,8 @@ RemoteEstimatorProxy::RemoteEstimatorProxy(
|
||||
media_ssrc_(0),
|
||||
feedback_sequence_(0),
|
||||
window_start_seq_(-1),
|
||||
send_interval_ms_(kDefaultSendIntervalMs) {}
|
||||
send_interval_ms_(kDefaultSendIntervalMs),
|
||||
send_feedback_on_request_only_(false) {}
|
||||
|
||||
RemoteEstimatorProxy::~RemoteEstimatorProxy() {}
|
||||
|
||||
@ -110,6 +111,12 @@ void RemoteEstimatorProxy::OnBitrateChanged(int bitrate_bps) {
|
||||
rtc::SafeClamp(0.05 * bitrate_bps, kMinTwccRate, kMaxTwccRate));
|
||||
}
|
||||
|
||||
void RemoteEstimatorProxy::SetSendFeedbackOnRequestOnly(
|
||||
bool send_feedback_on_request_only) {
|
||||
rtc::CritScope cs(&lock_);
|
||||
send_feedback_on_request_only_ = send_feedback_on_request_only;
|
||||
}
|
||||
|
||||
void RemoteEstimatorProxy::OnPacketArrival(uint16_t sequence_number,
|
||||
int64_t arrival_time) {
|
||||
if (arrival_time < 0 || arrival_time > kMaxTimeMs) {
|
||||
|
||||
@ -47,6 +47,7 @@ class RemoteEstimatorProxy : public RemoteBitrateEstimator {
|
||||
int64_t TimeUntilNextProcess() override;
|
||||
void Process() override;
|
||||
void OnBitrateChanged(int bitrate);
|
||||
void SetSendFeedbackOnRequestOnly(bool send_feedback_on_request_only);
|
||||
|
||||
static const int kMinSendIntervalMs;
|
||||
static const int kMaxSendIntervalMs;
|
||||
@ -71,6 +72,7 @@ class RemoteEstimatorProxy : public RemoteBitrateEstimator {
|
||||
// Map unwrapped seq -> time.
|
||||
std::map<int64_t, int64_t> packet_arrival_times_ RTC_GUARDED_BY(&lock_);
|
||||
int64_t send_interval_ms_ RTC_GUARDED_BY(&lock_);
|
||||
bool send_feedback_on_request_only_ RTC_GUARDED_BY(&lock_);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user