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 16 matching lines...) Loading... | |
27 #include "webrtc/modules/video_coding/main/interface/video_coding.h" | 27 #include "webrtc/modules/video_coding/main/interface/video_coding.h" |
28 #include "webrtc/modules/video_processing/main/interface/video_processing.h" | 28 #include "webrtc/modules/video_processing/main/interface/video_processing.h" |
29 #include "webrtc/modules/video_render/include/video_render_defines.h" | 29 #include "webrtc/modules/video_render/include/video_render_defines.h" |
30 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 30 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
31 #include "webrtc/system_wrappers/include/metrics.h" | 31 #include "webrtc/system_wrappers/include/metrics.h" |
32 #include "webrtc/system_wrappers/include/thread_wrapper.h" | 32 #include "webrtc/system_wrappers/include/thread_wrapper.h" |
33 #include "webrtc/video/receive_statistics_proxy.h" | 33 #include "webrtc/video/receive_statistics_proxy.h" |
34 #include "webrtc/video_engine/call_stats.h" | 34 #include "webrtc/video_engine/call_stats.h" |
35 #include "webrtc/video_engine/payload_router.h" | 35 #include "webrtc/video_engine/payload_router.h" |
36 #include "webrtc/video_engine/report_block_stats.h" | 36 #include "webrtc/video_engine/report_block_stats.h" |
37 #include "webrtc/video_engine/vie_defines.h" | |
38 | 37 |
39 namespace webrtc { | 38 namespace webrtc { |
40 | 39 |
41 const int kMaxDecodeWaitTimeMs = 50; | 40 const int kMaxDecodeWaitTimeMs = 50; |
42 static const int kMaxTargetDelayMs = 10000; | 41 static const int kMaxTargetDelayMs = 10000; |
43 static const float kMaxIncompleteTimeMultiplier = 3.5f; | 42 static const float kMaxIncompleteTimeMultiplier = 3.5f; |
43 const int kMinSendSidePacketHistorySize = 600; | |
44 const int kMaxPacketAgeToNack = 450; | |
45 const int kMaxNackListSize = 250; | |
44 | 46 |
45 // Helper class receiving statistics callbacks. | 47 // Helper class receiving statistics callbacks. |
46 class ChannelStatsObserver : public CallStatsObserver { | 48 class ChannelStatsObserver : public CallStatsObserver { |
47 public: | 49 public: |
48 explicit ChannelStatsObserver(ViEChannel* owner) : owner_(owner) {} | 50 explicit ChannelStatsObserver(ViEChannel* owner) : owner_(owner) {} |
49 virtual ~ChannelStatsObserver() {} | 51 virtual ~ChannelStatsObserver() {} |
50 | 52 |
51 // Implements StatsObserver. | 53 // Implements StatsObserver. |
52 virtual void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { | 54 virtual void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
53 owner_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); | 55 owner_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
(...skipping 48 matching lines...) Loading... | |
102 vie_sync_(vcm_), | 104 vie_sync_(vcm_), |
103 stats_observer_(new ChannelStatsObserver(this)), | 105 stats_observer_(new ChannelStatsObserver(this)), |
104 receive_stats_callback_(nullptr), | 106 receive_stats_callback_(nullptr), |
105 incoming_video_stream_(nullptr), | 107 incoming_video_stream_(nullptr), |
106 intra_frame_observer_(intra_frame_observer), | 108 intra_frame_observer_(intra_frame_observer), |
107 rtt_stats_(rtt_stats), | 109 rtt_stats_(rtt_stats), |
108 paced_sender_(paced_sender), | 110 paced_sender_(paced_sender), |
109 packet_router_(packet_router), | 111 packet_router_(packet_router), |
110 bandwidth_observer_(bandwidth_observer), | 112 bandwidth_observer_(bandwidth_observer), |
111 transport_feedback_observer_(transport_feedback_observer), | 113 transport_feedback_observer_(transport_feedback_observer), |
112 nack_history_size_sender_(kSendSidePacketHistorySize), | 114 nack_history_size_sender_(kMinSendSidePacketHistorySize), |
113 max_nack_reordering_threshold_(kMaxPacketAgeToNack), | 115 max_nack_reordering_threshold_(kMaxPacketAgeToNack), |
114 pre_render_callback_(NULL), | 116 pre_render_callback_(NULL), |
115 report_block_stats_sender_(new ReportBlockStats()), | 117 report_block_stats_sender_(new ReportBlockStats()), |
116 time_of_first_rtt_ms_(-1), | 118 time_of_first_rtt_ms_(-1), |
117 rtt_sum_ms_(0), | 119 rtt_sum_ms_(0), |
118 last_rtt_ms_(0), | 120 last_rtt_ms_(0), |
119 num_rtts_(0), | 121 num_rtts_(0), |
120 rtp_rtcp_modules_( | 122 rtp_rtcp_modules_( |
121 CreateRtpRtcpModules(!sender, | 123 CreateRtpRtcpModules(!sender, |
122 vie_receiver_.GetReceiveStatistics(), | 124 vie_receiver_.GetReceiveStatistics(), |
123 transport, | 125 transport, |
124 sender ? intra_frame_observer_ : nullptr, | 126 sender ? intra_frame_observer_ : nullptr, |
125 sender ? bandwidth_observer_.get() : nullptr, | 127 sender ? bandwidth_observer_.get() : nullptr, |
126 transport_feedback_observer_, | 128 transport_feedback_observer_, |
127 rtt_stats_, | 129 rtt_stats_, |
128 &rtcp_packet_type_counter_observer_, | 130 &rtcp_packet_type_counter_observer_, |
129 remote_bitrate_estimator, | 131 remote_bitrate_estimator, |
130 paced_sender_, | 132 paced_sender_, |
131 packet_router_, | 133 packet_router_, |
132 &send_bitrate_observer_, | 134 &send_bitrate_observer_, |
133 &send_frame_count_observer_, | 135 &send_frame_count_observer_, |
134 &send_side_delay_observer_, | 136 &send_side_delay_observer_, |
135 max_rtp_streams)), | 137 max_rtp_streams)), |
136 num_active_rtp_rtcp_modules_(1) { | 138 num_active_rtp_rtcp_modules_(1) { |
137 vie_receiver_.SetRtpRtcpModule(rtp_rtcp_modules_[0]); | 139 vie_receiver_.SetRtpRtcpModule(rtp_rtcp_modules_[0]); |
138 vcm_->SetNackSettings(kMaxNackListSize, max_nack_reordering_threshold_, 0); | 140 vcm_->SetNackSettings(kMaxNackListSize, max_nack_reordering_threshold_, 0); |
139 } | 141 } |
140 | 142 |
141 int32_t ViEChannel::Init() { | 143 int32_t ViEChannel::Init() { |
144 const int kDefaultRenderDelayMs = 10; | |
pbos-webrtc
2015/10/29 15:39:40
static
mflodman
2015/11/06 11:38:36
Done.
| |
142 module_process_thread_->RegisterModule(vie_receiver_.GetReceiveStatistics()); | 145 module_process_thread_->RegisterModule(vie_receiver_.GetReceiveStatistics()); |
143 | 146 |
144 // RTP/RTCP initialization. | 147 // RTP/RTCP initialization. |
145 module_process_thread_->RegisterModule(rtp_rtcp_modules_[0]); | 148 module_process_thread_->RegisterModule(rtp_rtcp_modules_[0]); |
146 | 149 |
147 rtp_rtcp_modules_[0]->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp); | 150 rtp_rtcp_modules_[0]->SetKeyFrameRequestMethod(kKeyFrameReqPliRtcp); |
148 if (paced_sender_) { | 151 if (paced_sender_) { |
149 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 152 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
150 rtp_rtcp->SetStorePacketsStatus(true, nack_history_size_sender_); | 153 rtp_rtcp->SetStorePacketsStatus(true, nack_history_size_sender_); |
151 } | 154 } |
152 packet_router_->AddRtpModule(rtp_rtcp_modules_[0]); | 155 packet_router_->AddRtpModule(rtp_rtcp_modules_[0]); |
153 if (sender_) { | 156 if (sender_) { |
154 std::list<RtpRtcp*> send_rtp_modules(1, rtp_rtcp_modules_[0]); | 157 std::list<RtpRtcp*> send_rtp_modules(1, rtp_rtcp_modules_[0]); |
155 send_payload_router_->SetSendingRtpModules(send_rtp_modules); | 158 send_payload_router_->SetSendingRtpModules(send_rtp_modules); |
156 RTC_DCHECK(!send_payload_router_->active()); | 159 RTC_DCHECK(!send_payload_router_->active()); |
157 } | 160 } |
158 if (vcm_->RegisterReceiveCallback(this) != 0) { | 161 if (vcm_->RegisterReceiveCallback(this) != 0) { |
159 return -1; | 162 return -1; |
160 } | 163 } |
161 vcm_->RegisterFrameTypeCallback(this); | 164 vcm_->RegisterFrameTypeCallback(this); |
162 vcm_->RegisterReceiveStatisticsCallback(this); | 165 vcm_->RegisterReceiveStatisticsCallback(this); |
163 vcm_->RegisterDecoderTimingCallback(this); | 166 vcm_->RegisterDecoderTimingCallback(this); |
164 vcm_->SetRenderDelay(kViEDefaultRenderDelayMs); | 167 vcm_->SetRenderDelay(kDefaultRenderDelayMs); |
165 | 168 |
166 module_process_thread_->RegisterModule(vcm_); | 169 module_process_thread_->RegisterModule(vcm_); |
167 module_process_thread_->RegisterModule(&vie_sync_); | 170 module_process_thread_->RegisterModule(&vie_sync_); |
168 | 171 |
169 return 0; | 172 return 0; |
170 } | 173 } |
171 | 174 |
172 ViEChannel::~ViEChannel() { | 175 ViEChannel::~ViEChannel() { |
173 UpdateHistograms(); | 176 UpdateHistograms(); |
174 // Make sure we don't get more callbacks from the RTP module. | 177 // Make sure we don't get more callbacks from the RTP module. |
(...skipping 380 matching lines...) Loading... | |
555 return false; | 558 return false; |
556 } | 559 } |
557 | 560 |
558 int ViEChannel::SetSenderBufferingMode(int target_delay_ms) { | 561 int ViEChannel::SetSenderBufferingMode(int target_delay_ms) { |
559 if ((target_delay_ms < 0) || (target_delay_ms > kMaxTargetDelayMs)) { | 562 if ((target_delay_ms < 0) || (target_delay_ms > kMaxTargetDelayMs)) { |
560 LOG(LS_ERROR) << "Invalid send buffer value."; | 563 LOG(LS_ERROR) << "Invalid send buffer value."; |
561 return -1; | 564 return -1; |
562 } | 565 } |
563 if (target_delay_ms == 0) { | 566 if (target_delay_ms == 0) { |
564 // Real-time mode. | 567 // Real-time mode. |
565 nack_history_size_sender_ = kSendSidePacketHistorySize; | 568 nack_history_size_sender_ = kMinSendSidePacketHistorySize; |
566 } else { | 569 } else { |
567 nack_history_size_sender_ = GetRequiredNackListSize(target_delay_ms); | 570 nack_history_size_sender_ = GetRequiredNackListSize(target_delay_ms); |
568 // Don't allow a number lower than the default value. | 571 // Don't allow a number lower than the default value. |
569 if (nack_history_size_sender_ < kSendSidePacketHistorySize) { | 572 if (nack_history_size_sender_ < kMinSendSidePacketHistorySize) { |
570 nack_history_size_sender_ = kSendSidePacketHistorySize; | 573 nack_history_size_sender_ = kMinSendSidePacketHistorySize; |
571 } | 574 } |
572 } | 575 } |
573 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) | 576 for (RtpRtcp* rtp_rtcp : rtp_rtcp_modules_) |
574 rtp_rtcp->SetStorePacketsStatus(true, nack_history_size_sender_); | 577 rtp_rtcp->SetStorePacketsStatus(true, nack_history_size_sender_); |
575 return 0; | 578 return 0; |
576 } | 579 } |
577 | 580 |
578 int ViEChannel::SetReceiverBufferingMode(int target_delay_ms) { | 581 int ViEChannel::SetReceiverBufferingMode(int target_delay_ms) { |
579 if ((target_delay_ms < 0) || (target_delay_ms > kMaxTargetDelayMs)) { | 582 if ((target_delay_ms < 0) || (target_delay_ms > kMaxTargetDelayMs)) { |
580 LOG(LS_ERROR) << "Invalid receive buffer delay value."; | 583 LOG(LS_ERROR) << "Invalid receive buffer delay value."; |
(...skipping 663 matching lines...) Loading... | |
1244 CriticalSectionScoped cs(crit_.get()); | 1247 CriticalSectionScoped cs(crit_.get()); |
1245 receive_stats_callback_ = receive_statistics_proxy; | 1248 receive_stats_callback_ = receive_statistics_proxy; |
1246 } | 1249 } |
1247 | 1250 |
1248 void ViEChannel::SetIncomingVideoStream( | 1251 void ViEChannel::SetIncomingVideoStream( |
1249 IncomingVideoStream* incoming_video_stream) { | 1252 IncomingVideoStream* incoming_video_stream) { |
1250 CriticalSectionScoped cs(crit_.get()); | 1253 CriticalSectionScoped cs(crit_.get()); |
1251 incoming_video_stream_ = incoming_video_stream; | 1254 incoming_video_stream_ = incoming_video_stream; |
1252 } | 1255 } |
1253 } // namespace webrtc | 1256 } // namespace webrtc |
OLD | NEW |