OLD | NEW |
---|---|
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 Loading... | |
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 = send_side_bwe_with_overhead_ | |
465 ? packet->size() | |
466 : packet->size() - packet->headers_size(); | |
462 if (!PrepareAndSendPacket(std::move(packet), true, false, pacing_info)) | 467 if (!PrepareAndSendPacket(std::move(packet), true, false, pacing_info)) |
463 break; | 468 break; |
464 bytes_left -= payload_size; | 469 bytes_left -= used_bytes; |
465 } | 470 } |
466 return bytes_to_send - bytes_left; | 471 return bytes_to_send - bytes_left; |
467 } | 472 } |
468 | 473 |
469 size_t RTPSender::SendPadData(size_t bytes, | 474 size_t RTPSender::SendPadData(size_t bytes, |
470 const PacedPacketInfo& pacing_info) { | 475 const PacedPacketInfo& pacing_info) { |
471 size_t padding_bytes_in_packet; | 476 // Always send full padding packets. This is accounted for by the |
477 // RtpPacketSender, which will make sure we don't send too much padding even | |
478 // if a single packet is larger than requested. | |
479 // We do this to avoid frequently sending small packets on higher bitrates. | |
480 size_t padding_bytes_in_packet = | |
481 std::min(MaxPayloadSize(), kMaxPaddingLength); | |
482 | |
472 if (audio_configured_) { | 483 if (audio_configured_) { |
473 // Allow smaller padding packets for audio. | 484 // Allow smaller padding packets for audio. |
485 | |
486 // When WebRTC-SendSideBwe-WithOverhead is enabled, the padding budget | |
487 // includes overhead. | |
488 const size_t padding_bytes_if_one_packet = | |
489 send_side_bwe_with_overhead_ ? bytes - RtpHeaderLength() : bytes; | |
474 padding_bytes_in_packet = | 490 padding_bytes_in_packet = |
475 std::min(std::max(bytes, kMinAudioPaddingLength), MaxPayloadSize()); | 491 std::min(padding_bytes_in_packet, |
476 if (padding_bytes_in_packet > kMaxPaddingLength) | 492 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 } | 493 } |
494 | |
485 size_t bytes_sent = 0; | 495 size_t bytes_sent = 0; |
486 while (bytes_sent < bytes) { | 496 while (bytes_sent < bytes) { |
487 int64_t now_ms = clock_->TimeInMilliseconds(); | 497 int64_t now_ms = clock_->TimeInMilliseconds(); |
488 uint32_t ssrc; | 498 uint32_t ssrc; |
489 uint32_t timestamp; | 499 uint32_t timestamp; |
490 int64_t capture_time_ms; | 500 int64_t capture_time_ms; |
491 uint16_t sequence_number; | 501 uint16_t sequence_number; |
492 int payload_type; | 502 int payload_type; |
493 bool over_rtx; | 503 bool over_rtx; |
494 { | 504 { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
559 padding_packet.SetSsrc(ssrc); | 569 padding_packet.SetSsrc(ssrc); |
560 | 570 |
561 if (capture_time_ms > 0) { | 571 if (capture_time_ms > 0) { |
562 padding_packet.SetExtension<TransmissionOffset>( | 572 padding_packet.SetExtension<TransmissionOffset>( |
563 (now_ms - capture_time_ms) * kTimestampTicksPerMs); | 573 (now_ms - capture_time_ms) * kTimestampTicksPerMs); |
564 } | 574 } |
565 padding_packet.SetExtension<AbsoluteSendTime>(now_ms); | 575 padding_packet.SetExtension<AbsoluteSendTime>(now_ms); |
566 PacketOptions options; | 576 PacketOptions options; |
567 bool has_transport_seq_num = | 577 bool has_transport_seq_num = |
568 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id); | 578 UpdateTransportSequenceNumber(&padding_packet, &options.packet_id); |
579 | |
569 padding_packet.SetPadding(padding_bytes_in_packet, &random_); | 580 padding_packet.SetPadding(padding_bytes_in_packet, &random_); |
570 | 581 |
571 if (has_transport_seq_num) { | 582 if (has_transport_seq_num) { |
572 AddPacketToTransportFeedback(options.packet_id, padding_packet, | 583 AddPacketToTransportFeedback(options.packet_id, padding_packet, |
573 pacing_info); | 584 pacing_info); |
574 } | 585 } |
575 | 586 |
576 if (!SendPacketToNetwork(padding_packet, options, pacing_info)) | 587 if (!SendPacketToNetwork(padding_packet, options, pacing_info)) |
577 break; | 588 break; |
578 | 589 |
579 bytes_sent += padding_bytes_in_packet; | 590 // When WebRTC-SendSideBwe-WithOverhead is enabled, the padding budget |
591 // includes overhead. | |
592 bytes_sent += send_side_bwe_with_overhead_ ? padding_packet.size() | |
593 : padding_packet.padding_size(); | |
stefan-webrtc
2017/04/04 08:13:38
Maybe for consistency use: packet->size() - packet
minyue-webrtc
2017/04/11 09:35:14
I would rather do padding_size + headers_size
I h
danilchap
2017/04/11 14:25:18
personally prefer size() function too:
size_t pack
minyue-webrtc
2017/04/11 14:30:51
You are right here. I realized that we should incl
| |
580 UpdateRtpStats(padding_packet, over_rtx, false); | 594 UpdateRtpStats(padding_packet, over_rtx, false); |
581 } | 595 } |
582 | 596 |
583 return bytes_sent; | 597 return bytes_sent; |
584 } | 598 } |
585 | 599 |
586 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) { | 600 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) { |
587 packet_history_.SetStorePacketsStatus(enable, number_to_store); | 601 packet_history_.SetStorePacketsStatus(enable, number_to_store); |
588 } | 602 } |
589 | 603 |
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1270 if (rtp_overhead_bytes_per_packet_ == packet.headers_size()) { | 1284 if (rtp_overhead_bytes_per_packet_ == packet.headers_size()) { |
1271 return; | 1285 return; |
1272 } | 1286 } |
1273 rtp_overhead_bytes_per_packet_ = packet.headers_size(); | 1287 rtp_overhead_bytes_per_packet_ = packet.headers_size(); |
1274 overhead_bytes_per_packet = rtp_overhead_bytes_per_packet_; | 1288 overhead_bytes_per_packet = rtp_overhead_bytes_per_packet_; |
1275 } | 1289 } |
1276 overhead_observer_->OnOverheadChanged(overhead_bytes_per_packet); | 1290 overhead_observer_->OnOverheadChanged(overhead_bytes_per_packet); |
1277 } | 1291 } |
1278 | 1292 |
1279 } // namespace webrtc | 1293 } // namespace webrtc |
OLD | NEW |