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