Source: rtppacket.h


Annotated List
Files
Globals
Hierarchy
Index
// ##########################################################################
// ####                                                                  ####
// ####                      RTP Audio Server Project                    ####
// ####                    ============================                  ####
// ####                                                                  ####
// #### RTP Packet                                                       ####
// ####                                                                  ####
// #### Version 1.00  --  September 17, 2000                             ####
// ####                                                                  ####
// #### Copyright (C) 1999  Thomas Dreibholz                             ####
// ####               2000  Universität Bonn, Abt. IV                    ####
// ####                     EMail: Dreibholz@bigfoot.com                 ####
// ####                     WWW:   http://www.bigfoot.com/~dreibholz     ####
// ####                                                                  ####
// ##########################################################################


#ifndef RTPPACKET_H
#define RTPPACKET_H


#include "system.h"
#include "socket.h"


namespace Coral {
namespace RTPConstants {


/**
  * RTP maximum payload limit.
  *
  */
const cardinal RTPMaxPayloadLimit = 8192;

/**
  * RTP default maximum payload is 1376
  * = 1500 - (12 + 16 * 4) - 40 - 8
  * = Maximum ethernet data length - RTPPacket size - (16 * CSRC) - UDP header size - IPv6 header size.
  */
const cardinal RTPDefaultMaxPayload = 1376;

/**
  * Default RTP header size (CC = 0).
  */
const cardinal RTPDefaultHeaderSize = 12;

/**
  * Constant for RTP version.
  */
const card8 RTPVersion = 2;

/**
  * Constant for microseconds per RTP timestamp.
  */
const double RTPMicroSecondsPerTimeStamp = 1000.0 / 16.0;


#ifdef USE_TRANSPORTINFO

/**
  * Maximum number of layers in one stream.
  * Note: This is *not* a constant of RFC 1889 but a limit for the
  * Coral RTP classes!
  */
const cardinal RTPMaxQualityLayers = 4;

#else

/**
  * Maximum number of layers in one stream.
  * Note: This is *not* a constant of RFC 1889 but a limit for the
  * Coral RTP classes!
  */
const cardinal RTPMaxQualityLayers = 16;

#endif


}
}


namespace Coral {


/**
  * This class manages an RTP packet
  *
  * @short   RTP Packet
  * @author  Thomas Dreibholz (Dreibholz@bigfoot.com)
  * @version 1.0
  *
  * @see RTPSender
  * @see RTPReceiver
  */
class RTPPacket
{
   // ====== Constructor ====================================================
   public:
   /**
     * Constructor.
     */
   RTPPacket();   


   // ====== Get methods ====================================================
   /**
     * Get version.
     *
     * @return RTP Version.
     */
   inline card8 getVersion() const;

   /**
     * Get padding.
     *
     * @return RTP Padding.
     */
   inline card8 getPadding() const;

   /**
     * Get extension.
     *
     * @return RTP Extension.
     */
   inline card8 getExtension() const;

   /**
     * Get CSRC count.
     *
     * @return RTP CSRC count.
     */
   inline card8 getCSRCCount() const;

   /**
     * Get marker.
     *
     * @return RTP Marker.
     */
   inline bool getMarker() const;

   /**
     * Get payload type.
     *
     * @return RTP Payload type.
     */     
   inline card8 getPayloadType() const;

   /**
     * Get sequence number.
     *
     * @return RTP Sequence number.
     */
   inline card16 getSequenceNumber() const;

   /**
     * Get time stamp.
     *
     * @return RTP Time stamp.
     */
   inline card32 getTimeStamp() const;

   /**
     * Get SSRC.
     *
     * @return RTP SSRC.
     */
   inline card32 getSSRC() const;

   /**
     * Get CSRC at given index.
     *
     * @param index Index.
     * @return RTP CSRC.
     */
   inline card32 getCSRC(cardinal index) const;


   /**
     * Calculate header size.
     *
     * @return Header size.
     */
   inline cardinal calculateHeaderSize() const;

   /**
     * Get pointer to payload data.
     *
     * @return pointer to payload data.
     */
   inline char* getPayloadData() const;

   /**
     * Get maximum payload size.
     *
     * @return Maximum payload size.
     */
   inline cardinal getMaxPayloadSize() const;
  

   // ====== Set methods ====================================================
   /**
     * Set version.
     *
     * @param version RTP Version.
     */
   inline void setVersion(const card8 version);

   /**
     * Set padding.
     *
     * @param padding RTP Padding.
     */
   inline void setPadding(const card8 padding);
   
   /**
     * Set extension.
     *
     * @param extension RTP Extension.
     */
   inline void setExtension(const card8 extension);

   /**
     * Set CSRC count.
     *
     * @param count RTP CSRC count.
     */
   inline void setCSRCCount(const card8 count);

   /**
     * Set marker.
     *
     * @param marker RTP Marker.
     */
   inline void setMarker(const bool marker);

   /**
     * Set payload type.
     *
     * @param payloadType RTP Payload type.
     */
   inline void setPayloadType(const card8 payloadType);

   /**
     * Set sequence number.
     *
     * @param sequenceNumber RTP Sequence number.
     */
   inline void setSequenceNumber(const card16 sequenceNumber);

   /**
     * Set time stamp.
     *
     * @param timeStamp RTP timeStamp.
     */
   inline void setTimeStamp(const card32 timeStamp);

   /**
     * Set SSRC.
     *
     * @param ssrc RTP SSRC.
     */
   inline void setSSRC(const card32 ssrc);

   /**
     * Set CSRC at given index.
     *
     * @param index Index.
     * @param csrc CSRC.
     */
   inline void setCSRC(const cardinal index, const card32 csrc);


   /**
     * Output operator.
     */
   friend ostream& operator<<(ostream& os, const RTPPacket& packet);


   // ====== Private data ===================================================   
   private:
#if CPU_BYTEORDER == BIG_ENDIAN
   card8 V:2;                 // Version
   card8 P:1;                 // Padding
   card8 X:1;                 // Extension
   card8 CC:4;                // CSRC Count
   card8 M:1;                 // Marker
   card8 PT:7;                // Payload Type
#elif CPU_BYTEORDER == LITTLE_ENDIAN
   card8 CC:4;                // CSRC Count
   card8 X:1;                 // Extension
   card8 P:1;                 // Padding
   card8 V:2;                 // Version
   card8 PT:7;                // Payload Type
   card8 M:1;                 // Marker
#else
#error "Unknown CPU_BYTEORDER setting!"
#endif
   card16 SequenceNumber;           // Sequence number
   card32 TimeStamp;                // TimeStamp
   card32 SSRC;                     // Synchronization Source (SSRC) identifier
   card32 CSRC[16];                 // Contributing Source (CSRC) identifiers
   char   Data[RTPConstants::RTPMaxPayloadLimit];    // Payload data
};


}


#include "rtppacket.icc"


#endif

Generated by: viper@odin on Mon Oct 16 11:49:26 2000, using kdoc 2.0a36.