| 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...) Expand all  Loading... | 
| 27 namespace webrtc { | 27 namespace webrtc { | 
| 28 | 28 | 
| 29 // Max in the RFC 3550 is 255 bytes, we limit it to be modulus 32 for SRTP. | 29 // Max in the RFC 3550 is 255 bytes, we limit it to be modulus 32 for SRTP. | 
| 30 static const size_t kMaxPaddingLength = 224; | 30 static const size_t kMaxPaddingLength = 224; | 
| 31 static const int kSendSideDelayWindowMs = 1000; | 31 static const int kSendSideDelayWindowMs = 1000; | 
| 32 static const uint32_t kAbsSendTimeFraction = 18; | 32 static const uint32_t kAbsSendTimeFraction = 18; | 
| 33 | 33 | 
| 34 namespace { | 34 namespace { | 
| 35 | 35 | 
| 36 const size_t kRtpHeaderLength = 12; | 36 const size_t kRtpHeaderLength = 12; | 
|  | 37 const uint16_t kMaxInitRtpSeqNumber = 32767;  // 2^15 -1. | 
| 37 | 38 | 
| 38 const char* FrameTypeToString(FrameType frame_type) { | 39 const char* FrameTypeToString(FrameType frame_type) { | 
| 39   switch (frame_type) { | 40   switch (frame_type) { | 
| 40     case kEmptyFrame: | 41     case kEmptyFrame: | 
| 41       return "empty"; | 42       return "empty"; | 
| 42     case kAudioFrameSpeech: return "audio_speech"; | 43     case kAudioFrameSpeech: return "audio_speech"; | 
| 43     case kAudioFrameCN: return "audio_cn"; | 44     case kAudioFrameCN: return "audio_cn"; | 
| 44     case kVideoFrameKey: return "video_key"; | 45     case kVideoFrameKey: return "video_key"; | 
| 45     case kVideoFrameDelta: return "video_delta"; | 46     case kVideoFrameDelta: return "video_delta"; | 
| 46   } | 47   } | 
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 119     TransportSequenceNumberAllocator* sequence_number_allocator, | 120     TransportSequenceNumberAllocator* sequence_number_allocator, | 
| 120     TransportFeedbackObserver* transport_feedback_observer, | 121     TransportFeedbackObserver* transport_feedback_observer, | 
| 121     BitrateStatisticsObserver* bitrate_callback, | 122     BitrateStatisticsObserver* bitrate_callback, | 
| 122     FrameCountObserver* frame_count_observer, | 123     FrameCountObserver* frame_count_observer, | 
| 123     SendSideDelayObserver* send_side_delay_observer) | 124     SendSideDelayObserver* send_side_delay_observer) | 
| 124     : clock_(clock), | 125     : clock_(clock), | 
| 125       // TODO(holmer): Remove this conversion when we remove the use of | 126       // TODO(holmer): Remove this conversion when we remove the use of | 
| 126       // TickTime. | 127       // TickTime. | 
| 127       clock_delta_ms_(clock_->TimeInMilliseconds() - | 128       clock_delta_ms_(clock_->TimeInMilliseconds() - | 
| 128                       TickTime::MillisecondTimestamp()), | 129                       TickTime::MillisecondTimestamp()), | 
|  | 130       random_(clock_->TimeInMicroseconds()), | 
| 129       bitrates_(new BitrateAggregator(bitrate_callback)), | 131       bitrates_(new BitrateAggregator(bitrate_callback)), | 
| 130       total_bitrate_sent_(clock, bitrates_->total_bitrate_observer()), | 132       total_bitrate_sent_(clock, bitrates_->total_bitrate_observer()), | 
| 131       audio_configured_(audio), | 133       audio_configured_(audio), | 
| 132       audio_(audio ? new RTPSenderAudio(clock, this, audio_feedback) : nullptr), | 134       audio_(audio ? new RTPSenderAudio(clock, this, audio_feedback) : nullptr), | 
| 133       video_(audio ? nullptr : new RTPSenderVideo(clock, this)), | 135       video_(audio ? nullptr : new RTPSenderVideo(clock, this)), | 
| 134       paced_sender_(paced_sender), | 136       paced_sender_(paced_sender), | 
| 135       transport_sequence_number_allocator_(sequence_number_allocator), | 137       transport_sequence_number_allocator_(sequence_number_allocator), | 
| 136       transport_feedback_observer_(transport_feedback_observer), | 138       transport_feedback_observer_(transport_feedback_observer), | 
| 137       last_capture_time_ms_sent_(0), | 139       last_capture_time_ms_sent_(0), | 
| 138       send_critsect_(CriticalSectionWrapper::CreateCriticalSection()), | 140       send_critsect_(CriticalSectionWrapper::CreateCriticalSection()), | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 176       target_bitrate_critsect_(CriticalSectionWrapper::CreateCriticalSection()), | 178       target_bitrate_critsect_(CriticalSectionWrapper::CreateCriticalSection()), | 
| 177       target_bitrate_(0) { | 179       target_bitrate_(0) { | 
| 178   memset(nack_byte_count_times_, 0, sizeof(nack_byte_count_times_)); | 180   memset(nack_byte_count_times_, 0, sizeof(nack_byte_count_times_)); | 
| 179   memset(nack_byte_count_, 0, sizeof(nack_byte_count_)); | 181   memset(nack_byte_count_, 0, sizeof(nack_byte_count_)); | 
| 180   // We need to seed the random generator. | 182   // We need to seed the random generator. | 
| 181   srand(static_cast<uint32_t>(clock_->TimeInMilliseconds())); | 183   srand(static_cast<uint32_t>(clock_->TimeInMilliseconds())); | 
| 182   ssrc_ = ssrc_db_.CreateSSRC();  // Can't be 0. | 184   ssrc_ = ssrc_db_.CreateSSRC();  // Can't be 0. | 
| 183   ssrc_rtx_ = ssrc_db_.CreateSSRC();  // Can't be 0. | 185   ssrc_rtx_ = ssrc_db_.CreateSSRC();  // Can't be 0. | 
| 184   bitrates_->set_ssrc(ssrc_); | 186   bitrates_->set_ssrc(ssrc_); | 
| 185   // Random start, 16 bits. Can't be 0. | 187   // Random start, 16 bits. Can't be 0. | 
| 186   sequence_number_rtx_ = static_cast<uint16_t>(rand() + 1) & 0x7FFF; | 188   sequence_number_rtx_ = random_.Rand(1, kMaxInitRtpSeqNumber); | 
| 187   sequence_number_ = static_cast<uint16_t>(rand() + 1) & 0x7FFF; | 189   sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber); | 
| 188 } | 190 } | 
| 189 | 191 | 
| 190 RTPSender::~RTPSender() { | 192 RTPSender::~RTPSender() { | 
| 191   if (remote_ssrc_ != 0) { | 193   if (remote_ssrc_ != 0) { | 
| 192     ssrc_db_.ReturnSSRC(remote_ssrc_); | 194     ssrc_db_.ReturnSSRC(remote_ssrc_); | 
| 193   } | 195   } | 
| 194   ssrc_db_.ReturnSSRC(ssrc_); | 196   ssrc_db_.ReturnSSRC(ssrc_); | 
| 195 | 197 | 
| 196   SSRCDatabase::ReturnSSRCDatabase(); | 198   SSRCDatabase::ReturnSSRCDatabase(); | 
| 197   while (!payload_type_map_.empty()) { | 199   while (!payload_type_map_.empty()) { | 
| (...skipping 1451 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1649     CriticalSectionScoped lock(send_critsect_.get()); | 1651     CriticalSectionScoped lock(send_critsect_.get()); | 
| 1650     if (!ssrc_forced_) { | 1652     if (!ssrc_forced_) { | 
| 1651       // Generate a new SSRC. | 1653       // Generate a new SSRC. | 
| 1652       ssrc_db_.ReturnSSRC(ssrc_); | 1654       ssrc_db_.ReturnSSRC(ssrc_); | 
| 1653       ssrc_ = ssrc_db_.CreateSSRC();  // Can't be 0. | 1655       ssrc_ = ssrc_db_.CreateSSRC();  // Can't be 0. | 
| 1654       bitrates_->set_ssrc(ssrc_); | 1656       bitrates_->set_ssrc(ssrc_); | 
| 1655     } | 1657     } | 
| 1656     // Don't initialize seq number if SSRC passed externally. | 1658     // Don't initialize seq number if SSRC passed externally. | 
| 1657     if (!sequence_number_forced_ && !ssrc_forced_) { | 1659     if (!sequence_number_forced_ && !ssrc_forced_) { | 
| 1658       // Generate a new sequence number. | 1660       // Generate a new sequence number. | 
| 1659       sequence_number_ = | 1661       sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber); | 
| 1660           rand() / (RAND_MAX / MAX_INIT_RTP_SEQ_NUMBER);  // NOLINT |  | 
| 1661     } | 1662     } | 
| 1662   } | 1663   } | 
| 1663 } | 1664 } | 
| 1664 | 1665 | 
| 1665 void RTPSender::SetSendingMediaStatus(bool enabled) { | 1666 void RTPSender::SetSendingMediaStatus(bool enabled) { | 
| 1666   CriticalSectionScoped cs(send_critsect_.get()); | 1667   CriticalSectionScoped cs(send_critsect_.get()); | 
| 1667   sending_media_ = enabled; | 1668   sending_media_ = enabled; | 
| 1668 } | 1669 } | 
| 1669 | 1670 | 
| 1670 bool RTPSender::SendingMedia() const { | 1671 bool RTPSender::SendingMedia() const { | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1712 | 1713 | 
| 1713   if (ssrc_ == ssrc && ssrc_forced_) { | 1714   if (ssrc_ == ssrc && ssrc_forced_) { | 
| 1714     return;  // Since it's same ssrc, don't reset anything. | 1715     return;  // Since it's same ssrc, don't reset anything. | 
| 1715   } | 1716   } | 
| 1716   ssrc_forced_ = true; | 1717   ssrc_forced_ = true; | 
| 1717   ssrc_db_.ReturnSSRC(ssrc_); | 1718   ssrc_db_.ReturnSSRC(ssrc_); | 
| 1718   ssrc_db_.RegisterSSRC(ssrc); | 1719   ssrc_db_.RegisterSSRC(ssrc); | 
| 1719   ssrc_ = ssrc; | 1720   ssrc_ = ssrc; | 
| 1720   bitrates_->set_ssrc(ssrc_); | 1721   bitrates_->set_ssrc(ssrc_); | 
| 1721   if (!sequence_number_forced_) { | 1722   if (!sequence_number_forced_) { | 
| 1722     sequence_number_ = | 1723     sequence_number_ = random_.Rand(1, kMaxInitRtpSeqNumber); | 
| 1723         rand() / (RAND_MAX / MAX_INIT_RTP_SEQ_NUMBER);  // NOLINT |  | 
| 1724   } | 1724   } | 
| 1725 } | 1725 } | 
| 1726 | 1726 | 
| 1727 uint32_t RTPSender::SSRC() const { | 1727 uint32_t RTPSender::SSRC() const { | 
| 1728   CriticalSectionScoped cs(send_critsect_.get()); | 1728   CriticalSectionScoped cs(send_critsect_.get()); | 
| 1729   return ssrc_; | 1729   return ssrc_; | 
| 1730 } | 1730 } | 
| 1731 | 1731 | 
| 1732 void RTPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) { | 1732 void RTPSender::SetCsrcs(const std::vector<uint32_t>& csrcs) { | 
| 1733   assert(csrcs.size() <= kRtpCsrcSize); | 1733   assert(csrcs.size() <= kRtpCsrcSize); | 
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1906   CriticalSectionScoped lock(send_critsect_.get()); | 1906   CriticalSectionScoped lock(send_critsect_.get()); | 
| 1907 | 1907 | 
| 1908   RtpState state; | 1908   RtpState state; | 
| 1909   state.sequence_number = sequence_number_rtx_; | 1909   state.sequence_number = sequence_number_rtx_; | 
| 1910   state.start_timestamp = start_timestamp_; | 1910   state.start_timestamp = start_timestamp_; | 
| 1911 | 1911 | 
| 1912   return state; | 1912   return state; | 
| 1913 } | 1913 } | 
| 1914 | 1914 | 
| 1915 }  // namespace webrtc | 1915 }  // namespace webrtc | 
| OLD | NEW | 
|---|