3.2.10 RTPRawPacket
-------------------------------------------------------------------------头文件:rtprawpacket.h
类RTPRawPacket被传输组件用来保存收到的RTP和RTCP数据。接口如下:
RTPRawPacket(uint8_t *data, size_t datalen, RTPAddress *address, RTPTime &recvtime, bool rtp)
-----创建一个对象用来保存长度为datalen的data中的数据,注意:只保存指向数据的指针而不会复制数据!数据包的发送地址和收到的时间将分别保存到address和recvtime中。rtp标志用来区分收到的数据是RTP数据还是RTCP数据。
uint8_t *GetData()
-----返回指向数据包中数据的地址。
size_t GetDataLength() const
-----返回该对象所代表的数据包的长度。
RTPTime GetReceiveTime() const
-----返回收到数据包的时间。
const RTPAddress *GetSenderAddress() const
-----返回数据包中保存的(发送方)地址。
bool IsRTP() const
-----如果数据是RTP数据返回true,否则返回false代表是RTCP数据。
void ZeroData()
-----将指向数据包中保存的数据的指针设为0,这将阻止在调用类的析构函数时对实际数据进行的delete调用。该函数在类RTPPacket和RTCPCompoundPacket用来获取数据包数据而又不需要复制数据时使用,用来确保当RTPRawPacket的析构函数调用时不会删除数据。
3.2.11 RTPPacket
--------------------------------------------------------------------------头文件:rtppacket.h
类RTPPacket用来在RTPRawPacket对象表示一个RTP数据时解析(数据包)。该类也可以用来根据用户指定的参数生成一个RTP数据包,接口如下:
RTPPacket(RTPRawPacket &rawpacket)
-----基于rawpacket中的数据生成一个RTPPacket对象。
RTPPacket(uint8_t payloadtype, const void *payloaddata, size_t payloadlen, uint16_t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmaker, uint8_t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t extionid, uint16_t extensionlen_numwords, const void *extensiondata, size_t maxpacksizt=0)
-----为RTP数据包生成一个新的缓冲区,并根据给定的参数填充各个域。如果maxpacksize不等于0,则当总的数据包大小超过maxpacksize时将产生一个错误。该构造函数的参数都是自解释的,需要注意的是扩展头的大小由一个32位的字指定。
RTPPacket(uint8_t payloadtype, const void *payloaddata, size_t payloadlen, uint16_t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmaker, uint8_t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t extionid, uint16_t extensionlen_numwords, const void *extensiondata, void *buffer, size_t buffersize)
-----与上一个函数基本一样的函数,不同点在于数据是存储在一个由buffer指定的大小为buffersize的缓冲区中。
int GetCreationError() const
-----如果构造函数发生错误,该函数返回错误码。
bool HasExtension() const
-----如果RTP数据包有扩展头则返回true,否则返回false。
bool HasMarker() const
-----如果marker标志位被置位,返回true,否则返回false。
int GetCSRCCount() const
-----返回数据包中的CSRC数。
uint32_t GetCSRC(int num) const
-----返回指定的CSRC标识符,参数num可以从0到GetCSRCCount()-1。
uint8_t GetPayloadType() const
-----返回数据包的负载类型。
uint32_t GetExtendedSequenceNumber() const
-----返回数据包的扩展序列号。当数据包刚刚收到时,只有底16位被设置,高16位随后填充。
uint16_t GetSequenceNumber() const
-----返回数据包的序列号。
void SetExtendedSequenceNumber(uint32_t seq)
-----将数据包的扩展序列号设置为seq。
void GetTimestamp() const
-----返回数据包的时间戳。
uint32_t GetSSRC() const
-----返回数据包中的SSRC标识符。
uint8_t *GetPacketData() const
-----返回指向整个数据包的指针。
uint8_t *GetPayloadData() const
-----返回指向实际负载数据的指针。
size_t GetPacketLength() const
-----返回整个数据包的大小。
size_t GetPayloadLength() const
-----返回整个负载数据的大小。
uint16_t GetExtensionID() const
-----如果有扩展头,则该函数将返回扩展标识符。
uint8_t *GetExtensionData() const
-----返回指向扩展头数据的指针。
size_t GetExtensionLength() const
-----返回扩展头数据的大小。
RTPTime GetReceiveTime() const
-----当一个RTPPacket对象从RTPRawPacket对象中创建时,原始数据的接收时间将保存到RTPPacket对象中,该函数用来获取这个时间。
3.2.12 RTPCompoundPacket
-------------------------------------------------------------------------头文件:rtpcompoundpacket.h
该类描述RTCP复合数据包,接口如下:
RTCPCompoundPacket(RTPRawPacket &rawpack)
-----根据rawpack的数据生成一个RTCPCompoundPacket对象。
int GetCreationError()
-----如果在构造函数中的原始数据包无法解析,则该函数将返回出错原因的错误码。如果包的格式不合法则将返回ERR_RTP_RCTPCOMPOUND_INVALIDPACKET。
uint8_t *GetCompoundPacketData()
-----返回指向整个RTCP复合数据包数据的指针。
size_t GetCompoundPacketLength()
-----返回整个RTCP复合数据包的长度。
void GotoFirstPacket()
-----开始遍历整个RTCP复合数据包中的单个RTCP数据包。
RTCPPacket *GetNextPacket()
-----返回指向下一个独立RTCP数据包的指针。注意:返回的RTCPPacket对象可能不调用delete。RTCPPacket类的介绍如下:
RTCPPacket
-----------------------------------------------------------------------------头文件:rtppacket.h
类RTCPPacket是具体类型的RTCP数据包的基类。在类中定义的下面的类型指出了不同的具体数据包类型:
enum PacketType{ SR, RR, SDES, BYE, APP, Unknown };
类定义的成员函数有:
bool IsKnownFormat() const
-----如果子类可以解析数据则返回true,否则返回false。
PacketType GetPacketType() const
-----返回子类实现的具体的包类型:
--RTCPPacket::SR:表明是一个RTCPSRPacket对象。
--RTCPPacket::RR:表明是一个RTCPRRPacket对象。
--RTCPPacket::SDES:表明是一个RTCPSDESPacket对象。
--RTCPPacket::BYE:表明是一个RTCPBYEPacket对象。
--RTCPPacket::APP:表明是一个RTCPAPPPacket对象。
--RTCPPacket::Unkown:表明是一个RTCPUnknownPacket对象。
uint8_t *GetPacketData()
-----返回指向RTCP数据包中的数据的指针。
size_t GetPacketLength() const
-----返回RTCP数据包的长度。
RTCPSRPacket
-----------------------------------------------------------------------头文件:rtcpsrpacket.h
----------------------------------------------------------------------继承自:RTCPPacket
类描述了一个RTCP发送方报告数据包,接口如下:
RTCPSRPacket(uint8_t *data, size_t datalen)
-----基于长度为datalen的数据data创建一个RTCPSRPacket数据包对象。因为data指向的数据在类内部被引用(即不复制数据),所以必须确保在该对象存在期间data指针指向的内存是有效合法的。
uint32_t GetSenderSSRC() const
-----返回发送该数据包的(会话)参与者的SSRC。
RTPNTPTime GetNTPTimestamp() const
-----返回发送发报告中的NTP时间戳。
uint32_t GetRTPTimestamp() const
-----返回发送方报告中的RTP时间戳。
uint32_t GetSenderPacketCount() const
-----返回在发送方报告中的发送方数据包计数。
uint32_t GetSenderOctetCount() const
-----返回在发送方报告中的发送方字节计数。
int GetReceptionReportCount() const
-----返回数据包中的接收报告块的个数。(译注:not sure。原文:Return the number of report blocks present in this packet.)
uint32_t GetSSRC(int index) const
-----返回由index指定的接收报告块的SSRC,index的取值范围从0到GetReceptionReportCount()-1。注意:(函数)并不检查index范围的合法性。
uint8_t GetFractionLost(int index) const
-----返回index指定的接收报告中的丢包率属性(or字段?)。index的取值范围与上面一样,同样不检查index的范围的合法性。
int32_t GetLostPacketCount(int index) const
-----返回由index指出的接受报告中的丢失的数据包的个数。关于index的描述与上面相同。
uint32_t GetExtendedHighestSequenceNumber(int index) const
-----返回由index指出的接收报告中的扩展的最高序列号(??),index同上。
uint32_t GetJitter(int index) const
-----返回index指出的接收报告中的抖动属性,index同上。
uint32_t GetLSR(int index) const
-----返回index指出的接受报告中的LSR属性,index同上。
uint32_t GetDLSR(int index) const
-----返回index指出的接受报告中的DLSR属性,index同上。
【to be continued!】