RTP Audio System
2.0.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### RTP Sender #### 00007 // #### #### 00008 // #### Copyright (C) 1999-2012 by Thomas Dreibholz #### 00009 // #### #### 00010 // #### Contact: #### 00011 // #### EMail: dreibh@iem.uni-due.de #### 00012 // #### WWW: https://www.nntb.no/~dreibh/rtpaudio #### 00013 // #### #### 00014 // #### ---------------------------------------------------------------- #### 00015 // #### #### 00016 // #### This program is free software: you can redistribute it and/or #### 00017 // #### modify it under the terms of the GNU General Public License as #### 00018 // #### published by the Free Software Foundation, either version 3 of #### 00019 // #### the License, or (at your option) any later version. #### 00020 // #### #### 00021 // #### This program is distributed in the hope that it will be useful, #### 00022 // #### but WITHOUT ANY WARRANTY; without even the implied warranty of #### 00023 // #### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #### 00024 // #### GNU General Public License for more details. #### 00025 // #### #### 00026 // #### You should have received a copy of the GNU General Public #### 00027 // #### License along with this program. If not, see #### 00028 // #### <http://www.gnu.org/licenses/>. #### 00029 // #### #### 00030 // ########################################################################## 00031 // $Id: rtpsender.h 1286 2011-12-18 13:43:16Z dreibh $ 00032 00033 00034 #ifndef RTPSENDER_H 00035 #define RTPSENDER_H 00036 00037 00038 #include "tdsystem.h" 00039 #include "timedthread.h" 00040 #include "tdsocket.h" 00041 #include "rtppacket.h" 00042 #include "encoderinterface.h" 00043 #include "trafficshaper.h" 00044 #include "abstractqosdescription.h" 00045 #include "qosmanagerinterface.h" 00046 00047 00055 class RTPSender : virtual public ManagedStreamInterface, 00056 public TimedThread 00057 { 00058 // ====== Constructor/Destructor ========================================= 00059 public: 00066 RTPSender(); 00067 00083 RTPSender(const InternetFlow& flow, 00084 const card32 ssrc, 00085 EncoderInterface* encoder, 00086 Socket* senderSocket, 00087 const card32 controlPPID, 00088 const card32 dataPPID, 00089 const cardinal maxPacketSize = 1500, 00090 QoSManagerInterface* qosManager = NULL); 00091 00095 ~RTPSender(); 00096 00097 00098 // ====== Initialize ===================================================== 00114 void init(const InternetFlow& flow, 00115 const card32 ssrc, 00116 EncoderInterface* encoder, 00117 Socket* senderSocket, 00118 const card32 controlPPID, 00119 const card32 dataPPID, 00120 const cardinal maxPacketSize = 1500, 00121 QoSManagerInterface* qosManager = NULL); 00122 00123 00124 00125 // ====== Quality control ================================================ 00131 AbstractQoSDescription* getQoSDescription(const card64 offset); 00132 00138 void updateQuality(const AbstractQoSDescription* aqd); 00139 00145 void lock(); 00146 00152 void unlock(); 00153 00154 00155 // ====== Packet size ==================================================== 00161 inline cardinal getMaxPacketSize() const; 00162 00169 inline cardinal setMaxPacketSize(const cardinal size); 00170 00171 00172 // ====== Transmission control =========================================== 00178 inline bool paused() const; 00179 00180 00187 inline bool transmissionErrorDetected(); 00188 00189 00195 inline void setPause(const bool on); 00196 00197 00203 inline card64 getBytesSent(); 00204 00210 inline card64 getPacketsSent(); 00211 00215 inline void resetBytesSent(); 00216 00220 inline void resetPacketsSent(); 00221 00222 00223 // ====== Private data =================================================== 00224 private: 00225 void timerEvent(); 00226 void updateFrameRate(const AbstractQoSDescription* aqd); 00227 00228 00229 private: 00230 EncoderInterface* Encoder; 00231 Socket* SenderSocket; 00232 00233 cardinal FramesPerSecond; 00234 cardinal RenewCounter; 00235 cardinal MaxPacketSize; 00236 card32 SSRC; 00237 card64 BytesSent; 00238 card64 PacketsSent; 00239 card64 TimeStamp; 00240 card32 ControlPPID; 00241 card32 DataPPID; 00242 00243 card32 PayloadBytesSent; 00244 card32 PayloadPacketsSent; 00245 00246 bool Pause; 00247 bool TransmissionError; 00248 00249 InternetFlow Flow[RTPConstants::RTPMaxQualityLayers]; 00250 card16 SequenceNumber[RTPConstants::RTPMaxQualityLayers]; 00251 00252 QoSManagerInterface* QoSMgr; 00253 cardinal Bandwidth[RTPConstants::RTPMaxQualityLayers]; 00254 double BufferDelay[RTPConstants::RTPMaxQualityLayers]; 00255 00256 #ifdef USE_TRAFFICSHAPER 00257 TrafficShaper SenderReportBuffer; 00258 TrafficShaper Shaper[RTPConstants::RTPMaxQualityLayers]; 00259 #endif 00260 }; 00261 00262 00263 #include "rtpsender.icc" 00264 00265 00266 #endif