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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 uint32_t ssrc_; | 97 uint32_t ssrc_; |
98 }; | 98 }; |
99 | 99 |
100 RTPSender::RTPSender(int32_t id, | 100 RTPSender::RTPSender(int32_t id, |
101 bool audio, | 101 bool audio, |
102 Clock* clock, | 102 Clock* clock, |
103 Transport* transport, | 103 Transport* transport, |
104 RtpAudioFeedback* audio_feedback, | 104 RtpAudioFeedback* audio_feedback, |
105 PacedSender* paced_sender, | 105 PacedSender* paced_sender, |
106 PacketRouter* packet_router, | 106 PacketRouter* packet_router, |
107 SendTimeObserver* send_time_observer, | 107 TransportFeedbackObserver* transport_feedback_observer, |
108 BitrateStatisticsObserver* bitrate_callback, | 108 BitrateStatisticsObserver* bitrate_callback, |
109 FrameCountObserver* frame_count_observer, | 109 FrameCountObserver* frame_count_observer, |
110 SendSideDelayObserver* send_side_delay_observer) | 110 SendSideDelayObserver* send_side_delay_observer) |
111 : clock_(clock), | 111 : clock_(clock), |
112 // TODO(holmer): Remove this conversion when we remove the use of | 112 // TODO(holmer): Remove this conversion when we remove the use of |
113 // TickTime. | 113 // TickTime. |
114 clock_delta_ms_(clock_->TimeInMilliseconds() - | 114 clock_delta_ms_(clock_->TimeInMilliseconds() - |
115 TickTime::MillisecondTimestamp()), | 115 TickTime::MillisecondTimestamp()), |
116 bitrates_(new BitrateAggregator(bitrate_callback)), | 116 bitrates_(new BitrateAggregator(bitrate_callback)), |
117 total_bitrate_sent_(clock, bitrates_->total_bitrate_observer()), | 117 total_bitrate_sent_(clock, bitrates_->total_bitrate_observer()), |
118 id_(id), | 118 id_(id), |
119 audio_configured_(audio), | 119 audio_configured_(audio), |
120 audio_(audio ? new RTPSenderAudio(id, clock, this, audio_feedback) | 120 audio_(audio ? new RTPSenderAudio(id, clock, this, audio_feedback) |
121 : nullptr), | 121 : nullptr), |
122 video_(audio ? nullptr : new RTPSenderVideo(clock, this)), | 122 video_(audio ? nullptr : new RTPSenderVideo(clock, this)), |
123 paced_sender_(paced_sender), | 123 paced_sender_(paced_sender), |
124 packet_router_(packet_router), | 124 packet_router_(packet_router), |
125 send_time_observer_(send_time_observer), | 125 transport_feedback_observer_(transport_feedback_observer), |
126 last_capture_time_ms_sent_(0), | 126 last_capture_time_ms_sent_(0), |
127 send_critsect_(CriticalSectionWrapper::CreateCriticalSection()), | 127 send_critsect_(CriticalSectionWrapper::CreateCriticalSection()), |
128 transport_(transport), | 128 transport_(transport), |
129 sending_media_(true), // Default to sending media. | 129 sending_media_(true), // Default to sending media. |
130 max_payload_length_(IP_PACKET_SIZE - 28), // Default is IP-v4/UDP. | 130 max_payload_length_(IP_PACKET_SIZE - 28), // Default is IP-v4/UDP. |
131 packet_over_head_(28), | 131 packet_over_head_(28), |
132 payload_type_(-1), | 132 payload_type_(-1), |
133 payload_type_map_(), | 133 payload_type_map_(), |
134 rtp_header_extension_map_(), | 134 rtp_header_extension_map_(), |
135 transmission_time_offset_(0), | 135 transmission_time_offset_(0), |
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 | 669 |
670 uint16_t transport_seq = 0; | 670 uint16_t transport_seq = 0; |
671 if (using_transport_seq) { | 671 if (using_transport_seq) { |
672 transport_seq = | 672 transport_seq = |
673 UpdateTransportSequenceNumber(padding_packet, length, rtp_header); | 673 UpdateTransportSequenceNumber(padding_packet, length, rtp_header); |
674 } | 674 } |
675 | 675 |
676 if (!SendPacketToNetwork(padding_packet, length)) | 676 if (!SendPacketToNetwork(padding_packet, length)) |
677 break; | 677 break; |
678 | 678 |
679 if (using_transport_seq) | 679 if (using_transport_seq && transport_feedback_observer_) { |
680 send_time_observer_->OnPacketSent(transport_seq, now_ms); | 680 transport_feedback_observer_->OnPacketSent( |
| 681 PacketInfo(0, now_ms, transport_seq, length, true)); |
| 682 } |
681 | 683 |
682 bytes_sent += padding_bytes_in_packet; | 684 bytes_sent += padding_bytes_in_packet; |
683 UpdateRtpStats(padding_packet, length, rtp_header, over_rtx, false); | 685 UpdateRtpStats(padding_packet, length, rtp_header, over_rtx, false); |
684 } | 686 } |
685 | 687 |
686 return bytes_sent; | 688 return bytes_sent; |
687 } | 689 } |
688 | 690 |
689 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) { | 691 void RTPSender::SetStorePacketsStatus(bool enable, uint16_t number_to_store) { |
690 packet_history_.SetStorePacketsStatus(enable, number_to_store); | 692 packet_history_.SetStorePacketsStatus(enable, number_to_store); |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
912 buffer_to_send_ptr = data_buffer_rtx; | 914 buffer_to_send_ptr = data_buffer_rtx; |
913 } | 915 } |
914 | 916 |
915 int64_t now_ms = clock_->TimeInMilliseconds(); | 917 int64_t now_ms = clock_->TimeInMilliseconds(); |
916 int64_t diff_ms = now_ms - capture_time_ms; | 918 int64_t diff_ms = now_ms - capture_time_ms; |
917 UpdateTransmissionTimeOffset(buffer_to_send_ptr, length, rtp_header, | 919 UpdateTransmissionTimeOffset(buffer_to_send_ptr, length, rtp_header, |
918 diff_ms); | 920 diff_ms); |
919 UpdateAbsoluteSendTime(buffer_to_send_ptr, length, rtp_header, now_ms); | 921 UpdateAbsoluteSendTime(buffer_to_send_ptr, length, rtp_header, now_ms); |
920 | 922 |
921 uint16_t transport_seq = 0; | 923 uint16_t transport_seq = 0; |
| 924 // TODO(sprang): Potentially too much overhead in IsRegistered()? |
922 bool using_transport_seq = rtp_header_extension_map_.IsRegistered( | 925 bool using_transport_seq = rtp_header_extension_map_.IsRegistered( |
923 kRtpExtensionTransportSequenceNumber) && | 926 kRtpExtensionTransportSequenceNumber) && |
924 packet_router_; | 927 packet_router_ && !is_retransmit; |
925 if (using_transport_seq) { | 928 if (using_transport_seq) { |
926 transport_seq = | 929 transport_seq = |
927 UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header); | 930 UpdateTransportSequenceNumber(buffer_to_send_ptr, length, rtp_header); |
928 } | 931 } |
929 | 932 |
930 bool ret = SendPacketToNetwork(buffer_to_send_ptr, length); | 933 bool ret = SendPacketToNetwork(buffer_to_send_ptr, length); |
931 if (ret) { | 934 if (ret) { |
932 CriticalSectionScoped lock(send_critsect_.get()); | 935 CriticalSectionScoped lock(send_critsect_.get()); |
933 media_has_been_sent_ = true; | 936 media_has_been_sent_ = true; |
934 } | 937 } |
935 if (using_transport_seq) | 938 if (using_transport_seq && transport_feedback_observer_) { |
936 send_time_observer_->OnPacketSent(transport_seq, now_ms); | 939 transport_feedback_observer_->OnPacketSent( |
| 940 PacketInfo(0, now_ms, transport_seq, length, true)); |
| 941 } |
937 UpdateRtpStats(buffer_to_send_ptr, length, rtp_header, send_over_rtx, | 942 UpdateRtpStats(buffer_to_send_ptr, length, rtp_header, send_over_rtx, |
938 is_retransmit); | 943 is_retransmit); |
939 return ret; | 944 return ret; |
940 } | 945 } |
941 | 946 |
942 void RTPSender::UpdateRtpStats(const uint8_t* buffer, | 947 void RTPSender::UpdateRtpStats(const uint8_t* buffer, |
943 size_t packet_length, | 948 size_t packet_length, |
944 const RTPHeader& header, | 949 const RTPHeader& header, |
945 bool is_rtx, | 950 bool is_rtx, |
946 bool is_retransmit) { | 951 bool is_retransmit) { |
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1897 CriticalSectionScoped lock(send_critsect_.get()); | 1902 CriticalSectionScoped lock(send_critsect_.get()); |
1898 | 1903 |
1899 RtpState state; | 1904 RtpState state; |
1900 state.sequence_number = sequence_number_rtx_; | 1905 state.sequence_number = sequence_number_rtx_; |
1901 state.start_timestamp = start_timestamp_; | 1906 state.start_timestamp = start_timestamp_; |
1902 | 1907 |
1903 return state; | 1908 return state; |
1904 } | 1909 } |
1905 | 1910 |
1906 } // namespace webrtc | 1911 } // namespace webrtc |
OLD | NEW |