A generic outgoing RTP data queue supporting multiple destinations. More...
#include <oqueue.h>
Classes | |
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. | |
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 wheter 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 ouput queue CryptoContext. | |
void | removeOutQueueCryptoContext (CryptoContext *cc) |
Remove output queue CryptoContext. | |
CryptoContext * | getOutQueueCryptoContext (uint32 ssrc) |
Get an output queue CryptoContext identified by SSRC. | |
Protected Member Functions | |
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 Attributes | |
Mutex | cryptoMutex |
std::list< CryptoContext * > | cryptoContexts |
A generic outgoing RTP data queue supporting multiple destinations.
OutgoingDataQueue::OutgoingDataQueue | ( | ) | [protected] |
virtual OutgoingDataQueue::~OutgoingDataQueue | ( | ) | [inline, protected, virtual] |
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 InetMcastAddress & | ia, | |
tpport_t | dataPort = DefaultRTPDataPort , |
|||
tpport_t | controlPort = 0 | |||
) |
bool OutgoingDataQueue::addDestination | ( | const InetHostAddress & | ia, | |
tpport_t | dataPort = DefaultRTPDataPort , |
|||
tpport_t | controlPort = 0 | |||
) |
size_t OutgoingDataQueue::dispatchDataPacket | ( | ) | [protected] |
This function is used by the service thread to process the next outgoing packet pending in the sending queue.
void OutgoingDataQueue::dispatchImmediate | ( | OutgoingRTPPkt * | packet | ) | [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. |
bool OutgoingDataQueue::forgetDestination | ( | const InetMcastAddress & | ia, | |
tpport_t | dataPort = DefaultRTPDataPort , |
|||
tpport_t | controlPort = 0 | |||
) |
bool OutgoingDataQueue::forgetDestination | ( | const InetHostAddress & | ia, | |
tpport_t | dataPort = DefaultRTPDataPort , |
|||
tpport_t | controlPort = 0 | |||
) |
uint32 OutgoingDataQueue::getCurrentSeqNum | ( | void | ) | [inline, protected] |
microtimeout_t OutgoingDataQueue::getDefaultExpireTimeout | ( | ) | const [inline] |
microtimeout_t OutgoingDataQueue::getDefaultSchedulingTimeout | ( | ) | const [inline] |
microtimeout_t OutgoingDataQueue::getExpireTimeout | ( | ) | const [inline] |
uint32 OutgoingDataQueue::getInitialTimestamp | ( | ) | [inline, protected] |
bool OutgoingDataQueue::getMark | ( | ) | const [inline] |
Get wheter the mark bit will be set in the next packet.
CryptoContext* OutgoingDataQueue::getOutQueueCryptoContext | ( | uint32 | ssrc | ) |
Get an output queue CryptoContext identified by SSRC.
ssrc | Request CryptoContext for this incoming SSRC |
microtimeout_t OutgoingDataQueue::getSchedulingTimeout | ( | ) | [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.
uint32 OutgoingDataQueue::getSendOctetCount | ( | ) | const [inline] |
Get the total number of octets (payload only) sent so far.
uint32 OutgoingDataQueue::getSendPacketCount | ( | ) | const [inline] |
Get the total number of packets sent so far.
uint16 OutgoingDataQueue::getSequenceNumber | ( | ) | const [inline] |
Get the sequence number of the next outgoing packet.
bool OutgoingDataQueue::isSending | ( | ) | const |
Determine if outgoing packets are waiting to send.
void OutgoingDataQueue::purgeOutgoingQueue | ( | ) | [protected] |
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. |
bool OutgoingDataQueue::removeContributor | ( | uint32 | csrc | ) |
Remove CSRC from the list of contributors.
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. |
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. |
virtual void OutgoingDataQueue::setControlPeer | ( | const InetAddress & | host, | |
tpport_t | port | |||
) | [inline, protected, virtual] |
Reimplemented in RTPDuplex.
void OutgoingDataQueue::setExpireTimeout | ( | microtimeout_t | to | ) | [inline] |
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.
to | timeout to expire unsent packets in milliseconds. |
void OutgoingDataQueue::setInitialTimestamp | ( | uint32 | ts | ) | [inline, protected] |
void OutgoingDataQueue::setMark | ( | bool | mark | ) | [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. |
void OutgoingDataQueue::setNextSeqNum | ( | uint32 | seqNum | ) | [inline, protected] |
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).
seqNum | next sequence number to be used for outgoing packets. |
void OutgoingDataQueue::setOutQueueCryptoContext | ( | CryptoContext * | cc | ) |
Set ouput queue CryptoContext.
The endQueue method (provided by RTPQueue) deletes all registered CryptoContexts.
cc | Pointer to initialized CryptoContext. |
void OutgoingDataQueue::setPadding | ( | uint8 | paddinglen | ) | [inline] |
Set padding.
All outgoing packets will be transparently padded to a multiple of paddinglen.
paddinglen | pad packets to a length multiple of paddinglen. |
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. |
void OutgoingDataQueue::setSchedulingTimeout | ( | microtimeout_t | to | ) | [inline] |
Set the default scheduling timeout to use when no data packets are waiting to be sent.
to | timeout in milliseconds. |
std::list<CryptoContext *> OutgoingDataQueue::cryptoContexts [protected] |
Mutex OutgoingDataQueue::cryptoMutex [mutable, protected] |
timeval OutgoingDataQueue::overflowTime |
uint16 OutgoingDataQueue::sendCC |
uint16 OutgoingDataQueue::sendSeq |
uint32 OutgoingDataQueue::sendSources[16] |