RTP Trace System  1.0
rtpsender.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines