RTP Trace System
1.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### RTP Audio Server Project #### 00004 // #### ============================ #### 00005 // #### #### 00006 // #### RTP Sender #### 00007 // #### #### 00008 // #### Version 1.00 -- February 16, 2001 #### 00009 // #### #### 00010 // #### Copyright (C) 1999 Thomas Dreibholz #### 00011 // #### 2000 Universität Bonn, Abt. IV #### 00012 // #### 2001 EMail: dreibh@iem.uni-due.de #### 00013 // #### WWW: https://www.uni-due.de/~be0001 #### 00014 // #### #### 00015 // ########################################################################## 00016 00017 00018 #ifndef RTPSENDER_H 00019 #define RTPSENDER_H 00020 00021 00022 #include "system.h" 00023 #include "timedthread.h" 00024 #include "socket.h" 00025 #include "rtppacket.h" 00026 #include "encoderinterface.h" 00027 #include "trafficshaper.h" 00028 #ifdef USE_TRANSPORTINFO 00029 #include "extendedtransportinfo.h" 00030 #else 00031 #include "abstractqosdescription.h" 00032 #include "bandwidthmanager.h" 00033 #endif 00034 00035 00036 namespace Coral { 00037 00038 00046 class RTPSender : 00047 #ifndef USE_TRANSPORTINFO 00048 virtual public ManagedStreamInterface, 00049 #endif 00050 public TimedThread 00051 { 00052 // ====== Constructor/Destructor ========================================= 00053 public: 00060 RTPSender(); 00061 00074 RTPSender(const card32 ssrc, 00075 EncoderInterface* encoder, 00076 Socket* senderSocket, 00077 const cardinal maxPacketSize = 1500 00078 #ifndef USE_TRANSPORTINFO 00079 ,BandwidthManager* bwManager = NULL 00080 #endif 00081 ); 00082 00086 ~RTPSender(); 00087 00088 00089 // ====== Initialize ===================================================== 00102 void init(const card32 ssrc, 00103 EncoderInterface* encoder, 00104 Socket* senderSocket, 00105 const cardinal maxPacketSize = 1500 00106 #ifndef USE_TRANSPORTINFO 00107 ,BandwidthManager* bwManager = NULL 00108 #endif 00109 ); 00110 00111 00112 00113 // ====== Quality control ================================================ 00114 00115 #ifdef USE_TRANSPORTINFO 00116 00123 void adaptQuality(const double fractionLost, const cardinal layer); 00124 00125 // ====== Transport info ================================================= 00132 void getTransportInfo(ExtendedTransportInfo& transportInfo, 00133 const bool calculateLevels = true); 00134 00141 void setTransportInfo(ExtendedTransportInfo& transportInfo, 00142 const bool calculateLevels = true); 00143 00144 #else 00145 00151 AbstractQoSDescription* getQoSDescription(const card64 offset); 00152 00158 void updateQuality(const AbstractQoSDescription* aqd); 00159 00165 void lock(); 00166 00172 void unlock(); 00173 00174 #endif 00175 00176 00177 // ====== Packet size ==================================================== 00183 inline cardinal getMaxPacketSize() const; 00184 00191 inline cardinal setMaxPacketSize(const cardinal size); 00192 00193 00194 // ====== Transmission control =========================================== 00200 inline bool paused() const; 00201 00202 00209 inline bool transmissionErrorDetected(); 00210 00211 00217 inline void setPause(const bool on); 00218 00219 00225 inline card64 getBytesSent() const; 00226 00232 inline card64 getPacketsSent() const; 00233 00237 inline void resetBytesSent(); 00238 00242 inline void resetPacketsSent(); 00243 00244 00245 // ====== Private data =================================================== 00246 private: 00247 void timerEvent(); 00248 00249 00250 private: 00251 EncoderInterface* Encoder; 00252 Socket* SenderSocket; 00253 00254 cardinal FramesPerSecond; 00255 cardinal RenewCounter; 00256 cardinal MaxPacketSize; 00257 card32 SSRC; 00258 card64 BytesSent; 00259 card64 PacketsSent; 00260 card64 TimeStamp; 00261 00262 card32 PayloadBytesSent; 00263 card32 PayloadPacketsSent; 00264 00265 bool Pause; 00266 bool TransmissionError; 00267 00268 00269 InternetFlow Flow[RTPConstants::RTPMaxQualityLayers]; 00270 card16 SequenceNumber[RTPConstants::RTPMaxQualityLayers]; 00271 00272 00273 #ifdef USE_TRANSPORTINFO 00274 00275 void update(const TransportInfo& transportInfo); 00276 00277 cardinal UnitBytesCheckCounter; 00278 card64 UnitBytesSent[RTPConstants::RTPMaxQualityLayers]; 00279 cardinal UnitPacketsSent[RTPConstants::RTPMaxQualityLayers]; 00280 cardinal PacketsPerSecond[RTPConstants::RTPMaxQualityLayers]; 00281 card64 BytesPerSecond[RTPConstants::RTPMaxQualityLayers]; 00282 00283 #else 00284 00285 void update(const AbstractQoSDescription* aqd); 00286 00287 BandwidthManager* BandwidthMgr; 00288 cardinal Bandwidth[RTPConstants::RTPMaxQualityLayers]; 00289 double BufferDelay[RTPConstants::RTPMaxQualityLayers]; 00290 00291 #endif 00292 00293 #ifdef USE_TRAFFICSHAPER 00294 TrafficShaper SenderReportBuffer; 00295 TrafficShaper Shaper[RTPConstants::RTPMaxQualityLayers]; 00296 #endif 00297 }; 00298 00299 00300 } 00301 00302 00303 #include "rtpsender.icc" 00304 00305 00306 #endif