Index: webrtc/video/rtp_stream_receiver.cc |
diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc |
index 6421190e9812c0d26fa6868003d13e115f442075..fe8f7a129d9c67504426226167d17d1669738a0d 100644 |
--- a/webrtc/video/rtp_stream_receiver.cc |
+++ b/webrtc/video/rtp_stream_receiver.cc |
@@ -13,6 +13,7 @@ |
#include <vector> |
#include "webrtc/base/logging.h" |
+#include "webrtc/common_types.h" |
#include "webrtc/config.h" |
#include "webrtc/modules/pacing/packet_router.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h" |
@@ -64,7 +65,6 @@ std::unique_ptr<RtpRtcp> CreateRtpRtcpModule( |
return rtp_rtcp; |
} |
- |
static const int kPacketLogIntervalMs = 10000; |
RtpStreamReceiver::RtpStreamReceiver( |
@@ -73,7 +73,11 @@ RtpStreamReceiver::RtpStreamReceiver( |
Transport* transport, |
RtcpRttStats* rtt_stats, |
PacedSender* paced_sender, |
- PacketRouter* packet_router) |
+ PacketRouter* packet_router, |
+ const VideoReceiveStream::Config& config, |
+ StreamDataCountersCallback* stream_data_counters_callback, |
+ RtcpStatisticsCallback* rtcp_statistics_callback, |
+ RtcpPacketTypeCounterObserver* rtcp_counter_observer) |
: clock_(Clock::GetRealTimeClock()), |
video_receiver_(video_receiver), |
remote_bitrate_estimator_(remote_bitrate_estimator), |
@@ -93,12 +97,30 @@ RtpStreamReceiver::RtpStreamReceiver( |
rtp_rtcp_(CreateRtpRtcpModule(rtp_receive_statistics_.get(), |
transport, |
rtt_stats, |
- &rtcp_packet_type_counter_observer_, |
+ rtcp_counter_observer, |
remote_bitrate_estimator_, |
paced_sender, |
packet_router)) { |
packet_router_->AddRtpModule(rtp_rtcp_.get()); |
+ rtp_receive_statistics_->RegisterRtpStatisticsCallback( |
+ stream_data_counters_callback); |
+ rtp_receive_statistics_->RegisterRtcpStatisticsCallback( |
+ rtcp_statistics_callback); |
+ |
+ RTC_DCHECK(config.rtp.rtcp_mode != RtcpMode::kOff) |
+ << "A stream should not be configured with RTCP disabled. This value is " |
+ "reserved for internal usage."; |
+ rtp_rtcp_->SetRTCPStatus(config.rtp.rtcp_mode); |
rtp_rtcp_->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp); |
+ |
+ static const int kMaxPacketAgeToNack = 450; |
+ NACKMethod nack_method = |
+ config.rtp.nack.rtp_history_ms > 0 ? kNackRtcp : kNackOff; |
+ const int max_reordering_threshold = (nack_method == kNackRtcp) |
+ ? kMaxPacketAgeToNack : kDefaultMaxReorderingThreshold; |
+ rtp_receiver_->SetNACKStatus(nack_method); |
+ rtp_receive_statistics_->SetMaxReorderingThreshold(max_reordering_threshold); |
+ rtp_rtcp_->SetGenericFECStatus(false, 0, 0); |
} |
RtpStreamReceiver::~RtpStreamReceiver() { |
@@ -134,18 +156,6 @@ bool RtpStreamReceiver::SetReceiveCodec(const VideoCodec& video_codec) { |
0, 0) == 0; |
} |
-void RtpStreamReceiver::SetNackStatus(bool enable, |
- int max_nack_reordering_threshold) { |
- if (!enable) { |
- // Reset the threshold back to the lower default threshold when NACK is |
- // disabled since we no longer will be receiving retransmissions. |
- max_nack_reordering_threshold = kDefaultMaxReorderingThreshold; |
- } |
- rtp_receive_statistics_->SetMaxReorderingThreshold( |
- max_nack_reordering_threshold); |
- rtp_receiver_->SetNACKStatus(enable ? kNackRtcp : kNackOff); |
-} |
- |
void RtpStreamReceiver::SetRtxPayloadType(int payload_type, |
int associated_payload_type) { |
rtp_payload_registry_.SetRtxPayloadType(payload_type, |
@@ -187,12 +197,6 @@ void RtpStreamReceiver::EnableReceiveRtpHeaderExtension( |
StringToRtpExtensionType(extension), id)); |
} |
-void RtpStreamReceiver::RegisterRtcpPacketTypeCounterObserver( |
- RtcpPacketTypeCounterObserver* observer) { |
- rtcp_packet_type_counter_observer_.Set(observer); |
-} |
- |
- |
int32_t RtpStreamReceiver::OnReceivedPayloadData( |
const uint8_t* payload_data, |
const size_t payload_size, |
@@ -293,6 +297,21 @@ bool RtpStreamReceiver::DeliverRtp(const uint8_t* rtp_packet, |
return ret; |
} |
+int32_t RtpStreamReceiver::RequestKeyFrame() { |
+ return rtp_rtcp_->RequestKeyFrame(); |
+} |
+ |
+int32_t RtpStreamReceiver::SliceLossIndicationRequest( |
+ const uint64_t picture_id) { |
+ return rtp_rtcp_->SendRTCPSliceLossIndication( |
+ static_cast<uint8_t>(picture_id)); |
+} |
+ |
+int32_t RtpStreamReceiver::ResendPackets(const uint16_t* sequence_numbers, |
+ uint16_t length) { |
+ return rtp_rtcp_->SendNACK(sequence_numbers, length); |
+} |
+ |
bool RtpStreamReceiver::ReceivePacket(const uint8_t* packet, |
size_t packet_length, |
const RTPHeader& header, |