ccRTP 2.1.2
|
A generic outgoing RTP data queue supporting multiple destinations. More...
#include <oqueue.h>
Data Structures | |
struct | OutgoingRTPPktLink |
Public Member Functions | |
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. More... | |
bool | removeContributor (uint32 csrc) |
Remove CSRC from the list of contributors. More... | |
bool | isSending () const |
Determine if outgoing packets are waiting to send. More... | |
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. More... | |
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. More... | |
void | setPadding (uint8 paddinglen) |
Set padding. More... | |
void | setMark (bool mark) |
Set marker bit for the packet in which the next data provided will be send. More... | |
bool | getMark () const |
Get wheter the mark bit will be set in the next packet. More... | |
size_t | setPartial (uint32 timestamp, unsigned char *data, size_t offset, size_t max) |
Set partial data for an already queued packet. More... | |
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. More... | |
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. More... | |
microtimeout_t | getExpireTimeout () const |
uint32 | getSendPacketCount () const |
Get the total number of packets sent so far. More... | |
uint32 | getSendOctetCount () const |
Get the total number of octets (payload only) sent so far. More... | |
uint16 | getSequenceNumber () const |
Get the sequence number of the next outgoing packet. More... | |
void | setOutQueueCryptoContext (CryptoContext *cc) |
Set ouput queue CryptoContext. More... | |
void | removeOutQueueCryptoContext (CryptoContext *cc) |
Remove output queue CryptoContext. More... | |
CryptoContext * | getOutQueueCryptoContext (uint32 ssrc) |
Get an output queue CryptoContext identified by SSRC. More... | |
size_t | getDefaultMaxSendSegmentSize () |
void | setMaxSendSegmentSize (size_t size) |
Set maximum payload segment size before fragmenting sends. More... | |
size_t | getMaxSendSegmentSize () |
bool | setPayloadFormat (const PayloadFormat &pf) |
Set the payload format in use, for timing and payload type identification purposes. More... | |
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). More... | |
PayloadType | getCurrentPayloadType () const |
timeval | getInitialTime () const |
Protected Member Functions | |
OutgoingDataQueue () | |
virtual | ~OutgoingDataQueue () |
void | dispatchImmediate (OutgoingRTPPkt *packet) |
This is used to write the RTP data packet to one or more destinations. More... | |
microtimeout_t | getSchedulingTimeout () |
This computes the timeout period for scheduling transmission of the next packet at the "head" of the send buffer. More... | |
size_t | dispatchDataPacket () |
This function is used by the service thread to process the next outgoing packet pending in the sending queue. More... | |
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). More... | |
uint32 | getCurrentSeqNum (void) |
void | setInitialTimestamp (uint32 ts) |
uint32 | getInitialTimestamp () |
void | purgeOutgoingQueue () |
virtual void | setControlPeer (const InetAddress &host, tpport_t port) |
void | setLocalSSRC (uint32 ssrc) |
uint32 | getLocalSSRCNetwork () const |
virtual size_t | dispatchBYE (const std::string &) |
A plugin point for posting of BYE messages. More... | |
virtual void | renewLocalSSRC () |
bool | isSingleDestination () const |
Get whether there is only a destination in the list. More... | |
TransportAddress * | getFirstDestination () const |
void | lockDestinationList () const |
void | unlockDestinationList () const |
void | writeLockDestinationList () const |
bool | addDestinationToList (const InetAddress &ia, tpport_t data, tpport_t control) |
Locks the object before modifying it. More... | |
bool | removeDestinationFromList (const InetAddress &ia, tpport_t dataPort, tpport_t controlPort) |
Locks the object before modifying it. More... | |
Protected Attributes | |
Mutex | cryptoMutex |
std::list< CryptoContext * > | cryptoContexts |
std::list< TransportAddress * > | destList |
Private Member Functions | |
virtual void | onExpireSend (OutgoingRTPPkt &) |
A hook to filter packets being sent that have been expired. More... | |
virtual void | setDataPeer (const InetAddress &host, tpport_t port) |
virtual size_t | sendData (const unsigned char *const buffer, size_t len) |
This function performs the physical I/O for writing a packet to the destination. More... | |
Private Attributes | |
ThreadLock | sendLock |
OutgoingRTPPktLink * | sendFirst |
OutgoingRTPPktLink * | sendLast |
uint32 | initialTimestamp |
microtimeout_t | schedulingTimeout |
microtimeout_t | expireTimeout |
struct { | |
uint32 packetCount | |
uint32 octetCount | |
uint16 sendSeq | |
uint32 sendSources [16] | |
uint16 sendCC | |
uint8 paddinglen | |
bool marked | |
bool complete | |
uint32 initialTimestamp | |
timeval overflowTime | |
} | sendInfo |
Static Private Attributes | |
static const microtimeout_t | defaultSchedulingTimeout = 8000 |
Schedule at 8 ms. More... | |
static const microtimeout_t | defaultExpireTimeout = 40000 |
Packets unsent will expire after 40 ms. More... | |
A generic outgoing RTP data queue supporting multiple destinations.
|
protected |
Definition at line 177 of file outqueue.cpp.
|
inlineprotectedvirtual |
void OutgoingDataQueue::addContributor | ( | uint32 | csrc | ) |
Add csrc as the CSRC identifier of a new contributor.
This method adds the CSRC identifier to a list of contributors that will be inserted in every packet enqueued from now on.
bool OutgoingDataQueue::addDestination | ( | const InetHostAddress & | ia, |
tpport_t | dataPort = DefaultRTPDataPort , |
||
tpport_t | controlPort = 0 |
||
) |
Definition at line 219 of file outqueue.cpp.
bool OutgoingDataQueue::addDestination | ( | const InetMcastAddress & | ia, |
tpport_t | dataPort = DefaultRTPDataPort , |
||
tpport_t | controlPort = 0 |
||
) |
Definition at line 233 of file outqueue.cpp.
|
protectedinherited |
Locks the object before modifying it.
Definition at line 74 of file outqueue.cpp.
|
inlineprotectedvirtualinherited |
A plugin point for posting of BYE messages.
- | reason to leave the RTP session. |
Reimplemented in QueueRTCPManager.
Definition at line 228 of file queuebase.h.
|
protected |
This function is used by the service thread to process the next outgoing packet pending in the sending queue.
Definition at line 549 of file outqueue.cpp.
|
protected |
This is used to write the RTP data packet to one or more destinations.
It is used by both sendImmediate and by dispatchDataPacket.
RTP | packet to send. |
Definition at line 505 of file outqueue.cpp.
bool OutgoingDataQueue::forgetDestination | ( | const InetHostAddress & | ia, |
tpport_t | dataPort = DefaultRTPDataPort , |
||
tpport_t | controlPort = 0 |
||
) |
Definition at line 247 of file outqueue.cpp.
bool OutgoingDataQueue::forgetDestination | ( | const InetMcastAddress & | ia, |
tpport_t | dataPort = DefaultRTPDataPort , |
||
tpport_t | controlPort = 0 |
||
) |
Definition at line 257 of file outqueue.cpp.
|
inlineinherited |
Definition at line 198 of file queuebase.h.
|
inlineinherited |
Get the clock rate in RTP clock units (for instance, 8000 units per second for PCMU, or 90000 units per second for MP2T).
This value depends on what payload format has been selected using setPayloadFormat().
Definition at line 195 of file queuebase.h.
|
inlineprotected |
|
inline |
|
inlineinherited |
Definition at line 259 of file queuebase.h.
|
inline |
|
inline |
|
inlineinherited |
|
inlineinherited |
Definition at line 201 of file queuebase.h.
|
inlineprotected |
|
inlineinherited |
Definition at line 184 of file queuebase.h.
|
inlineprotectedinherited |
Definition at line 214 of file queuebase.h.
|
inline |
|
inlineinherited |
Definition at line 273 of file queuebase.h.
CryptoContext * OutgoingDataQueue::getOutQueueCryptoContext | ( | uint32 | ssrc | ) |
Get an output queue CryptoContext identified by SSRC.
ssrc | Request CryptoContext for this incoming SSRC |
Definition at line 661 of file outqueue.cpp.
|
protected |
This computes the timeout period for scheduling transmission of the next packet at the "head" of the send buffer.
If no packets are waiting, a default timeout is used. This actually forms the "isPending()" timeout of the rtp receiver in the service thread.
Definition at line 303 of file outqueue.cpp.
|
inline |
|
inline |
|
inline |
bool OutgoingDataQueue::isSending | ( | void | ) | const |
Determine if outgoing packets are waiting to send.
Definition at line 294 of file outqueue.cpp.
|
inlineinherited |
|
inlineinherited |
|
inlineprivatevirtual |
|
protected |
Definition at line 203 of file outqueue.cpp.
void OutgoingDataQueue::putData | ( | uint32 | stamp, |
const unsigned char * | data = NULL , |
||
size_t | len = 0 |
||
) |
This is used to create a data packet in the send queue.
Sometimes a "NULL" or empty packet will be used instead, and these are known as "silent" packets. "Silent" packets are used simply to "push" the scheduler along more accurately by giving the appearence that a next packet is waiting to be sent and to provide a valid timestamp for that packet.
stamp | Timestamp for expected send time of packet. |
data | Value or NULL if special "silent" packet. |
len | May be 0 to indicate a default by payload type. |
Definition at line 404 of file outqueue.cpp.
bool OutgoingDataQueue::removeContributor | ( | uint32 | csrc | ) |
Remove CSRC from the list of contributors.
|
protectedinherited |
Locks the object before modifying it.
Definition at line 85 of file outqueue.cpp.
void OutgoingDataQueue::removeOutQueueCryptoContext | ( | CryptoContext * | cc | ) |
Remove output queue CryptoContext.
The endQueue method (provided by RTPQueue) also deletes all registered CryptoContexts.
cc | Pointer to initialized CryptoContext to remove. |
Definition at line 636 of file outqueue.cpp.
|
inlineprotectedvirtualinherited |
Reimplemented in IncomingDataQueue, and RTPDataQueue.
Definition at line 232 of file queuebase.h.
|
inlineprivatevirtual |
This function performs the physical I/O for writing a packet to the destination.
It is a virtual that is overriden in the derived class.
buffer | Pointer to data to write. |
len | Length of data to write. |
Reimplemented in RTPDuplex.
void OutgoingDataQueue::sendImmediate | ( | uint32 | stamp, |
const unsigned char * | data = NULL , |
||
size_t | len = 0 |
||
) |
This is used to create a data packet and send it immediately.
Sometimes a "NULL" or empty packet will be used instead, and these are known as "silent" packets. "Silent" packets are used simply to "push" the scheduler along more accurately by giving the appearence that a next packet is waiting to be sent and to provide a valid timestamp for that packet.
stamp | Timestamp immediate send time of packet. |
data | Value or NULL if special "silent" packet. |
len | May be 0 to indicate a default by payload type. |
Definition at line 464 of file outqueue.cpp.
|
inlineprotectedvirtual |
|
inlineprivatevirtual |
|
inline |
|
inlineprotected |
|
inlineprotectedinherited |
Definition at line 211 of file queuebase.h.
|
inline |
Set marker bit for the packet in which the next data provided will be send.
When transmitting audio, should be set for the first packet of a talk spurt. When transmitting video, should be set for the last packet for a video frame.
mark | Marker bit value for next packet. |
|
inlineinherited |
Set maximum payload segment size before fragmenting sends.
size | Maximum payload size. |
Definition at line 269 of file queuebase.h.
|
inlineprotected |
void OutgoingDataQueue::setOutQueueCryptoContext | ( | CryptoContext * | cc | ) |
Set ouput queue CryptoContext.
The endQueue method (provided by RTPQueue) deletes all registered CryptoContexts.
cc | Pointer to initialized CryptoContext. |
Definition at line 617 of file outqueue.cpp.
|
inline |
size_t OutgoingDataQueue::setPartial | ( | uint32 | timestamp, |
unsigned char * | data, | ||
size_t | offset, | ||
size_t | max | ||
) |
Set partial data for an already queued packet.
This is often used for multichannel data.
timestamp | Timestamp of packet. |
data | Buffer to copy from. |
offset | Offset to copy from. |
max | Maximum data size. |
Definition at line 581 of file outqueue.cpp.
|
inlineinherited |
Set the payload format in use, for timing and payload type identification purposes.
pf | payload format to use from now on. |
Definition at line 177 of file queuebase.h.
|
inline |
|
inlineinherited |
|
inlineprotectedinherited |
|
protected |
|
staticprivate |
|
staticprivate |
|
protectedinherited |
|
private |
|
private |
|
private |
struct { ... } OutgoingDataQueue::sendInfo |
|
private |