---
name: "AVPQueue"
section: "3"
platform: "linux"
package: "libccrtp-doc"
version: "2.0.9-4.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/AVPQueue"
---

# AVPQueue(3)

This class, an RTP/RTCP queue, adds audio/video profile (AVP) specific methods to the generic RTCP service queue (QueueRTCPManager).

## NAME

AVPQueue - This class, an RTP/RTCP queue, adds audio/video profile (AVP) specific methods to the generic RTCP service queue (**QueueRTCPManager**).

## SYNOPSIS

`#include <cqueue.h>`

Inherits **QueueRTCPManager**.

Inherited by **TRTPSessionBase\< DualRTPUDPIPv4Channel, DualRTPUDPIPv4Channel, AVPQueue \>**, and **TRTPSessionBase\< RTPDataChannel, RTCPChannel, ServiceQueue \>**.

### Public Member Functions

void **setControlBandwidth** (float fraction)\
 Specify the bandwith available for control (RTCP) packets.  float **getControlBandwidth** () const\

Public Member Functions inherited from **QueueRTCPManager** **RTCPSenderInfo** \* **getMRSenderInfo** (**SyncSource** &src)\
 Get the most recent sender report received from a synchronization source.  **RTCPReceiverInfo** \* **getMRReceiverInfo** (**SyncSource** &srcFrom)\
 Ask for the info in the most recent receiver report about the local source received from the source given as parameter.  void **setLeavingDelay** (**microtimeout\_t** delay)\
 Set how much time the stack will wait before deleting a synchronization source that has sent an RTCP BYE packet.  void **setEnd2EndDelay** (**microtimeout\_t** t)\
 This method sets the maximum end to end delay allowed.  **microtimeout\_t** **getDefaultEnd2EndDelay** () const\
 **microtimeout\_t** **getEnd2EndDelay** () const\
 void **setSendersControlFraction** (float fraction)\
 Specify the fraction of the total control bandwith to be dedicated to senders reports.  void **setMinRTCPInterval** (**microtimeout\_t** interval)\
 Manually set the minimum interval for sending RTP compound packets.  uint32 **getSendRTCPPacketCount** () const\
 Get the total number of RTCP packets sent until now.  void **setOutQueueCryptoContextCtrl** (**CryptoContextCtrl** \*cc)\
 Set output queue **CryptoContext**.  void **removeOutQueueCryptoContextCtrl** (**CryptoContextCtrl** \*cc)\
 Remove output queue **CryptoContext**.  **CryptoContextCtrl** \* **getOutQueueCryptoContextCtrl** (uint32 ssrc)\
 Get an output queue **CryptoContext** identified by SSRC.  void **setInQueueCryptoContextCtrl** (**CryptoContextCtrl** \*cc)\
 Set input queue **CryptoContext**.  void **removeInQueueCryptoContextCtrl** (**CryptoContextCtrl** \*cc)\
 Remove input queue **CryptoContext**.  **CryptoContextCtrl** \* **getInQueueCryptoContextCtrl** (uint32 ssrc)\
 Get an input queue **CryptoContext** identified by SSRC.

Public Member Functions inherited from **RTPDataQueue** void **setTypeOfService** (**Tos** tos)\
 Specify the kind of service the application expects to use.  void **enableStack** ()\
 Enable packet queue processing in the stack.  void **disableStack** ()\
 Disable packet queue processing in the stack.  bool **isActive** () const\
 Get active connection state flag.  uint32 **getCurrentTimestamp** () const\
 Get the timestamp that should be given for a packet whose payload sampling instant corresponds to the current system time.  void **setSessionBandwidth** (uint32 bw)\
 Specify the bandwidth of the current session.  uint32 **getDefaultSessionBandwidth** () const\
 uint32 **getSessionBandwidth** () const\
 void **setTimeclock** ()\
 Set the packet timeclock for synchronizing timestamps.  timeout\_t **getTimeclock** () const\
 Get the packet timeclock for synchronizing timestamps.

Public Member Functions inherited from **IncomingDataQueue** **SyncSourcesIterator** **begin** ()\
 **SyncSourcesIterator** **end** ()\
 const **AppDataUnit** \* **getData** (uint32 stamp, const **SyncSource** \*src=NULL)\
 Retreive data from a specific timestamped packet if such a packet is currently available in the receive buffer.  bool **isWaiting** (const **SyncSource** \*src=NULL) const\
 Determine if packets are waiting in the reception queue.  uint32 **getFirstTimestamp** (const **SyncSource** \*src=NULL) const\
 Get timestamp of first packet waiting in the queue.  void **setMinValidPacketSequence** (uint8 packets)\
 When receiving packets from a new source, it may be convenient to reject a first few packets before we are really sure the source is valid.  uint8 **getDefaultMinValidPacketSequence** () const\
 uint8 **getMinValidPacketSequence** () const\
 Get the minimun number of consecutive packets that must be received from a source before accepting its data packets.  void **setMaxPacketMisorder** (uint16 packets)\
 uint16 **getDefaultMaxPacketMisorder** () const\
 uint16 **getMaxPacketMisorder** () const\
 void **setMaxPacketDropout** (uint16 packets)\
 It also prevents packets sent after a restart of the source being immediately accepted.  uint16 **getDefaultMaxPacketDropout** () const\
 uint16 **getMaxPacketDropout** () const\
 void **setInQueueCryptoContext** (**CryptoContext** \*cc)\
 Set input queue **CryptoContext**.  void **removeInQueueCryptoContext** (**CryptoContext** \*cc)\
 Remove input queue **CryptoContext**.  **CryptoContext** \* **getInQueueCryptoContext** (uint32 ssrc)\
 Get an input queue **CryptoContext** identified by SSRC.

Public Member Functions inherited from **IncomingDataQueueBase** size\_t **getDefaultMaxRecvPacketSize** () const\
 size\_t **getMaxRecvPacketSize** () const\
 void **setMaxRecvPacketSize** (size\_t maxsize)\

Public Member Functions inherited from **RTPQueueBase** bool **setPayloadFormat** (const **PayloadFormat** &pf)\
 Set the payload format in use, for timing and payload type identification purposes.  uint32 **getLocalSSRC** () const\
 uint32 **getCurrentRTPClockRate** () const\
 Get the clock rate in RTP clock units (for instance, 8000 units per second for PCMU, or 90000 units per second for MP2T).  **PayloadType** **getCurrentPayloadType** () const\
 timeval **getInitialTime** () const\

Public Member Functions inherited from **OutgoingDataQueue** bool **addDestination** (const InetHostAddress &ia, tpport\_t dataPort=**DefaultRTPDataPort**, tpport\_t controlPort=0)\
 bool **addDestination** (const InetMcastAddress &ia, tpport\_t dataPort=**DefaultRTPDataPort**, tpport\_t controlPort=0)\
 bool **forgetDestination** (const InetHostAddress &ia, tpport\_t dataPort=**DefaultRTPDataPort**, tpport\_t controlPort=0)\
 bool **forgetDestination** (const InetMcastAddress &ia, tpport\_t dataPort=**DefaultRTPDataPort**, tpport\_t controlPort=0)\
 void **addContributor** (uint32 csrc)\
 Add csrc as the CSRC identifier of a new contributor.  bool **removeContributor** (uint32 csrc)\
 Remove CSRC from the list of contributors.  bool **isSending** () const\
 Determine if outgoing packets are waiting to send.  void **putData** (uint32 stamp, const unsigned char \*data=NULL, size\_t len=0)\
 This is used to create a data packet in the send queue.  void **sendImmediate** (uint32 stamp, const unsigned char \*data=NULL, size\_t len=0)\
 This is used to create a data packet and send it immediately.  void **setPadding** (uint8 **paddinglen**)\
 Set padding.  void **setMark** (bool mark)\
 Set marker bit for the packet in which the next data provided will be send.  bool **getMark** () const\
 Get whether the mark bit will be set in the next packet.  size\_t **setPartial** (uint32 timestamp, unsigned char \*data, size\_t offset, size\_t max)\
 Set partial data for an already queued packet.  **microtimeout\_t** **getDefaultSchedulingTimeout** () const\
 void **setSchedulingTimeout** (**microtimeout\_t** to)\
 Set the default scheduling timeout to use when no data packets are waiting to be sent.  **microtimeout\_t** **getDefaultExpireTimeout** () const\
 void **setExpireTimeout** (**microtimeout\_t** to)\
 Set the 'expired' timer for expiring packets pending in the send queue which have gone unsent and are already 'too late' to be sent now.  **microtimeout\_t** **getExpireTimeout** () const\
 uint32 **getSendPacketCount** () const\
 Get the total number of packets sent so far.  uint32 **getSendOctetCount** () const\
 Get the total number of octets (payload only) sent so far.  uint16 **getSequenceNumber** () const\
 Get the sequence number of the next outgoing packet.  void **setOutQueueCryptoContext** (**CryptoContext** \*cc)\
 Set output queue **CryptoContext**.  void **removeOutQueueCryptoContext** (**CryptoContext** \*cc)\
 Remove output queue **CryptoContext**.  **CryptoContext** \* **getOutQueueCryptoContext** (uint32 ssrc)\
 Get an output queue **CryptoContext** identified by SSRC.

Public Member Functions inherited from **OutgoingDataQueueBase** size\_t **getDefaultMaxSendSegmentSize** ()\
 void **setMaxSendSegmentSize** (size\_t size)\
 Set maximum payload segment size before fragmenting sends.  size\_t **getMaxSendSegmentSize** ()\

### Protected Member Functions

**AVPQueue** (uint32 size=**RTPDataQueue::defaultMembersHashSize**, **RTPApplication** &app=**defaultApplication**())\
 **AVPQueue** (uint32 ssrc, uint32 size=**RTPDataQueue::defaultMembersHashSize**, **RTPApplication** &app=**defaultApplication**())\
 Local SSRC is given instead of computed by the queue.  virtual **~AVPQueue** ()\

Protected Member Functions inherited from **QueueRTCPManager** **QueueRTCPManager** (uint32 size=**RTPDataQueue::defaultMembersHashSize**, **RTPApplication** &app=**defaultApplication**())\
 **QueueRTCPManager** (uint32 ssrc, uint32 size=**RTPDataQueue::defaultMembersHashSize**, **RTPApplication** &app=**defaultApplication**())\
 virtual **~QueueRTCPManager** ()\
 const **RTPApplication** & **getApplication** ()\
 void **setControlBandwidth** (float fraction)\
 float **getControlBandwidth** () const\
 void **controlTransmissionService** ()\
 Build and send RTCP packets following timing rules (including the 'timer reconsideration' algorithm).  void **controlReceptionService** ()\
 Process incoming RTCP packets pending in the control reception socket.  bool **checkSSRCInRTCPPkt** (**SyncSourceLink** &sourceLink, bool is\_new, InetAddress &na, tpport\_t tp)\
 Appy collision and loop detection and correction algorithm when receiving RTCP packets.  void **endQueueRTCPManager** ()\
 virtual void **onGotSR** (**SyncSource** &source, **SendReport** &SR, uint8 blocks)\
 Plug-in for processing (acquire information carried in) an incoming RTCP Sender Report.  virtual void **onGotRR** (**SyncSource** &source, **RecvReport** &RR, uint8 blocks)\
 Plug-in for processing (acquire information carried in) an incoming RTCP Receiver Report.  bool **onGotSDES** (**SyncSource** &source, **RTCPPacket** &pkt)\
 virtual bool **onGotSDESChunk** (**SyncSource** &source, **SDESChunk** &chunk, size\_t len)\
 Plug-in for handling of SDES chunks.  virtual void **onGotAPP** (**SyncSource** &, **RTCPCompoundHandler::APPPacket** &, size\_t)\
 Plug-in for handling of APP (application specific) RTCP packets.  timeval **getRTCPCheckInterval** ()\
 uint32 **getLastSendPacketCount** () const\
 Get the number of data packets sent at the time the last SR was generated.  void **setPrevMembersNum** (uint32 n)\
 uint32 **getPrevMembersCount** () const\
 size\_t **dispatchBYE** (const std::string &reason)\
 This method is used to send an RTCP BYE packet.  size\_t **sendControlToDestinations** (unsigned char \*buffer, size\_t len)\

Protected Member Functions inherited from **RTPDataQueue** **RTPDataQueue** (uint32 size=**defaultMembersHashSize**)\
 Constructor.  **RTPDataQueue** (uint32 \*ssrc, uint32 size=**defaultMembersHashSize**)\
 Using this constructor you can start a session with the given ssrc, instead of the usual randomly generated one.  virtual **~RTPDataQueue** ()\
 The queue destructor flushes the queue and stops all services.  virtual void **timerTick** ()\
 A plugin point for timer tick driven events.  void **renewLocalSSRC** ()\
 void **endQueue** ()\
 This method ends the queue.  virtual bool **isPendingData** (**microtimeout\_t** timeout)=0\
 This function is used to check for and schedule against arriving packets based on the derived connection type.

Protected Member Functions inherited from **IncomingDataQueue** **IncomingDataQueue** (uint32 size)\
 virtual **~IncomingDataQueue** ()\
 bool **checkSSRCInIncomingRTPPkt** (**SyncSourceLink** &sourceLink, bool is\_new, InetAddress &na, tpport\_t tp)\
 Apply collision and loop detection and correction algorithm when receiving RTP data packets.  void **setSourceExpirationPeriod** (uint8 intervals)\
 Set the number of RTCP intervals that the stack will wait to change the state of a source from stateActive to stateInactive, or to delete the source after being in stateInactive.  virtual size\_t **takeInDataPacket** ()\
 This function is used by the service thread to process the next incoming packet and place it in the receive list.  **IncomingDataQueue::IncomingRTPPktLink** \* **getWaiting** (uint32 timestamp, const **SyncSource** \*src=NULL)\
 This is used to fetch a packet in the receive queue and to expire packets older than the current timestamp.  bool **recordReception** (**SyncSourceLink** &srcLink, const **IncomingRTPPkt** &pkt, const timeval recvtime)\
 Log reception of a new RTP packet from this source.  void **recordExtraction** (const **IncomingRTPPkt** &pkt)\
 Log extraction of a packet from this source from the scheduled reception queue.  void **purgeIncomingQueue** ()\
 virtual void **onNewSyncSource** (const **SyncSource** &)\
 Virtual called when a new synchronization source has joined the session.  virtual bool **onRTPPacketRecv** (**IncomingRTPPkt** &)\
 A virtual function to support parsing of arriving packets to determine if they should be kept in the queue and to dispatch events.  virtual void **onExpireRecv** (**IncomingRTPPkt** &)\
 A hook to filter packets in the receive queue that are being expired.  virtual bool **onSRTPPacketError** (**IncomingRTPPkt** &pkt, int32 errorCode)\
 A hook that gets called if the decoding of an incoming SRTP was erroneous.  bool **insertRecvPacket** (**IncomingRTPPktLink** \*packetLink)\
 Insert a just received packet in the queue (both general and source specific queues).  virtual size\_t **recvData** (unsigned char \*buffer, size\_t length, InetHostAddress &host, tpport\_t &port)=0\
 This function performs the physical I/O for reading a packet from the source.  virtual size\_t **getNextDataPacketSize** () const =0\

Protected Member Functions inherited from **IncomingDataQueueBase** **IncomingDataQueueBase** ()\
 virtual **~IncomingDataQueueBase** ()\

Protected Member Functions inherited from **RTPQueueBase** **RTPQueueBase** (uint32 \*ssrc=NULL)\
 void **setLocalSSRC** (uint32 ssrc)\
 uint32 **getLocalSSRCNetwork** () const\
 virtual **~RTPQueueBase** ()\

Protected Member Functions inherited from **MembershipBookkeeping** **MembershipBookkeeping** (uint32 initialSize=**defaultMembersHashSize**)\
 The initial size is a hint to allocate the resources needed in order to keep the members' identifiers and associated information.  virtual **~MembershipBookkeeping** ()\
 Purges all RTPSource structures created during the session, as well as the hash table and the list of sources.  **SyncSourceLink** \* **getLink** (const **SyncSource** &source) const\
 bool **isMine** (const **SyncSource** &source) const\
 Get whether a synchronization source is recorded in this membership controller.  bool **isRegistered** (uint32 ssrc)\
 Returns whether there is already a synchronizacion source with 'ssrc' SSRC identifier.  **SyncSourceLink** \* **getSourceBySSRC** (uint32 ssrc, bool &created)\
 Get the description of a source by its `ssrc` identifier.  bool **BYESource** (uint32 ssrc)\
 Mark the source identified by `ssrc` as having sent a BYE packet.  bool **removeSource** (uint32 ssrc)\
 Remove the description of the source identified by `ssrc`  **SyncSourceLink** \* **getFirst** ()\
 **SyncSourceLink** \* **getLast** ()\
 uint32 **getMembersCount** ()\
 void **setMembersCount** (uint32 n)\
 uint32 **getSendersCount** ()\
 size\_t **getDefaultMembersHashSize** ()\

Protected Member Functions inherited from **SyncSourceHandler** **SyncSourceHandler** ()\
 virtual **~SyncSourceHandler** ()\
 void \* **getLink** (const **SyncSource** &source) const\
 This requires **SyncSource** - **SyncSourceHandler** friendship.  void **setLink** (**SyncSource** &source, void \*link)\
 void **setParticipant** (**SyncSource** &source, **Participant** &p)\
 void **setState** (**SyncSource** &source, **SyncSource::State** ns)\
 void **setSender** (**SyncSource** &source, bool active)\
 void **setDataTransportPort** (**SyncSource** &source, tpport\_t p)\
 void **setControlTransportPort** (**SyncSource** &source, tpport\_t p)\
 void **setNetworkAddress** (**SyncSource** &source, InetAddress addr)\

Protected Member Functions inherited from **ParticipantHandler** **ParticipantHandler** ()\
 virtual **~ParticipantHandler** ()\
 void **setSDESItem** (**Participant** \*part, **SDESItemType** item, const std::string &val)\
 void **setPRIVPrefix** (**Participant** \*part, const std::string val)\

Protected Member Functions inherited from **ApplicationHandler** **ApplicationHandler** ()\
 virtual **~ApplicationHandler** ()\
 void **addParticipant** (**RTPApplication** &app, **Participant** &part)\
 void **removeParticipant** (**RTPApplication** &app, RTPApplication::ParticipantLink \*pl)\

Protected Member Functions inherited from **ConflictHandler** **ConflictHandler** ()\
 virtual **~ConflictHandler** ()\
 **ConflictingTransportAddress** \* **searchDataConflict** (InetAddress na, tpport\_t dtp)\
 **ConflictingTransportAddress** \* **searchControlConflict** (InetAddress na, tpport\_t ctp)\
 void **updateConflict** (**ConflictingTransportAddress** &ca)\
 void **addConflict** (const InetAddress &na, tpport\_t dtp, tpport\_t ctp)\

Protected Member Functions inherited from **OutgoingDataQueue** **OutgoingDataQueue** ()\
 virtual **~OutgoingDataQueue** ()\
 void **dispatchImmediate** (**OutgoingRTPPkt** \*packet)\
 This is used to write the RTP data packet to one or more destinations.  **microtimeout\_t** **getSchedulingTimeout** ()\
 This computes the timeout period for scheduling transmission of the next packet at the 'head' of the send buffer.  size\_t **dispatchDataPacket** ()\
 This function is used by the service thread to process the next outgoing packet pending in the sending queue.  void **setNextSeqNum** (uint32 seqNum)\
 For thoses cases in which the application requires a method to set the sequence number for the outgoing stream (such as for implementing the RTSP PLAY command).  uint32 **getCurrentSeqNum** (void)\
 void **setInitialTimestamp** (uint32 ts)\
 uint32 **getInitialTimestamp** ()\
 void **purgeOutgoingQueue** ()\
 virtual void **setControlPeer** (const InetAddress &host, tpport\_t port)\

Protected Member Functions inherited from **OutgoingDataQueueBase** **OutgoingDataQueueBase** ()\
 virtual **~OutgoingDataQueueBase** ()\

Protected Member Functions inherited from **DestinationListHandler** void **writeLockDestinationList** () const\
 bool **addDestinationToList** (const InetAddress &ia, tpport\_t data, tpport\_t control)\
 Locks the object before modifying it.  bool **removeDestinationFromList** (const InetAddress &ia, tpport\_t dataPort, tpport\_t controlPort)\
 Locks the object before modifying it.  **DestinationListHandler** ()\
 **~DestinationListHandler** ()\
 bool **isSingleDestination** () const\
 Get whether there is only a destination in the list.  **TransportAddress** \* **getFirstDestination** () const\
 void **lockDestinationList** () const\
 void **unlockDestinationList** () const\

Protected Member Functions inherited from **RTCPCompoundHandler** **RTCPCompoundHandler** (uint16 mtu=**defaultPathMTU**)\
 **~RTCPCompoundHandler** ()\
 bool **checkCompoundRTCPHeader** (size\_t len)\
 Perform RTCP compound packet header validity check as specified in draft-ietv-avt-rtp-new.  void **setPathMTU** (uint16 mtu)\
 uint16 **getPathMTU** ()\

### Additional Inherited Members

Public Types inherited from **RTPDataQueue** enum **Tos** { **tosBestEffort**, **tosEnhanced** }\
 **rtp.h** cc++/rtp.h

Static Public Member Functions inherited from **IncomingDataQueue** static size\_t **getDefaultMembersSize** ()\

Protected Types inherited from **RTCPCompoundHandler** enum { **defaultPathMTU** = 1500 }\

Protected Attributes inherited from **IncomingDataQueue** ThreadLock **recvLock**\
 **IncomingRTPPktLink** \* **recvFirst**\
 **IncomingRTPPktLink** \* **recvLast**\
 uint8 **minValidPacketSequence**\
 uint16 **maxPacketMisorder**\
 uint16 **maxPacketDropout**\
 uint8 **sourceExpirationPeriod**\
 Mutex **cryptoMutex**\
 std::list\< **CryptoContext** \* \> **cryptoContexts**\

Protected Attributes inherited from **ConflictHandler** **ConflictingTransportAddress** \* **firstConflict**\
 **ConflictingTransportAddress** \* **lastConflict**\

Protected Attributes inherited from **OutgoingDataQueue** Mutex **cryptoMutex**\
 std::list\< **CryptoContext** \* \> **cryptoContexts**\

Protected Attributes inherited from **DestinationListHandler** std::list\< **TransportAddress** \* \> **destList**\

Protected Attributes inherited from **RTCPCompoundHandler** unsigned char \* **rtcpSendBuffer**\
 unsigned char \* **rtcpRecvBuffer**\

Static Protected Attributes inherited from **IncomingDataQueue** static const uint8 **defaultMinValidPacketSequence**\
 static const uint16 **defaultMaxPacketMisorder**\
 static const uint16 **defaultMaxPacketDropout**\
 static const size\_t **defaultMembersSize**\

Static Protected Attributes inherited from **MembershipBookkeeping** static const size\_t **defaultMembersHashSize**\
 static const uint32 **SEQNUMMOD**\

## Detailed Description

This class, an RTP/RTCP queue, adds audio/video profile (AVP) specific methods to the generic RTCP service queue (**QueueRTCPManager**).

**Author**

Federico Montesino Pouzols fedemp@altern.org

## Constructor & Destructor Documentation

### AVPQueue::AVPQueue (uint32 size = RTPDataQueue::defaultMembersHashSize, RTPApplication & app = defaultApplication`()`)` [inline]`, ` [protected]`

### AVPQueue::AVPQueue (uint32 ssrc, uint32 size = RTPDataQueue::defaultMembersHashSize, RTPApplication & app = defaultApplication`()`)` [inline]`, ` [protected]`

Local SSRC is given instead of computed by the queue.

### virtual AVPQueue::~AVPQueue ()` [inline]`, ` [protected]`, ` [virtual]`

## Member Function Documentation

### float AVPQueue::getControlBandwidth () const` [inline]`

### void AVPQueue::setControlBandwidth (float fraction)` [inline]`

Specify the bandwith available for control (RTCP) packets. This method sets the global control bandwidth for both sender and receiver reports. As recommended in RFC 1890, 1/4 of the total control bandwidth is dedicated to senders, whereas 3/4 are dedicated to receivers.

**Parameters**

*fraction* fraction of the session bandwidth, between 0 and 1

**Note**

If this method is not called, it is assumed that the control bandwidth is equal to 5% of the session bandwidth. Note also that the RFC RECOMMENDS the 5%.

## Author

Generated automatically by Doxygen for ccRTP from the source code.
