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

# RTPDuplex(3)

A peer associated RTP socket pair for physically connected peer hosts.

## NAME

RTPDuplex - A peer associated RTP socket pair for physically connected peer hosts.

## SYNOPSIS

`#include <cc++/rtp.h>`

Inherits **RTPDataQueue**, UDPReceive, and UDPTransmit.

### Public Member Functions

**RTPDuplex** (const InetAddress &bind, tpport\_t local, tpport\_t remote)\
 virtual **~RTPDuplex** ()\
 UDPTransmit::Error **connect** (const InetHostAddress &host, tpport\_t port=0)\

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

bool **isPendingData** (**microtimeout\_t** timeout)\
 size\_t **sendData** (const unsigned char \*const buffer, size\_t len)\
 size\_t **recvData** (unsigned char \*buffer, size\_t len, InetHostAddress &na, tpport\_t &tp)\
 void **setDataPeer** (const InetAddress &, tpport\_t)\
 void **setControlPeer** (const InetAddress &, tpport\_t)\
 size\_t **getNextDataPacketSize** () const\
 **SyncSource** & **getPeer** ()\

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.

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.  virtual bool **end2EndDelayed** (**IncomingRTPPktLink** &)\
 bool **insertRecvPacket** (**IncomingRTPPktLink** \*packetLink)\
 Insert a just received packet in the queue (both general and source specific queues).

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** ()\
 virtual size\_t **dispatchBYE** (const std::string &)\
 A plugin point for posting of BYE messages.

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** ()\

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\

### 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 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**\

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

A peer associated RTP socket pair for physically connected peer hosts.

This has no RTCP and assumes the receiver is connected to a known transmitter, hence no 'foreign' packets will arrive.

**Author**

David Sugar

RTP peer host over UDP.

**Examples** **rtpduphello.cpp**.

## Author

Generated automatically by Doxygen for ccRTP from the source code.
