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

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: Respond to comments. 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 OverheadSizeObserver* overhead_size_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_bytes_per_packet_(0),
121 rtp_overhead_bytes_per_packet_(0),
122 retransmission_rate_limiter_(retransmission_rate_limiter),
123 overhead_size_observer_(overhead_size_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);
564
565 PacketOptions options; 568 PacketOptions options;
566 bool has_transport_seq_no = 569 bool has_transport_seq_no =
567 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id); 570 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id);
568
569 padding_packet.SetPadding(padding_bytes_in_packet, &random_); 571 padding_packet.SetPadding(padding_bytes_in_packet, &random_);
570 572
571 if (has_transport_seq_no && transport_feedback_observer_) 573 if (has_transport_seq_no) {
stefan-webrtc 2016/11/15 09:59:47 Could you please change seq_no to seq_num? Thanks
michaelt 2016/11/15 11:25:04 Done.
572 transport_feedback_observer_->AddPacket( 574 AddPacketToTransportFeedback(options.packet_id, &padding_packet,
573 options.packet_id, 575 probe_cluster_id);
574 padding_packet.payload_size() + padding_packet.padding_size(), 576 }
575 probe_cluster_id);
576 577
577 if (!SendPacketToNetwork(padding_packet, options)) 578 if (!SendPacketToNetwork(padding_packet, options))
578 break; 579 break;
579 580
580 bytes_sent += padding_bytes_in_packet; 581 bytes_sent += padding_bytes_in_packet;
581 UpdateRtpStats(padding_packet, over_rtx, false); 582 UpdateRtpStats(padding_packet, over_rtx, false);
582 } 583 }
583 584
584 return bytes_sent; 585 return bytes_sent;
585 } 586 }
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 packet_to_send = packet_rtx.get(); 729 packet_to_send = packet_rtx.get();
729 } 730 }
730 731
731 int64_t now_ms = clock_->TimeInMilliseconds(); 732 int64_t now_ms = clock_->TimeInMilliseconds();
732 int64_t diff_ms = now_ms - capture_time_ms; 733 int64_t diff_ms = now_ms - capture_time_ms;
733 packet_to_send->SetExtension<TransmissionOffset>(kTimestampTicksPerMs * 734 packet_to_send->SetExtension<TransmissionOffset>(kTimestampTicksPerMs *
734 diff_ms); 735 diff_ms);
735 packet_to_send->SetExtension<AbsoluteSendTime>(now_ms); 736 packet_to_send->SetExtension<AbsoluteSendTime>(now_ms);
736 737
737 PacketOptions options; 738 PacketOptions options;
738 if (UpdateTransportSequenceNumber(packet_to_send, &options.packet_id) && 739 if (UpdateTransportSequenceNumber(packet_to_send, &options.packet_id)) {
739 transport_feedback_observer_) { 740 AddPacketToTransportFeedback(options.packet_id, packet_to_send,
740 transport_feedback_observer_->AddPacket( 741 probe_cluster_id);
741 options.packet_id,
742 packet_to_send->payload_size() + packet_to_send->padding_size(),
743 probe_cluster_id);
744 } 742 }
745 743
746 if (!is_retransmit && !send_over_rtx) { 744 if (!is_retransmit && !send_over_rtx) {
747 UpdateDelayStatistics(packet->capture_time_ms(), now_ms); 745 UpdateDelayStatistics(packet->capture_time_ms(), now_ms);
748 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(), 746 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(),
749 packet->Ssrc()); 747 packet->Ssrc());
750 } 748 }
751 749
752 if (!SendPacketToNetwork(*packet_to_send, options)) 750 if (!SendPacketToNetwork(*packet_to_send, options))
753 return false; 751 return false;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 corrected_time_ms > last_capture_time_ms_sent_) { 849 corrected_time_ms > last_capture_time_ms_sent_) {
852 last_capture_time_ms_sent_ = corrected_time_ms; 850 last_capture_time_ms_sent_ = corrected_time_ms;
853 TRACE_EVENT_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 851 TRACE_EVENT_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
854 "PacedSend", corrected_time_ms, 852 "PacedSend", corrected_time_ms,
855 "capture_time_ms", corrected_time_ms); 853 "capture_time_ms", corrected_time_ms);
856 } 854 }
857 return true; 855 return true;
858 } 856 }
859 857
860 PacketOptions options; 858 PacketOptions options;
861 if (UpdateTransportSequenceNumber(packet.get(), &options.packet_id) && 859 if (UpdateTransportSequenceNumber(packet.get(), &options.packet_id)) {
862 transport_feedback_observer_) { 860 AddPacketToTransportFeedback(options.packet_id, packet.get(),
863 transport_feedback_observer_->AddPacket( 861 PacketInfo::kNotAProbe);
864 options.packet_id, packet->payload_size() + packet->padding_size(),
865 PacketInfo::kNotAProbe);
866 } 862 }
867 863
868 UpdateDelayStatistics(packet->capture_time_ms(), now_ms); 864 UpdateDelayStatistics(packet->capture_time_ms(), now_ms);
869 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(), 865 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(),
870 packet->Ssrc()); 866 packet->Ssrc());
871 867
872 bool sent = SendPacketToNetwork(*packet, options); 868 bool sent = SendPacketToNetwork(*packet, options);
873 869
874 if (sent) { 870 if (sent) {
875 { 871 {
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 RtpState RTPSender::GetRtxRtpState() const { 1233 RtpState RTPSender::GetRtxRtpState() const {
1238 rtc::CritScope lock(&send_critsect_); 1234 rtc::CritScope lock(&send_critsect_);
1239 1235
1240 RtpState state; 1236 RtpState state;
1241 state.sequence_number = sequence_number_rtx_; 1237 state.sequence_number = sequence_number_rtx_;
1242 state.start_timestamp = timestamp_offset_; 1238 state.start_timestamp = timestamp_offset_;
1243 1239
1244 return state; 1240 return state;
1245 } 1241 }
1246 1242
1243 void RTPSender::SetTransportOverhead(int transport_overhead) {
1244 rtc::CritScope lock(&send_critsect_);
1245 if (overhead_size_observer_ &&
1246 transport_overhead_bytes_per_packet_ !=
1247 static_cast<size_t>(transport_overhead)) {
1248 overhead_size_observer_->OnOverheadSizeChanged(
1249 rtp_overhead_bytes_per_packet_ + transport_overhead);
1250 }
1251 transport_overhead_bytes_per_packet_ = transport_overhead;
1252 }
1253
1254 void RTPSender::AddPacketToTransportFeedback(uint16_t packet_id,
1255 RtpPacketToSend* packet,
stefan-webrtc 2016/11/15 09:59:47 Should be possible to pass in a const RtpPacketToS
michaelt 2016/11/15 11:25:04 Right.
1256 int probe_cluster_id) {
1257 rtc::CritScope lock(&send_critsect_);
1258 if (transport_feedback_observer_) {
1259 transport_feedback_observer_->AddPacket(
1260 packet_id, packet->payload_size() + packet->padding_size(),
1261 probe_cluster_id);
1262 }
1263 if (overhead_size_observer_ &&
1264 rtp_overhead_bytes_per_packet_ != packet->headers_size()) {
stefan-webrtc 2016/11/15 09:59:47 Why do we report this only if we have transport se
michaelt 2016/11/15 11:25:04 I general you are right. Will decouple overhead_si
1265 overhead_size_observer_->OnOverheadSizeChanged(
stefan-webrtc 2016/11/15 09:59:47 We shouldn't hold the send_critsect_ when calling
michaelt 2016/11/15 11:25:04 Changed the impl. so that OnOverheadSizeChanged is
1266 packet->headers_size() + transport_overhead_bytes_per_packet_);
1267 }
1268 rtp_overhead_bytes_per_packet_ = packet->headers_size();
1269 }
1270
1247 } // namespace webrtc 1271 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.h ('k') | webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698