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

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: Rename RtpOverheadSizeChanged to UpdateRtpOverheadSize. 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_num =
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_num) {
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 if (!PrepareAndSendPacket(std::move(packet), rtx, true, 624 if (!PrepareAndSendPacket(std::move(packet), rtx, true,
624 PacketInfo::kNotAProbe)) 625 PacketInfo::kNotAProbe))
625 return -1; 626 return -1;
626 return packet_size; 627 return packet_size;
627 } 628 }
628 629
629 bool RTPSender::SendPacketToNetwork(const RtpPacketToSend& packet, 630 bool RTPSender::SendPacketToNetwork(const RtpPacketToSend& packet,
630 const PacketOptions& options) { 631 const PacketOptions& options) {
631 int bytes_sent = -1; 632 int bytes_sent = -1;
632 if (transport_) { 633 if (transport_) {
634 UpdateRtpOverheadSize(packet);
633 bytes_sent = transport_->SendRtp(packet.data(), packet.size(), options) 635 bytes_sent = transport_->SendRtp(packet.data(), packet.size(), options)
634 ? static_cast<int>(packet.size()) 636 ? static_cast<int>(packet.size())
635 : -1; 637 : -1;
636 if (event_log_ && bytes_sent > 0) { 638 if (event_log_ && bytes_sent > 0) {
637 event_log_->LogRtpHeader(kOutgoingPacket, MediaType::ANY, packet.data(), 639 event_log_->LogRtpHeader(kOutgoingPacket, MediaType::ANY, packet.data(),
638 packet.size()); 640 packet.size());
639 } 641 }
640 } 642 }
641 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 643 TRACE_EVENT_INSTANT2(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
642 "RTPSender::SendPacketToNetwork", "size", packet.size(), 644 "RTPSender::SendPacketToNetwork", "size", packet.size(),
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 packet_to_send = packet_rtx.get(); 730 packet_to_send = packet_rtx.get();
729 } 731 }
730 732
731 int64_t now_ms = clock_->TimeInMilliseconds(); 733 int64_t now_ms = clock_->TimeInMilliseconds();
732 int64_t diff_ms = now_ms - capture_time_ms; 734 int64_t diff_ms = now_ms - capture_time_ms;
733 packet_to_send->SetExtension<TransmissionOffset>(kTimestampTicksPerMs * 735 packet_to_send->SetExtension<TransmissionOffset>(kTimestampTicksPerMs *
734 diff_ms); 736 diff_ms);
735 packet_to_send->SetExtension<AbsoluteSendTime>(now_ms); 737 packet_to_send->SetExtension<AbsoluteSendTime>(now_ms);
736 738
737 PacketOptions options; 739 PacketOptions options;
738 if (UpdateTransportSequenceNumber(packet_to_send, &options.packet_id) && 740 if (UpdateTransportSequenceNumber(packet_to_send, &options.packet_id)) {
739 transport_feedback_observer_) { 741 AddPacketToTransportFeedback(options.packet_id, *packet_to_send,
740 transport_feedback_observer_->AddPacket( 742 probe_cluster_id);
741 options.packet_id,
742 packet_to_send->payload_size() + packet_to_send->padding_size(),
743 probe_cluster_id);
744 } 743 }
745 744
746 if (!is_retransmit && !send_over_rtx) { 745 if (!is_retransmit && !send_over_rtx) {
747 UpdateDelayStatistics(packet->capture_time_ms(), now_ms); 746 UpdateDelayStatistics(packet->capture_time_ms(), now_ms);
748 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(), 747 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(),
749 packet->Ssrc()); 748 packet->Ssrc());
750 } 749 }
751 750
752 if (!SendPacketToNetwork(*packet_to_send, options)) 751 if (!SendPacketToNetwork(*packet_to_send, options))
753 return false; 752 return false;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 corrected_time_ms > last_capture_time_ms_sent_) { 850 corrected_time_ms > last_capture_time_ms_sent_) {
852 last_capture_time_ms_sent_ = corrected_time_ms; 851 last_capture_time_ms_sent_ = corrected_time_ms;
853 TRACE_EVENT_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"), 852 TRACE_EVENT_ASYNC_BEGIN1(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
854 "PacedSend", corrected_time_ms, 853 "PacedSend", corrected_time_ms,
855 "capture_time_ms", corrected_time_ms); 854 "capture_time_ms", corrected_time_ms);
856 } 855 }
857 return true; 856 return true;
858 } 857 }
859 858
860 PacketOptions options; 859 PacketOptions options;
861 if (UpdateTransportSequenceNumber(packet.get(), &options.packet_id) && 860 if (UpdateTransportSequenceNumber(packet.get(), &options.packet_id)) {
862 transport_feedback_observer_) { 861 AddPacketToTransportFeedback(options.packet_id, *packet.get(),
863 transport_feedback_observer_->AddPacket( 862 PacketInfo::kNotAProbe);
864 options.packet_id, packet->payload_size() + packet->padding_size(),
865 PacketInfo::kNotAProbe);
866 } 863 }
867 864
868 UpdateDelayStatistics(packet->capture_time_ms(), now_ms); 865 UpdateDelayStatistics(packet->capture_time_ms(), now_ms);
869 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(), 866 UpdateOnSendPacket(options.packet_id, packet->capture_time_ms(),
870 packet->Ssrc()); 867 packet->Ssrc());
871 868
872 bool sent = SendPacketToNetwork(*packet, options); 869 bool sent = SendPacketToNetwork(*packet, options);
873 870
874 if (sent) { 871 if (sent) {
875 { 872 {
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 RtpState RTPSender::GetRtxRtpState() const { 1230 RtpState RTPSender::GetRtxRtpState() const {
1234 rtc::CritScope lock(&send_critsect_); 1231 rtc::CritScope lock(&send_critsect_);
1235 1232
1236 RtpState state; 1233 RtpState state;
1237 state.sequence_number = sequence_number_rtx_; 1234 state.sequence_number = sequence_number_rtx_;
1238 state.start_timestamp = timestamp_offset_; 1235 state.start_timestamp = timestamp_offset_;
1239 1236
1240 return state; 1237 return state;
1241 } 1238 }
1242 1239
1240 void RTPSender::SetTransportOverhead(int transport_overhead) {
minyue-webrtc 2016/11/16 08:48:59 how about void RTPSender::SetTransportOverheadSiz
michaelt 2016/11/16 09:27:09 SetTransportOverheadSize is used in all the rest o
minyue-webrtc 2016/11/16 12:39:52 I see. After rethinking, I think overhead has a se
michaelt 2016/11/16 13:29:37 Done
minyue-webrtc 2016/11/16 15:13:38 Have you uploaded new patch set?
michaelt 2016/11/17 08:25:53 Now yes :)
1241 if (!overhead_size_observer_)
1242 return;
1243 int overhead_bytes_per_packet = 0;
1244 {
1245 rtc::CritScope lock(&send_critsect_);
1246 if (rtp_overhead_bytes_per_packet_ ==
minyue-webrtc 2016/11/16 08:48:59 transport_overhead_bytes_per_packet_?
michaelt 2016/11/16 09:27:09 Oops. I may should write a unit test for this :)
minyue-webrtc 2016/11/16 12:39:52 no need for unittest (too many of these may possib
michaelt 2016/11/16 13:29:37 I already added a test for this. Should I remove i
minyue-webrtc 2016/11/16 15:13:38 Ok. I missed it, can take a look now. I think the
1247 static_cast<size_t>(transport_overhead)) {
1248 return;
1249 }
1250 transport_overhead_bytes_per_packet_ = transport_overhead;
1251 overhead_bytes_per_packet =
1252 rtp_overhead_bytes_per_packet_ + transport_overhead_bytes_per_packet_;
1253 }
1254 overhead_size_observer_->OnOverheadSizeChanged(overhead_bytes_per_packet);
1255 }
1256
1257 void RTPSender::AddPacketToTransportFeedback(uint16_t packet_id,
minyue-webrtc 2016/11/16 08:48:59 To me, this help function does not bring much more
michaelt 2016/11/16 09:27:09 To me the helper function brings a bit more value
minyue-webrtc 2016/11/16 12:39:52 Acknowledged.
1258 const RtpPacketToSend& packet,
1259 int probe_cluster_id) {
1260 if (transport_feedback_observer_) {
1261 transport_feedback_observer_->AddPacket(
1262 packet_id, packet.payload_size() + packet.padding_size(),
1263 probe_cluster_id);
1264 }
1265 }
1266
1267 void RTPSender::UpdateRtpOverheadSize(const RtpPacketToSend& packet) {
1268 if (!overhead_size_observer_)
1269 return;
1270 int overhead_bytes_per_packet = 0;
1271 {
1272 rtc::CritScope lock(&send_critsect_);
1273 if (rtp_overhead_bytes_per_packet_ == packet.headers_size()) {
1274 return;
1275 }
1276 rtp_overhead_bytes_per_packet_ = packet.headers_size();
1277 overhead_bytes_per_packet =
1278 rtp_overhead_bytes_per_packet_ + transport_overhead_bytes_per_packet_;
1279 }
1280 overhead_size_observer_->OnOverheadSizeChanged(overhead_bytes_per_packet);
1281 }
1282
1243 } // namespace webrtc 1283 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698