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

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

Issue 2766323006: Correcting the amount of padding when send side bwe includes RTP overhead.
Patch Set: fixing Created 3 years, 8 months 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
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet_history_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 rtc::CritScope lock(&send_critsect_); 448 rtc::CritScope lock(&send_critsect_);
449 if (!sending_media_) 449 if (!sending_media_)
450 return 0; 450 return 0;
451 if ((rtx_ & kRtxRedundantPayloads) == 0) 451 if ((rtx_ & kRtxRedundantPayloads) == 0)
452 return 0; 452 return 0;
453 } 453 }
454 454
455 int bytes_left = static_cast<int>(bytes_to_send); 455 int bytes_left = static_cast<int>(bytes_to_send);
456 while (bytes_left > 0) { 456 while (bytes_left > 0) {
457 std::unique_ptr<RtpPacketToSend> packet = 457 std::unique_ptr<RtpPacketToSend> packet =
458 packet_history_.GetBestFittingPacket(bytes_left); 458 packet_history_.GetBestFittingPacket(bytes_left,
459 send_side_bwe_with_overhead_);
459 if (!packet) 460 if (!packet)
460 break; 461 break;
461 size_t payload_size = packet->payload_size(); 462 // When WebRTC-SendSideBwe-WithOverhead is enabled, the padding budget
463 // includes overhead.
464 const size_t used_bytes =
465 send_side_bwe_with_overhead_
466 ? packet->size()
467 : packet->payload_size() - packet->headers_size();
michaelt 2017/03/29 14:45:21 Why "payload_size - headers_size", i don't underst
minyue-webrtc 2017/03/29 18:52:33 neither do I understand it :) will fix. Thanks.
462 if (!PrepareAndSendPacket(std::move(packet), true, false, pacing_info)) 468 if (!PrepareAndSendPacket(std::move(packet), true, false, pacing_info))
463 break; 469 break;
464 bytes_left -= payload_size; 470 bytes_left -= used_bytes;
465 } 471 }
466 return bytes_to_send - bytes_left; 472 return bytes_to_send - bytes_left;
467 } 473 }
468 474
469 size_t RTPSender::SendPadData(size_t bytes, 475 size_t RTPSender::SendPadData(size_t bytes,
470 const PacedPacketInfo& pacing_info) { 476 const PacedPacketInfo& pacing_info) {
471 size_t padding_bytes_in_packet; 477 // Always send full padding packets. This is accounted for by the
478 // RtpPacketSender, which will make sure we don't send too much padding even
479 // if a single packet is larger than requested.
480 // We do this to avoid frequently sending small packets on higher bitrates.
481 size_t padding_bytes_in_packet =
482 std::min(MaxPayloadSize(), kMaxPaddingLength);
483
472 if (audio_configured_) { 484 if (audio_configured_) {
473 // Allow smaller padding packets for audio. 485 // Allow smaller padding packets for audio.
486
487 // When WebRTC-SendSideBwe-WithOverhead is enabled, the padding budget
488 // includes overhead.
489 const size_t padding_bytes_if_one_packet =
490 send_side_bwe_with_overhead_ ? bytes - RtpHeaderLength() : bytes;
474 padding_bytes_in_packet = 491 padding_bytes_in_packet =
475 std::min(std::max(bytes, kMinAudioPaddingLength), MaxPayloadSize()); 492 std::min(padding_bytes_in_packet,
476 if (padding_bytes_in_packet > kMaxPaddingLength) 493 std::max(padding_bytes_if_one_packet, kMinAudioPaddingLength));
477 padding_bytes_in_packet = kMaxPaddingLength;
478 } else {
479 // Always send full padding packets. This is accounted for by the
480 // RtpPacketSender, which will make sure we don't send too much padding even
481 // if a single packet is larger than requested.
482 // We do this to avoid frequently sending small packets on higher bitrates.
483 padding_bytes_in_packet = std::min(MaxPayloadSize(), kMaxPaddingLength);
484 } 494 }
495
485 size_t bytes_sent = 0; 496 size_t bytes_sent = 0;
486 while (bytes_sent < bytes) { 497 while (bytes_sent < bytes) {
michaelt 2017/03/29 14:45:21 if we define packet size before the loop. Will not
minyue-webrtc 2017/03/29 18:52:33 I have not looked into this. will do
danilchap 2017/03/30 11:58:08 Might not be important (for same reason padding mi
stefan-webrtc 2017/03/30 12:09:03 This is exactly why we do it this way. We want to
487 int64_t now_ms = clock_->TimeInMilliseconds(); 498 int64_t now_ms = clock_->TimeInMilliseconds();
488 uint32_t ssrc; 499 uint32_t ssrc;
489 uint32_t timestamp; 500 uint32_t timestamp;
490 int64_t capture_time_ms; 501 int64_t capture_time_ms;
491 uint16_t sequence_number; 502 uint16_t sequence_number;
492 int payload_type; 503 int payload_type;
493 bool over_rtx; 504 bool over_rtx;
494 { 505 {
495 rtc::CritScope lock(&send_critsect_); 506 rtc::CritScope lock(&send_critsect_);
496 if (!sending_media_) 507 if (!sending_media_)
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 padding_packet.SetSsrc(ssrc); 570 padding_packet.SetSsrc(ssrc);
560 571
561 if (capture_time_ms > 0) { 572 if (capture_time_ms > 0) {
562 padding_packet.SetExtension<TransmissionOffset>( 573 padding_packet.SetExtension<TransmissionOffset>(
563 (now_ms - capture_time_ms) * kTimestampTicksPerMs); 574 (now_ms - capture_time_ms) * kTimestampTicksPerMs);
564 } 575 }
565 padding_packet.SetExtension<AbsoluteSendTime>(now_ms); 576 padding_packet.SetExtension<AbsoluteSendTime>(now_ms);
566 PacketOptions options; 577 PacketOptions options;
567 bool has_transport_seq_num = 578 bool has_transport_seq_num =
568 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id); 579 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id);
580
569 padding_packet.SetPadding(padding_bytes_in_packet, &random_); 581 padding_packet.SetPadding(padding_bytes_in_packet, &random_);
570 582
571 if (has_transport_seq_num) { 583 if (has_transport_seq_num) {
572 AddPacketToTransportFeedback(options.packet_id, padding_packet, 584 AddPacketToTransportFeedback(options.packet_id, padding_packet,
573 pacing_info); 585 pacing_info);
574 } 586 }
575 587
576 if (!SendPacketToNetwork(padding_packet, options, pacing_info)) 588 if (!SendPacketToNetwork(padding_packet, options, pacing_info))
577 break; 589 break;
578 590
579 bytes_sent += padding_bytes_in_packet; 591 // When WebRTC-SendSideBwe-WithOverhead is enabled, the padding budget
592 // includes overhead.
593 bytes_sent += send_side_bwe_with_overhead_ ? padding_packet.padding_size()
594 : padding_packet.size();
580 UpdateRtpStats(padding_packet, over_rtx, false); 595 UpdateRtpStats(padding_packet, over_rtx, false);
581 } 596 }
582 597
583 return bytes_sent; 598 return bytes_sent;
584 } 599 }
585 600
586 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) { 601 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) {
587 packet_history_.SetStorePacketsStatus(enable, number_to_store); 602 packet_history_.SetStorePacketsStatus(enable, number_to_store);
588 } 603 }
589 604
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 if (rtp_overhead_bytes_per_packet_ == packet.headers_size()) { 1285 if (rtp_overhead_bytes_per_packet_ == packet.headers_size()) {
1271 return; 1286 return;
1272 } 1287 }
1273 rtp_overhead_bytes_per_packet_ = packet.headers_size(); 1288 rtp_overhead_bytes_per_packet_ = packet.headers_size();
1274 overhead_bytes_per_packet = rtp_overhead_bytes_per_packet_; 1289 overhead_bytes_per_packet = rtp_overhead_bytes_per_packet_;
1275 } 1290 }
1276 overhead_observer_->OnOverheadChanged(overhead_bytes_per_packet); 1291 overhead_observer_->OnOverheadChanged(overhead_bytes_per_packet);
1277 } 1292 }
1278 1293
1279 } // namespace webrtc 1294 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_packet_history_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698