Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(558)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender.cc

Issue 2495553002: Add overhead per packet observer to the rtp_sender. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 Transport* transport, 68 Transport* transport,
69 RtpPacketSender* paced_sender, 69 RtpPacketSender* paced_sender,
70 FlexfecSender* flexfec_sender, 70 FlexfecSender* flexfec_sender,
71 TransportSequenceNumberAllocator* sequence_number_allocator, 71 TransportSequenceNumberAllocator* sequence_number_allocator,
72 TransportFeedbackObserver* transport_feedback_observer, 72 TransportFeedbackObserver* transport_feedback_observer,
73 BitrateStatisticsObserver* bitrate_callback, 73 BitrateStatisticsObserver* bitrate_callback,
74 FrameCountObserver* frame_count_observer, 74 FrameCountObserver* frame_count_observer,
75 SendSideDelayObserver* send_side_delay_observer, 75 SendSideDelayObserver* send_side_delay_observer,
76 RtcEventLog* event_log, 76 RtcEventLog* event_log,
77 SendPacketObserver* send_packet_observer, 77 SendPacketObserver* send_packet_observer,
78 RateLimiter* retransmission_rate_limiter) 78 RateLimiter* retransmission_rate_limiter,
79 OverheadPerPacketObserver* const overhead_per_packet_observer)
79 : clock_(clock), 80 : clock_(clock),
80 // TODO(holmer): Remove this conversion? 81 // TODO(holmer): Remove this conversion?
81 clock_delta_ms_(clock_->TimeInMilliseconds() - rtc::TimeMillis()), 82 clock_delta_ms_(clock_->TimeInMilliseconds() - rtc::TimeMillis()),
82 random_(clock_->TimeInMicroseconds()), 83 random_(clock_->TimeInMicroseconds()),
83 audio_configured_(audio), 84 audio_configured_(audio),
84 audio_(audio ? new RTPSenderAudio(clock, this) : nullptr), 85 audio_(audio ? new RTPSenderAudio(clock, this) : nullptr),
85 video_(audio ? nullptr : new RTPSenderVideo(clock, this, flexfec_sender)), 86 video_(audio ? nullptr : new RTPSenderVideo(clock, this, flexfec_sender)),
86 paced_sender_(paced_sender), 87 paced_sender_(paced_sender),
87 transport_sequence_number_allocator_(sequence_number_allocator), 88 transport_sequence_number_allocator_(sequence_number_allocator),
88 transport_feedback_observer_(transport_feedback_observer), 89 transport_feedback_observer_(transport_feedback_observer),
(...skipping 20 matching lines...) Expand all
109 remote_ssrc_(0), 110 remote_ssrc_(0),
110 sequence_number_forced_(false), 111 sequence_number_forced_(false),
111 ssrc_forced_(false), 112 ssrc_forced_(false),
112 last_rtp_timestamp_(0), 113 last_rtp_timestamp_(0),
113 capture_time_ms_(0), 114 capture_time_ms_(0),
114 last_timestamp_time_ms_(0), 115 last_timestamp_time_ms_(0),
115 media_has_been_sent_(false), 116 media_has_been_sent_(false),
116 last_packet_marker_bit_(false), 117 last_packet_marker_bit_(false),
117 csrcs_(), 118 csrcs_(),
118 rtx_(kRtxOff), 119 rtx_(kRtxOff),
119 retransmission_rate_limiter_(retransmission_rate_limiter) { 120 transport_overhead_per_packet_(0),
121 rtp_overhead_per_packet_(0),
122 retransmission_rate_limiter_(retransmission_rate_limiter),
123 overhead_per_packet_observer_(overhead_per_packet_observer) {
120 ssrc_ = ssrc_db_->CreateSSRC(); 124 ssrc_ = ssrc_db_->CreateSSRC();
121 RTC_DCHECK(ssrc_ != 0); 125 RTC_DCHECK(ssrc_ != 0);
122 ssrc_rtx_ = ssrc_db_->CreateSSRC(); 126 ssrc_rtx_ = ssrc_db_->CreateSSRC();
123 RTC_DCHECK(ssrc_rtx_ != 0); 127 RTC_DCHECK(ssrc_rtx_ != 0);
124 128
125 // This random initialization is not intended to be cryptographic strong. 129 // This random initialization is not intended to be cryptographic strong.
126 timestamp_offset_ = random_.Rand<uint32_t>(); 130 timestamp_offset_ = random_.Rand<uint32_t>();
127 // Random start, 16 bits. Can't be 0. 131 // Random start, 16 bits. Can't be 0.
128 sequence_number_rtx_ = random_.Rand(1, kMaxInitRtpSeqNumber); 132 sequence_number_rtx_ = random_.Rand(1, kMaxInitRtpSeqNumber);
129 sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber); 133 sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber);
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 padding_packet.SetTimestamp(timestamp); 558 padding_packet.SetTimestamp(timestamp);
555 padding_packet.SetSsrc(ssrc); 559 padding_packet.SetSsrc(ssrc);
556 560
557 int64_t now_ms = clock_->TimeInMilliseconds(); 561 int64_t now_ms = clock_->TimeInMilliseconds();
558 562
559 if (capture_time_ms > 0) { 563 if (capture_time_ms > 0) {
560 padding_packet.SetExtension<TransmissionOffset>( 564 padding_packet.SetExtension<TransmissionOffset>(
561 kTimestampTicksPerMs * (now_ms - capture_time_ms)); 565 kTimestampTicksPerMs * (now_ms - capture_time_ms));
562 } 566 }
563 padding_packet.SetExtension<AbsoluteSendTime>(now_ms); 567 padding_packet.SetExtension<AbsoluteSendTime>(now_ms);
568 padding_packet.SetPadding(padding_bytes_in_packet, &random_);
564 569
565 PacketOptions options; 570 PacketOptions options;
566 bool has_transport_seq_no = 571 AddPacketToTransportFeedback(&options, &padding_packet, probe_cluster_id);
567 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id);
568
569 padding_packet.SetPadding(padding_bytes_in_packet, &random_);
570
571 if (has_transport_seq_no && transport_feedback_observer_)
572 transport_feedback_observer_->AddPacket(
573 options.packet_id,
574 padding_packet.payload_size() + padding_packet.padding_size(),
575 probe_cluster_id);
576 572
577 if (!SendPacketToNetwork(padding_packet, options)) 573 if (!SendPacketToNetwork(padding_packet, options))
578 break; 574 break;
579 575
580 bytes_sent += padding_bytes_in_packet; 576 bytes_sent += padding_bytes_in_packet;
581 UpdateRtpStats(padding_packet, over_rtx, false); 577 UpdateRtpStats(padding_packet, over_rtx, false);
582 } 578 }
583 579
584 return bytes_sent; 580 return bytes_sent;
585 } 581 }
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 packet_to_send = packet_rtx.get(); 724 packet_to_send = packet_rtx.get();
729 } 725 }
730 726
731 int64_t now_ms = clock_->TimeInMilliseconds(); 727 int64_t now_ms = clock_->TimeInMilliseconds();
732 int64_t diff_ms = now_ms - capture_time_ms; 728 int64_t diff_ms = now_ms - capture_time_ms;
733 packet_to_send->SetExtension<TransmissionOffset>(kTimestampTicksPerMs * 729 packet_to_send->SetExtension<TransmissionOffset>(kTimestampTicksPerMs *
734 diff_ms); 730 diff_ms);
735 packet_to_send->SetExtension<AbsoluteSendTime>(now_ms); 731 packet_to_send->SetExtension<AbsoluteSendTime>(now_ms);
736 732
737 PacketOptions options; 733 PacketOptions options;
738 if (UpdateTransportSequenceNumber(packet_to_send, &options.packet_id) && 734 AddPacketToTransportFeedback(&options, packet_to_send, probe_cluster_id);
739 transport_feedback_observer_) {
740 transport_feedback_observer_->AddPacket(
741 options.packet_id,
742 packet_to_send->payload_size() + packet_to_send->padding_size(),
743 probe_cluster_id);
744 }
745 735
746 if (!is_retransmit && !send_over_rtx) { 736 if (!is_retransmit && !send_over_rtx) {
747 UpdateDelayStatistics(packet->capture_time_ms(), now_ms); 737 UpdateDelayStatistics(packet->capture_time_ms(), now_ms);
748 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(), 738 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(),
749 packet->Ssrc()); 739 packet->Ssrc());
750 } 740 }
751 741
752 if (!SendPacketToNetwork(*packet_to_send, options)) 742 if (!SendPacketToNetwork(*packet_to_send, options))
753 return false; 743 return false;
754 744
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 corrected_time_ms > last_capture_time_ms_sent_) { 841 corrected_time_ms > last_capture_time_ms_sent_) {
852 last_capture_time_ms_sent_ = corrected_time_ms; 842 last_capture_time_ms_sent_ = corrected_time_ms;
853 TRACE_EVENT_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 843 TRACE_EVENT_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
854 "PacedSend", corrected_time_ms, 844 "PacedSend", corrected_time_ms,
855 "capture_time_ms", corrected_time_ms); 845 "capture_time_ms", corrected_time_ms);
856 } 846 }
857 return true; 847 return true;
858 } 848 }
859 849
860 PacketOptions options; 850 PacketOptions options;
861 if (UpdateTransportSequenceNumber(packet.get(), &options.packet_id) && 851 AddPacketToTransportFeedback(&options, packet.get(), PacketInfo::kNotAProbe);
862 transport_feedback_observer_) {
863 transport_feedback_observer_->AddPacket(
864 options.packet_id, packet->payload_size() + packet->padding_size(),
865 PacketInfo::kNotAProbe);
866 }
867 852
868 UpdateDelayStatistics(packet->capture_time_ms(), now_ms); 853 UpdateDelayStatistics(packet->capture_time_ms(), now_ms);
869 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(), 854 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(),
870 packet->Ssrc()); 855 packet->Ssrc());
871 856
872 bool sent = SendPacketToNetwork(*packet, options); 857 bool sent = SendPacketToNetwork(*packet, options);
873 858
874 if (sent) { 859 if (sent) {
875 { 860 {
876 rtc::CritScope lock(&send_critsect_); 861 rtc::CritScope lock(&send_critsect_);
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 RtpState RTPSender::GetRtxRtpState() const { 1222 RtpState RTPSender::GetRtxRtpState() const {
1238 rtc::CritScope lock(&send_critsect_); 1223 rtc::CritScope lock(&send_critsect_);
1239 1224
1240 RtpState state; 1225 RtpState state;
1241 state.sequence_number = sequence_number_rtx_; 1226 state.sequence_number = sequence_number_rtx_;
1242 state.start_timestamp = timestamp_offset_; 1227 state.start_timestamp = timestamp_offset_;
1243 1228
1244 return state; 1229 return state;
1245 } 1230 }
1246 1231
1232 void RTPSender::SetTransportOverhead(int transport_overhead) {
1233 rtc::CritScope lock(&send_critsect_);
1234 if (overhead_per_packet_observer_ &&
1235 transport_overhead_per_packet_ != transport_overhead) {
1236 overhead_per_packet_observer_->OnOverheadPerPacketChange(
1237 rtp_overhead_per_packet_ + transport_overhead);
1238 }
1239 transport_overhead_per_packet_ = transport_overhead;
1240 }
1241
1242 void RTPSender::AddPacketToTransportFeedback(PacketOptions* options,
1243 RtpPacketToSend* packet,
1244 int probe_cluster_id) {
1245 rtc::CritScope lock(&send_critsect_);
1246 if (UpdateTransportSequenceNumber(packet, &options->packet_id) &&
1247 transport_feedback_observer_) {
1248 transport_feedback_observer_->AddPacket(
1249 options->packet_id, packet->payload_size() + packet->padding_size(),
1250 probe_cluster_id);
1251 }
1252 if (overhead_per_packet_observer_ &&
1253 rtp_overhead_per_packet_ != packet->headers_size()) {
1254 overhead_per_packet_observer_->OnOverheadPerPacketChange(
1255 packet->headers_size() + transport_overhead_per_packet_);
1256 }
1257 rtp_overhead_per_packet_ = packet->headers_size();
1258 }
1259
1247 } // namespace webrtc 1260 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698